通过JDBC-ODBC桥访问MySQL数据库
通过JDBC-ODBC桥的方式访问数据库,需要经过多层的调用,因此利用JDBC-ODBC桥访问数据库的效率比较低。不过在数据没有提供JDBC驱动而只有ODBC驱动的情况下,也只能利用JDBC-ODBC桥的方式访问数据库。本示例通过JDBC-ODBC桥的方式访问MySQL数据库(Windows系统)。
1.安装ODBC驱动
首先下载ODBC驱动并安装,下载地址:
http://download.****.net/download/jisuanjiguoba/10248873
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。