《Java Web开发实战》Java工程师推荐的进阶之路

《Java Web开发实战》一书更加趋于实战性。此教材由浅入深、循序渐进,在语法阐述时尽量避免术语和公式,使初学者能够快速入门,全面掌握实战技能。它既可以作为高等院校本、专科计算机相关专业的Java Web入门进阶教材,也可作为广大计算机编程爱好的学习参考书。

下面给大家分享点本书的干货内容,关于JDBC内容继续给大家学习,想要完整资料的可以衔接查看之前的文章。

1.1.1 JDBC程序的开发步骤

编写一个JDBC程序需要完成六个步骤,具体如下。

l 加载并注册数据库驱动(Driver类)

l 获取数据库连接(Connection对象)

l 获取SQL语句执行者(Statement对象)

l 执行SQL语句

l 操作结果集(ResultSet对象)

l 回收数据库资源

编写JDBC程序的每个步骤离不开JDBC相关API的支持,接下来,本书将对编写JDBC程序的具体步骤展开详细讲解。

1.1.2 加载并注册数据库驱动

JDBC定义了驱动接口java.sql.Driver,MySql数据库的驱动包为接口java.sql.Driver提供了实现类com.mysql.jdbc.Driver。在实际开发中,一般采用Class类的forName方法加载驱动类,具体实现代码如下。

Class.forName("com.mysql.jdbc.Driver");

类加载时,将执行被加载类的静态代码块,而com.mysql.jdbc.Driver类有一个静态代码块如下。

static{

    	try{

      	  java.sql.DriverManager.registerDriver(newDriver());

   	 }catch(SQLExceptione){

       	  throw new RuntimeException("can't register driver!");

  	  }

	}

因此,Driver类在加载过程中即完成了对驱动的注册。

1.1.3 获取数据库连接

DriverManager类是驱动管理类,管理一组JDBC驱动程序,它通过属性drivers存入很多驱动类。当DriverManager获取连接的时候,它会把drivers里的各个驱动的URL和创建连接时传进来的URL逐一比较,遇到对应的URL,则会尝试建立连接。通过DriverManager类获取连接(Connection对象)的具体实现代码如下。

Connection conn = DriverManager.getConnection

	(String url, String username, String password);

从上述代码片段可以看出,DriverManager类的getConnection()方法共有三个参数,它们分别表示数据库URL、登录数据库的用户名和密码,如果三者均匹配成功,就可获取数据库连接,为JDBC实现对数据库的操作奠定基础。

1.1.4 获取SQL语句执行者

Connection对象提供了3种获取SQL语句执行者(Statement对象)的方法,其中,调用createStatement()方法获取Statement对象,调用prepareStatement()方法获取PreparedSatement对象,调用prepareCall()方法获取CallableStatement对象,以获取Statement对象为例,具体实现代码如下。

Statement statement = conn.createStatement();

如果获取PreparedStatement对象和CallableStatement对象,还需传入String类型的SQL语句作为参数。

1.1.5 执行SQL语句并操作结果集

Statement对象提供了3种方法执行SQL语句,其中,execute()方法可以执行任何SQL语句;executeUpdate()方法用于执行DDL语句和DML语句,执行DDL语句时,返回值为0,执行DML语句时,返回值为影响的行数;executeQuery()方法用于执行实现查询功能的SQL语句,返回值是一个结果集(ResultSet对象)。

以executeQuery()方法为例,具体实现代码如下。

ResultSet resultSet = statement.executeQuery(sql);

结果集(ResultSet对象)封装了执行查询SQL语句后返回的结果,程序可以通过遍历结果集获取每一行的数据。ResultSet对象具有指向其当前数据行的指针,在最开始的时候指针被置于第一行之前,可调用ResultSet接口的next()方法将指针移动到下一行,实际应用时常将ResultSet接口的next()方法放在while()循环当中,如果有下一行返回True,遍历继续进行,没有下一行时返回False,遍历结束。

从结果集中获取数据分为两个步骤,首先调用next()、previous()、first()、last()等方法移动指针,其次调用getXxx()方法获取指针指向行的特定列的值。该方法既可以使用列索引作为参数,也可以使用列名称作为参数。使用列索引作为参数性能更好,使用列名称作为参数可读性更好,操作结果集的具体实现代码如下。

while (rs.next()) {

	Object object = resultSet.getObject(1);

	}

其中,参数“1”表示获取当前指针指向行的第1列的数据,除此之外,getObject()方法的参数名称也可以是String类型的数据表的列名,此时getObject()方法获取该列名对应的数据。

1.1.6 回收数据库资源

为了节省资源,提升性能,包括 Connection、Statement、ResultSet在内的JDBC资源在使用之后要及时关闭。关闭的正确顺序是:先得到的后关闭,后得到的先关闭。回收数据库资源的具体实现代码如下。

resultSet.close();

statement.close();

conn.close();

1.1.7 编写一个JDBC程序

前面的小节讲解了编写JDBC程序的具体步骤,接下来通过一个实例演示JDBC程序的具体实现。

(1)在MySQL中创建数据库chapter01和数据表student,SQL语句如下所示。

DROP DATABASE IF EXISTS chapter01;

CREATE DATABASE chapter01;

USE chapter01;

CREATE TABLE student(

sid INT PRIMARY KEY AUTO_INCREMENT, #ID

sname VARCHAR(20), #学生姓名

age VARCHAR(20), #学生年龄

course VARCHAR(20) #专业

);

(2)向数据表student添加数据,SQL语句如下所示。

INSERT INTO student(sname,age,course) VALUES ('zhangsan','20','Java');

INSERT INTO student(sname,age,course) VALUES ('lisi','21','Java');

INSERT INTO student(sname,age,course) VALUES ('wangwu','22','Java');

INSERT INTO student(sname,age,course) VALUES ('zhaoliu','22','Python');

INSERT INTO student(sname,age,course) VALUES ('sunqi','22','PHP');

INSERT INTO student(sname,age,course) VALUES ('zhangsansan','22','PHP');

(3)通过SQL语句测试数据是否添加成功,执行结果如下所示。

mysql> SELECT * FROM STUDENT;

±----±------------±-----±-------+

| sid | sname | age | course |

±----±------------±-----±-------+

| 1 | zhangsan | 20 | Java |

| 2 | lisi | 21 | Java |

| 3 | wangwu | 22 | Java |

| 4 | zhaoliu | 22 | Python |

| 5 | sunqi | 22 | PHP |

| 6 | zhangsansan | 22 | PHP |

±----±------------±-----±-------+

6 rows in set (0.00 sec)

	从以上执行结果可以看出,数据添加成功。

(4)在Eclipse中新建Java工程chapter01,在工程chapter01下新建目录lib,将MySQL数据库的驱动jar包mysql-connector-java-5.1.37-bin.jar复制到lib目录下,鼠标右击lib目录下的mysql-connector-java-5.1.37-bin.jar,在弹出的菜单中选择Build Path→Add to Build Path,完成jar包的导入。在工程chapter01的src目录下新建com.qfedu.jdbc包,在该包下新建类TestJDBC01,具体代码如例1-1所示。

【例1-1】 TestJDBC01.java

1 package com.qfedu.jdbc;

2 import java.sql.Connection;

3 import java.sql.DriverManager;

4 import java.sql.ResultSet;

5 import java.sql.Statement;

6 public class TestJDBC01 {

7 public static void main(String[] args) throws Exception {

8 //加载并注册数据库驱动

9 Class.forName(“com.mysql.jdbc.Driver”);

10 String url =“jdbc:mysql://localhost:3306/chapter01”;

11 String username=“root”;

12 String password =“root”;

13 //获取数据库连接

14 Connection conn

15 =DriverManager.getConnection(url,username,password);

16 Statement statement = conn.createStatement();

17 //获取执行者对象

18 String sql = "select * from student where sname =‘zhangsan’ ";

19 //执行SQL语句

20 ResultSet resultSet = statement.executeQuery(sql);

21 System.out.println(“sid|sname|age|course”);

22 //处理结果集

23 while (resultSet.next()) {

24 int sid = resultSet.getInt(“sid”);

25 String sname = resultSet.getString(“sname”);

26 String age = resultSet.getString(“age”);

27 String course = resultSet.getString(“course”);

28 System.out.println(sid+"|"+sname+"|"+age+"|"+course);

29 }

30 //关闭资源

31 resultSet.close();

32 statement.close();

33 conn.close();

34 }

35 }

执行TestJDBC01类,具体执行结果如图1.5所示。

图1.1 执行结果

从以上执行结果可以看出,程序查询出数据表student中的数据并输出到控制台。

你可能感兴趣的:(《Java Web开发实战》Java工程师推荐的进阶之路)