文章目录
1.什么是JDBC?
现在的应用系统大多都离不开数据库,Java程序访问数据库的基本方式是通过JDBC(Java DataBase Connectivity,Java数据库连接),Java数据库连接用于在Java程序中实现数据库操作的功能,它提供了执行SQL语句,访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC 操作数据库的所有类。
2.JDBC工作原理?
JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类,真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。
JDBC访问数据库层次结构:
3.JDBC使用步骤
3.1 JDBC使用流程图
- 加载数据库驱动,并将其注册到DriverManager中,一般使用反射
Class.forName(String dirverName)
- 建立数据库连接,取得Connection对象,一般通过
DriverManager.getConnection(url,username,password)
方法实现,其中url表示连接数据库的字符串、username表示连接数据库的用户名,password表示连接数据库的密码 - 建立Statement对象或者PreparedStatement对象
- 执行SQL语句
- 访问结果集ResultSet对象
- 依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源
4.JDBC常用接口和类
在Java JDBC编程中对 数据库的操作 均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的,所以掌握Java JDBC API(位于java.sql
包下)即可掌握Java数据库编程。
4.1 数据库连接
获取Connection对象通常有两种方式:
- 通过DriverManager的静态方法获取
- 通过DataSource(数据源)对象获取
4.2 Statement对象
Statement对象主要是将SQL语句发送到数据库上
JDBC API中主要提供了三种Statement对象。
实际开发中最常用的是PreparedStatement
对象,有以下优点:
- 效率更高。在使用PreparedStatement对象执行SQL命令时,命令会被数据库进行编译和解析,并放到命令缓冲区,然后,每当执行同一个PreparedStatement对象时,由于在缓冲区中可以发现预编译的命令。虽然它会被在解析一次,但不会被再次编译,可以重复使用,能够有效的提高系统的性能,因此,如果要执行插入、更新、删除等操作,最好使用PreparedStatement。
- 代码的可读性和维护性更好。
以下两种方法分别使用Statement与PreparedStatement来执行SQL语句
stmt.executeUpdate("insert into (col1,col2) values('val1','val2')");
perstmt = con.prepareStatement("insert into t_name(col1,col2) values(?,?)");
perstmt.setString(1,val1);
perstmt.setString(2,val2);
- 安全性更好。使用PreparedStatement能够预防SQL注入
SQL注入指的是通过把SQL命令 插入到Web表单递交 或输入域名 或页面请求的查询字符串,最终达到欺骗服务器,达到恶意执行SQL命令的目的。
但是注入只对SQL语句的编译过程有破坏作用,而执行阶段只是把输入串作为数据处理,不在需要对SQL语句进行解析,因此也就避免了类似select * from user where name ='aa' and password='bb' or 1=1
的SQL注入问题的发生
主要掌握两种执行SQL的方法:
executeQuery()
方法执行后返回单个结果集,通常用于selectexecuteUpdate()
方法返回值是一个整数,通常用于update、insert
4.3 ResultSet对象
ResultSet对象被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套get×××
方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指向的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()
方法,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。