1. 程式人生 > >通過JDBC-ODBC橋訪問MySQL資料庫

通過JDBC-ODBC橋訪問MySQL資料庫

       通過JDBC-ODBC橋的方式訪問資料庫,需要經過多層的呼叫,因此利用JDBC-ODBC橋訪問資料庫的效率比較低。不過在資料沒有提供JDBC驅動而只有ODBC驅動的情況下,也只能利用JDBC-ODBC橋的方式訪問資料庫。本示例通過JDBC-ODBC橋的方式訪問MySQL資料庫(Windows系統)。

1.安裝ODBC驅動

      首先下載ODBC驅動並安裝,下載地址:

2.配置ODBC資料來源

      ①首先按順序開啟【開始選單】——【控制面板】,並按下圖所示切換到小圖示檢視,找到視窗中的【管理工具】並開啟管理工具。

       

      ②在彈出的視窗中選擇【資料來源(ODBC)】並雙擊開啟。

       

      ③選擇【使用者DSN】然後點選【新增】。

       

      ④選擇MySQL ODBC 5.2 ANSI Driver並點選【完成】。注:也可以選擇MySQL ODBC 5.2 Unicode Driver,區別是MySQL ODBC 5.2 ANSI Driver只針對有限的字符集範圍,而MySQL ODBC 5.2 Unicode Driver支援更多的字符集,即支援多語言。如果選擇了MySQL ODBC 5.2 Unicode Driver一定要看部落格後邊的注意事項。

       

      ⑤填寫相關配置資訊。前面兩空根據專案填寫,例如這裡的testMySQL,該名稱在程式中會用到。然後填寫TCP/IP Server和Port,最後填寫MySQL的使用者名稱、密碼、資料庫名稱,這裡的使用的資料庫是test(需要預先在MySQL中建立名為test的資料庫)。填寫完成後可點選【Test】按鈕測試是否配置成功,會有相應的配置成功提示資訊,配置成功後點擊【OK】按鈕。

       

      ⑥配置完成後即可看到ODBC資料來源管理器中多了一項名稱為“testMySQL”的資料來源。

       

3.編寫相關程式碼

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;

public class Jdbctest {
   public static void main(String[] args) throws Exception {
       Connection conn = null;
       String user = "root";
       String pwd = "root";
       String sql;
       try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
           //下面的testMySQL就是前面建立的名稱為testMySQL的資料來源


           conn = DriverManager.getConnection("jdbc:odbc:testMySQL","root","root");
           // 上面的兩個root依次表示MySQL資料庫的登陸使用者名稱和密碼,根據自己的設定而更改
           Statement stmt = conn.createStatement();
           sql = "create table student(NO char(20),name varchar(20),primary key(NO))charset utf8 collate utf8_general_ci";
           int result = stmt.executeUpdate(sql);// executeUpdate語句會返回一個受影響的行數,如果返回-1就沒有成功
           if (result != -1) {
               System.out.println("建立資料表成功");
               sql = "insert into student(NO,name) values('2018001','陳呈祥')";
               result = stmt.executeUpdate(sql);
               sql = "insert into student(NO,name) values('2018002','李金鑫')";
               result = stmt.executeUpdate(sql);
               sql = "select * from student";
               ResultSet rs = stmt.executeQuery(sql);// executeQuery會返回結果的集合,否則返回空值
               System.out.println("學號\t姓名");
               while (rs.next()) {
                   System.out
                           .println(rs.getString(1) + "\t" + rs.getString(2));// 入如果返回的是int型別可以用getInt()
               }
           }
       } catch (SQLException e) {
           System.out.println("MySQL操作有誤");
           e.printStackTrace();
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           conn.close();
       } 

   }

}

執行上面的程式即可出現如下的結果:

        

注意事項

      如果在資料來源配置時選擇了MySQL ODBC 5.2 Unicode Driver則可能會出現如下的中文部分顯示為?的錯誤情況。這種ODBC連線MySQL時的中文亂碼問題網上很多解決方案,但是試了之後並沒有解決亂碼問題,最後找到了一種針對本例的解決方法。

        

      這個問題出現的原因是由ODBC資料來源的一些設定導致的,重新按步驟2中的方式開啟ODBC資料來源管理器,如下所示,選中之前配置的資料來源,並點選右側的【配置】。

       

      在下圖中點選【Details>>】按鈕。

       

      接著在下圖中選擇Character Set為gb2312,並點選【OK】即可。重新執行上面的程式即可看到中文正常顯示。選擇gb2312是由於使用phpMyAdmin對MySQL進行管理時,建立的表及其中表項的字符集均為gb2312_chinese_ci。