JDBC
为了使Java编写的程序不依赖于具体的数据库,Java提供了专门用于操作数据库的API,即JDBC(Java Data Base Connectivity)。JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库(如下图所示)。

程序经常使用JDBC进行如下的操作。
与一个数据库建立连接;
向已连接的数据库发送SQL语句;
处理SQL语句返回的结果。
连接数据库
MySQL数据库服务器启动后,应用程序为了能和数据库交互信息,必须首先和MySQL数据库服务器上的数据库建立连接。目前在开发中常用的连接数据库的方式是加载JDBC-数据库驱动(连接器)(用Java语言编写的数据库驱动称作JDBC-数据库驱动),即JDBC调用本地的JDBC-数据库驱动和相应的数据库建立连接,如下图所示。Java运行环境将JDBC-数据库驱动转换为DBMS(数据库管理系统)所使用的专用协议来实现和特定的DBMS交互信息。

使用JDBC-数据库驱动方式和数据库建立连接需要经过两个步骤:
加载JDBC-数据库驱动。
和指定的数据库建立连接。
①下载JDBC-MySQL数据库驱动
应用程序为了能访问MySQL数据库服务器上的数据库,必须保证应用程序所驻留的计算机上安装有相应的JDBC-MySQL数据库驱动。
可以登录MySQL的官方网站www.mysql.com,下载JDBC-MySQL数据库驱动(JDBC Driver for MySQL)。登录www.mysql.com后,在页面的导航条上选择Products,然后在页面的右侧区中的MySQL Features下选择MySQL Connectors (MySQL连接器),进入数据库驱动下载页面,也可以直接在浏览器的地址栏中直接输入“http://www.mysql.com/products/connector/”,进入数据库驱动下载页面。在数据库驱动下载页面上选择JDBC Driver for MySQL (Connector/J),然后单击Download按钮即可。本书下载的是mysql-connector-java-5.1.40.zip,将该zip文件解压至硬盘,解压后的目录下的mysql-connector-java5.1.40-bin.jar文件就是连接MySQL数据库的JDBC-数据库驱动。将该驱动复制到JDK的扩展目录中(即JAVA HOME环境变量指定的JDK)。
注:安装JDK时,还额外有一个JRE,最好将mysql-connector-java-5.1.28-bin.jar文件也复制到C:\AProgram Files(x86)\Java\jre1.8.0_45lib\ext中。保证即使启用该环境运行程序,也会有需要的驱动。
②加载JDBC-MySQL数据库驱动
应用程序负责加载的JDBC-MySQL数据库驱动的代码如下:
try {Class.forName("com.mysql.jdbc.Driver");}catch(Exception e) {}
MySQL数据库驱动被封装在Driver类中,该类的包名是com.mysql.jdbc,该类不是Java运行环境类库中的类,所以需要放置在jre的扩展中。
③连接数据库
java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法):
Connection getConnection(java.lang.String, java.lang.String, java.lang.String)Connection getConnection(java.lang.String)
这两个方法都可能抛出SQLException异常,DriverManager类调用上述方法可以和数据库建立连接,即可以返回一个Connection对象。
为了能和MySQL数据库服务器管理的数据库建立连接,必须保证该MySQL数据库服务器已经启动,如果没有更改过MySQL数据库服务器的配置,那么该数据库服务器占用的端口是3306。假设MySQL数据库服务器所驻留的计算机的IP地址是192.168.31.30(命令行运行ipconfig可以得到当前计算机的IP地址)。
应用程序要和MySQL数据库服务器管理的数据库students(在上节建立的数据库)建立连接,而有权访问数据库students的用户的id和密码分别是root和空,那么使用Connection getConnection(java.lang.String)方法建立连接的代码如下:
Connection con;String uri = "jdbc:mysql://192.168.31.30:3306/students?user=root&password=&useSSL=true";try {con = DriverManager.getConnection(uri); //连接代码}catch(SQLException e) {System.out.println(e);}
如果root用户密码是99,将&password=更改为&password=99即可。
MySQL5.7版本建议应用程序和数据库服务器建立连接时明确设置SSL(Secure Sockets Layer),即在连接字序列信息中明确使用useSSL参数,并设置值是true或false;如果不设置useSSL参数,程序运行时总会提示用户程序进行明确设置(但不影响程序的运行)。对于早期的MySQL版本,用户程序不必设置该项。
使用Connection getConnection (java.lang.String, java.lang.String, java.lang.String)方法建立连接的代码如下:
Connection con;String uri = "jdbc:mysql://192.168.31.30:3306/students? useSSL=true";String user ="root";String password = "";try {con = DriverManager.getConnection(uri,user,password); //连接代码}catch(SQLException e) {System.out.println(e);}
应用程序一旦和某个数据库建立连接,就可以通过SQL语句和该数据库中的表交互信息,例如查询、修改、更新表中的记录。
注:如果用户要和连接MySQL驻留在同一计算机上,使用的IP地址可以是127.0.0.1或localhost。另外,由于3306是MySQL数据库服务器的默认端口号,连接数据库时允许应用程序省略默认的3360。
④注意汉字问题
需要特别注意的是,如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8:
String uri = "jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";con = DriverManager.getConnection(uri, "root",""); //连接代码







