JDBC
JDBC(Java Database Connectivity)是 Java环境中访问SQL数据库的一组API。它包 括一些用Java语言编写的类和接口,能方便地 向任何关系型数据库发送SQL命令。
JDBC Type-4驱动程序的安装方法
●以MySQL数据库为例,只须将下载的MySQL JDBC驱 动程序mysql-connector-java-8.0.19-bin.jar包置于 Web服务器的lib文件夹中即可。
●第二种方法,也可以在开发环境中导入JAR包,然后 随Web应用一起发布至Web服务器。
JDBC API
●java.sql包
JDBC API的核心部分在java.sql包中,包含访问并处 理数据库数据的API。
● javax.sql包
javax.sql包是java.sql 包的补充,它从JDK1.4版本开 始提供,支持连接池和数据源技术,支持分布式事务 处理
常用JDBC API类和接口
●java.sql.Driver接口
该接口的实现类是某种数据库的一个驱动程序类,用于初始化驱动程序。
加载此驱动程序的代码类似于: Class.forName("SQLServerDriver");
MySQL的JDBC Type-4驱动程序的类名为: com.mysql.cj.jdbc.Driver
●java.sql.DriverManager类
管理注册到DriverManager中的JDBC驱动程序,并根据需要使用JDBC驱动程序建立与数据库服务器的网络连接。
常用的方法有:
①getConnection(String url, String user, String password)
②getConnection(String url)
eg:getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai", "root", "javaee")
eg:getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&user=root&password=javaee")
●java.sql.Connection接口
代表一个数据库连接,常用的方法有:
①createStatement():创建一个 Statement 对象,用于发送SQL 语句给数据库服务器。该方法可带不同参数以便指定结果集的类型、并发控制方式以及保护性等。
②prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability):
为一条带 参数的SQL语句生成PreparedStatement对象(预编译对象) 。第一个形参是带有"?"号参数的预编译SQL语句,其它参数 含义同前。
③prepareCall(String sql):为一条带参数的存储过程调用语句,生成CallableStatement预编译对象,各参数含义同前
④setAutoCommit(boolean autoCommit):
定义事务提交模式, 参数取true时为事务自动提交模式,即对接收到的每条SQL语句当作一个独立事务提交。参数取false时则表示手动事务提交模式,须调用commit()手动提交事务或调用rollback()撤消 事务。
⑤commit():提交事务,这个方法只有在手动事务提交模式下才有效。
⑥rollback():回滚所有的事务。
⑦setSavepoint():在当前语句处创建一个回滚点,并返回一个 Savepoint对象表示此回滚点。 ⑧rollback(Savepoint sp):回滚事务到指定的回滚点处。
⑨close():关闭数据库连接,释放资源。
●java.sql.Statement接口
用于向数据库服务器发送SQL语句,接口中常用方法有:
①executeQuery(String sql):将一条select查询语句发送给数据库服务器执行,查询结果封装在ResultSet对象中返回。形参是以字符串表示的SQL语句。这个方法不能执行update、 delete、insert等更新操作语句。
②executeUpdate(String sql):用来执行delete、update和 insert语句,也可以执行一些建库、建表语句,返回值是整数, 表示语句影响的记录数。
③setMaxRows(int max):定义ResultSet对象最多存储max条记录,超过部分被丢弃。
●java.sql.ResultSet接口
代表SQL查询得到的记录集。可设置Statement对象的 ResultSet 对象的指针移动特性和是否可更新等。主要方法如下:
①first()、previous()、next()、last()、absolute(int row)等:移动记录指针。
②getString(String column Name)/getString(int columnIndex)、 getByte()、getShort()、getInt()、getLong()、getFloat()、 getDouble()、getBoolean()、getDate()、getTime()、 getObject()、getBlob()、getClob()等:读取当前记录的指定字段值。
通过Blob接口的getBinaryStream()/setBinaryStream() 方法可获得此二进制对象的输入/输出流对象
③updateString(String columnName, String x)、updateShort()、 updateInt()、updateLong()、updateByte()、updateDate()、 updateTime()、updateFloat() 、updateDouble() 、update Boolean()、updateBlob()、 updateClob()等:更新当前记录指定字段值。
④updateRow():用当前记录的新值更新数据库数据。
⑤deleteRow():删除当前记录。
数据库连接池
在Web应用程序开发中,对于频繁的数据库操作,前面 介绍的JDBC编程流程将出现频繁的建立连接、关闭连接等操作,势必导致系统开销加大,数据库访问效率降低。为了解决这些问题,在Web应用开发中引入了数据库连接池技术。
本质上,连接池是在一个集合对象中存储一定数量的数据库连接对象,当程序需要使用数据库连接时,申请从池中获取一个空闲的连接,程序使用完毕后再把连接放回池中重用。连接池通过重用连接的方法,减少了创建连接的系统开销,能够明显提高系统的数据库访问效率。
JDBC数据库编程方法
基于驱动程序的JDBC编程
Ⅰ加载JDBC驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
Ⅱ创建与数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost: 3306/test?serverTimezone =Asia/Shanghai","root","javaee");
Ⅲ创建语句对象
①Statement stmt=conn.createStatement();
②PreparedStatement pstmt=conn.prepareStatement(strSQL) ;
③CallableStatement cstmt=conn.prepareCall(strSQL);
Ⅳ执行SQL语句
ResultSet rs=stmt.excuteQuery(strSQL); int num=stmt.executeUpdate(strSQL);
ResultSet rs=pstmt.excuteQuery(); int num=pstmt.executeUpdate();
ResultSet rs=cstmt.excuteQuery(); int num=cstmt.executeUpdate();
Ⅴ[处理结果集]
String sName=rs.getString("username"); String sName=rs.getString(1);
Ⅵ关闭相关对象
[rs.close();]
stmt.close(); / pstmt.close(); / cstmt.close();
conn.close();
例如:
基于连接池的JDBC编程
以“基于驱动程序的JDBC编程”方法为基础。 在“创建与数据库连接”步骤,采用连接池改进了数据 库连接对象的管理和获取方式。 其余步骤,保持不变。
例如: