|
1. 利用CORBA實(shí)現(xiàn)數(shù)據(jù)的訪問,也就是通過客戶端的代碼,訪問服務(wù)器端的代碼。首先是定義一個(gè)idl文件,里面的主要類型就是定義一個(gè)接口,類容如下:

2. 然后利用idlj –fall DataService.idl 命令來編譯idl文件,編譯后得到了許多的java文件,文件如下所示:

再然后,在該文件中建立一個(gè)Server文件夾,然后將生成的文件放入,并且建立一個(gè)java功能,作為服務(wù)器端,這里要求從數(shù)據(jù)庫讀取數(shù)據(jù),所以我們寫了一個(gè)DBManager類來實(shí)現(xiàn)與數(shù)據(jù)庫的連接,以及插入、查詢功能:里面的代碼如下:
-
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.ResultSet;
- importjava.sql.SQLException;
-
- publicclass DBManager {
- private static String user ="root";
- private static String pass ="962464";
- private static String className="com.mysql.jdbc.Driver";
- private static String url ="jdbc:mysql://localhost:3306/students";
- private static Connection conn;
- private static java.sql.Statement state;
- public static void init()
- {
- try {
- Class.forName(className);
- conn =DriverManager.getConnection(url,user,pass);
- state =conn.createStatement();
-
-
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catchblock
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catchblock
- e.printStackTrace();
- }
- }
- public static void CreateTable(){
- String sql = "create tablestuScore ( num char(20) Primary key,score double);";
- try {
- state.execute(sql);
-
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- public static void insert(String num,doublescore)
- {
- String sql = "insert intostuScore values("+"'"+num+"',"+score+");";
- try {
- state.execute(sql);
-
- } catch (SQLException e) {
- // TODO Auto-generated catchblock
- e.printStackTrace();
- }
- }
-
-
- public static double select(String num)
- {
- String sql = "select score from stuScore where num= '"+num+"';";
- double result= 0;
- try {
- ResultSet rs =state.executeQuery(sql);
- while(rs.next())
- {
- result = rs.getDouble("score");
- }
-
- } catch (SQLException e) {
- // TODO Auto-generated catchblock
- e.printStackTrace();
- }
- return result;
- }
- }
3. 然后就是編寫服務(wù)器端的代碼,在服務(wù)器端里面有一個(gè)類實(shí)現(xiàn)定一個(gè)的接口里面的代碼如下:
- class DataServiceImpl extends DataServicePOA {
- private ORB orb ;
- private studentScore s =new studentScore();
- publicvoid setorb(ORB orb)
- {
- this.orb = orb;
-
- }
-
- @Override
- publicvoid insert(String num, double score) {
- DBManager.insert(num, score);
- }
- @Override
- publicdouble select(String num) {
-
- return DBManager.select(num);
-
- }
- @Override
- publicvoid selectAll() {
- // TODO Auto-generatedmethod stub
-
- }
- }
這樣服務(wù)器端提供的功能都實(shí)現(xiàn)了,然后在服務(wù)端創(chuàng)建服務(wù)對(duì)象并將其向 ORB 注冊(cè)這樣服務(wù)端的代碼就寫好了。
4. 下面就是寫客戶端的代碼,和前面一個(gè)將生成的文件加入到客戶端文件中,然后編寫一個(gè)客戶端文件,主要是實(shí)現(xiàn)數(shù)據(jù)初始化,并且連接服務(wù)程序,這里面需要輸入IOR碼,并且必須和服務(wù)器端產(chǎn)生的一樣,這樣才能得到服務(wù)端的服務(wù),得到服務(wù)對(duì)象之后就是對(duì)服務(wù)端的方法的調(diào)用實(shí)現(xiàn)數(shù)據(jù)的插入和查詢操作。
5. 下面就將運(yùn)行的過程演示一遍:
首先是啟動(dòng)服務(wù)端:

然后就是運(yùn)行客戶端:

等待用戶輸入IOR碼.(是由服務(wù)器端產(chǎn)生的),然后輸入IOR碼:

然后就是根據(jù)數(shù)字選擇操作開始調(diào)用方法了,我們隨便來演示幾個(gè):

插入成功,然后我們查詢一下看看是不是正確的:

然后為了保證是正確的我們?cè)偃?shù)據(jù)庫中看看:

數(shù)據(jù)庫中也有我們插入的數(shù)據(jù),說明是正確的。
這樣我們就完成了java開發(fā)CORBA的過程。
|