千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:千锋视频教程 >  Java视频教程  >  JDBC基础之JDBC开发

JDBC基础之JDBC开发

时间:2018-08-21 14:46     来源:千锋教育 作者:千锋Java

  JDBC程序的开发步骤

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

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

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

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

  执行SQL语句

  操作结果集(ResultSet对象)

  回收数据库资源

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

  加载并注册数据库驱动

  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类在加载过程中即完成了对驱动的注册。

  获取数据库连接

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

  Connection conn = DriverManager.getConnection

  (String url, String username, String password);

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

  获取SQL语句执行者

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

  Statement statement = conn.createStatement();

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

  执行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()方法获取该列名对应的数据。

  回收数据库资源

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

  resultSet.close();

  statement.close();

  conn.close();

  编写一个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语句测试数据是否添加成功,执行结果如下所示。

1

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

  (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

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

  学习java开发,可以参考千锋提供的java学习路线,该学习路线罗列了各阶段完整的java学习知识,根据千锋提供的java学习路线图并结合千锋java视频教程一起学习,可以让你对学好java开发需要掌握的知识有个清晰的了解,并能快速入门java开发。

  • 北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
    咨询电话: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大学城)
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990 021-65233829-609
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55191750
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 广州校区地址:广州市天河区元岗路200号慧通产业园B9三层
    咨询电话:020-38035223 020-38035220
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 武汉金融港校区地址:武汉市东湖高新技术开发区光谷大道77号金融港B18栋3楼
    武汉智慧园校区地址:武汉市东湖高新技术开发区光谷大道61号智慧园21栋2楼
    咨询电话:027-59313371
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、360网络安全、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-811-9990 028-83178771
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85363390
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 杭州旺田校区:浙江省杭州市江干区九堡旺田书画城A座4层
    杭州龙驰校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层
    咨询电话:400-811-9990 0571-86893632/0571-86094032
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
    咨询电话:0532-80911190
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-811-9990 023-68883009
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513210
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
    咨询电话:400-811-9990/0451-87173191
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱