2.1.2 JDBC操作数据库的步骤
在上一节介绍了操作数据库的一般步骤。本节就以JDBC为例来一一对照这些步骤操作MySQL数据库。JDBC操作数据库的步骤如下:
1. 装载数据库驱动:这一步对于JDBC来说是必须的。用JDBC装载数据库驱动有两种方法。
(1)使用Class.forName方法
forName是Class类的一个静态方法,返回Class对象。它有一个字符串类型的参数,需要传入一个JDBC驱动类名,如下面代码所示:
Class.forName("com.mysql.jdbc.Driver");
其中com.mysql.jdbc.Driver为MySQL的JDBC驱动类名。
(2)静态创建JDBC驱动类实例
不仅可以使用forName动态装载JDBC驱动类,也可以直接使用new关键字静态创建JDBC驱动类对象,代码如下:
Driver myDriver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(myDriver);
其中registerDriver是DriverManager类的静态方法,用于注册创建的JDBC驱动类对象。
2. 建立数据库连接:在JDBC中,可以使用DriverManager类的getConnection方法获得数据库连接对象。在获得数据库连接对象之前,需要知道如下五种信息:
(1)数据库服务器名:localhost
(2)端口号:省略
(3)数据库名:jdbcdemo
(4)用户名:root
(5)密码:1234
由于MySQL使用了默认的端口号(3306),因此,端口号信息可被省略。MySQL的连接字符串格式如下:
jdbc:mysql://servername/dbname?parameter
按着上面的信息依次填入这个连接字符串,填完后的连接字符串如下:
jdbc:mysql://localhost/
jdbcdemo?user=root&password=1234&characterEncoding=UTF8
由于需要在数据库中处理中文,所以在连接字符串的最后需要加上“characterEncoding=UTF8”,以保证正确处理中文。获得数据连接对象的代码如下:
String connStr = "jdbc:mysql://localhost/mydb?" +
"user=root&password=1234&characterEncoding=UTF8";
Connection conn = DriverManager.getConnection(connStr);
我们也可以不在连接字符串中指定用户名和密码,而使用getConnection方法的另外一个重载形式传递用户名和密码,代码如下:
String connStr = "jdbc:mysql://localhost/
mydb?characterEncoding=UTF8";
Connection conn = DriverManager.getConnection(connStr, "root",
"1234");
除此之外,也可以使用Connection类的setCatalog方法改变当前数据库,代码如下:
conn.setCatalog("newdb");
3. 获得用于进行数据操作的对象:在JDBC中可以使用Statement对象和PreparedStatement对象来操作数据库。在本节只介绍Statement对象,PreparedStatement对象将在2.4.2节介绍。Statement对象可以通过Connection接口的createStatement方法创建,createStatement方法有三种重载形式,在本节中只介绍一种无参数的重载形式。创建Statement对象的代码如下:
Statement stmt = conn.createStatement();
通过Statement对象可以对数据库进行查询、增、删、改等操作。在本节只介绍Statement接口的两个方法:execute和executeQuery。Statement接口的其他方法将在后面的章节介绍。
execute方法一般用于执行DDL(CREATE、DROP等)语句,或是执行INSERT、UPDATE、DELETE等语句,如下面代码所示:
Statement stmt = conn.createStatement();
stmt.execute("DROP TABLE IF EXISTS t_books");
executeQuery一般用于执行SELECT语句。这个方法通过一个ResultSet对象返回查询结果, 代码如下:
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM t_books");
4. 关闭数据库:最后一步就是关闭数据库。也就是关闭Connection对象。但建议在关闭Connection对象之前,应先关闭Statement对象,代码如下:
stmt.close();
conn.close();