通過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。