通过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数据源

      ①首先按顺序打开【开始菜单】——【控制面板】,并按下图所示切换到小图标视图,找到窗口中的【管理工具】并打开管理工具。

       通过JDBC-ODBC桥访问MySQL数据库

      ②在弹出的窗口中选择【数据源(ODBC)】并双击打开。

       通过JDBC-ODBC桥访问MySQL数据库

      ③选择【用户DSN】然后点击【添加】。

       通过JDBC-ODBC桥访问MySQL数据库

      ④选择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一定要看博客后边的注意事项。

       通过JDBC-ODBC桥访问MySQL数据库

      ⑤填写相关配置信息。前面两空根据项目填写,例如这里的testMySQL,该名称在程序中会用到。然后填写TCP/IP Server和Port,最后填写MySQL的用户名、密码、数据库名称,这里的使用的数据库是test(需要预先在MySQL中创建名为test的数据库)。填写完成后可点击【Test】按钮测试是否配置成功,会有相应的配置成功提示信息,配置成功后点击【OK】按钮。

       通过JDBC-ODBC桥访问MySQL数据库

      ⑥配置完成后即可看到ODBC数据源管理器中多了一项名称为“testMySQL”的数据源。

       通过JDBC-ODBC桥访问MySQL数据库

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();
       }  

   }  

  }

运行上面的程序即可出现如下的结果:

        通过JDBC-ODBC桥访问MySQL数据库


注意事项

      如果在数据源配置时选择了MySQL ODBC 5.2 Unicode Driver则可能会出现如下的中文部分显示为?的错误情况。这种ODBC连接MySQL时的中文乱码问题网上很多解决方案,但是试了之后并没有解决乱码问题,最后找到了一种针对本例的解决方法。

        通过JDBC-ODBC桥访问MySQL数据库

      这个问题出现的原因是由ODBC数据源的一些设置导致的,重新按步骤2中的方式打开ODBC数据源管理器,如下所示,选中之前配置的数据源,并点击右侧的【配置】。

       通过JDBC-ODBC桥访问MySQL数据库

      在下图中点击【Details>>】按钮。

       通过JDBC-ODBC桥访问MySQL数据库

      接着在下图中选择Character Set为gb2312,并点击【OK】即可。重新执行上面的程序即可看到中文正常显示。选择gb2312是由于使用phpMyAdmin对MySQL进行管理时,创建的表及其中表项的字符集均为gb2312_chinese_ci。

       通过JDBC-ODBC桥访问MySQL数据库