暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第十一章 JDBC与MySQL数据库(3)——JDBC与连接数据库

凯哥的故事 2020-09-02
291


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-数据库驱动方式和数据库建立连接需要经过两个步骤:

  1. 加载JDBC-数据库驱动。

  2. 和指定的数据库建立连接。

①下载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",""); //连接代码


文章转载自凯哥的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论