JDBC(Java Database Connectivity)是一套用于执行SQL语句的Java API,应用程序可通过这套API连接到数据库,并使用SQL语句对数据库进行增删改查等操作。
组成部分:
- JDBC API:供应用程序调用的Java API。
- 驱动管理器:负责加载JDBC驱动器和数据库连接,DriverManager类。
- 驱动器API:Sun公司制定,Driver接口。
- JDBC驱动器:是数据库驱动程序,由数据库厂商创建。
一 JDBC API
1.Driver接口
所有JDBC驱动程序必须实现该接口,该接口专门提供给数据库厂商使用。
2.DriverManager类
用于加载JDBC驱动并且创建于数据路的连接。
方 法 | 功能描述 |
registerDriver(Driver driver) | 加载JDBC驱动程序 |
getConnection(String url,String user,String pwd) | 创建和数据库连接,返回Connection对象 |
3.Connection接口
代表和数据库的连接。
方 法 | 功能描述 |
getMetaData() | 返回表示数据库的元数据的DatabaseMetaData对象 |
createStatement() | 创建一个Statement对象来将SQL语句发送到数据库库 |
prepareStatement(String sql) | 创建PreparedStatement对象 |
prepareCall(String sql) | 创建CallableStatement对象 |
4.Statement接口
用于向数据库发送SQL语句。
方 法 | 功能描述 |
execute(String sql) | 执行各种sql语句,返回boolean类型值 |
executeUpdate(String sql) | 执行insert,update,delete语句,返回int类型 |
executeQuery(String sql) | 执行select语句,返回ResultSet对象 |
5.PreparedStatement接口
是Statement的子接口。Statement对象每次执行SQL语句时,都会对其进行编译,当多次执行相同的SQL语句时效率会降低,PreparedStatement可对SQL语句预编译,即对每个编译后的SQL语句缓存,当执行相同SQL语句时,无需再次对SQL语句再进行编译而是直接使用。
6.CallableStatement接口
是PreparedStatement的子接口,用于执行SQL存储过程。
7.ResultSet接口
表示select查询语句得到的结果集,结果是以逻辑表格的形式组织存在的,通过游标指向访问每行数据。
方 法 | 功能描述 |
getString(int columnIndex) | 获取指定索引字段的String值 |
getString(String columnName) | 获取指定字段名称的String值 |
getInt(int columnIndex) | 略 |
getInt(String columnName) | 略 |
getDate(int columnIndex) | 略 |
getDate(String columnName) | 略 |
next() | 将游标移动到当前位置下一行 |
absolute(int row) | 将游标移动到指定行 |
afterLast() | 将游标移动到最后一行 |
beforeFirst() | 将游标移动到第一行 |
previous() | 移动到当前行的上一行 |
last() | 移动到最后一行 |
二 JDBC访问数据库
以MySql数据库为例
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接
Connection conn = DriverManager.getConnection(String url, String user, String password);
3.获取Statement对象
Statement statement = conn.createStatement();
4.执行SQL语句
ResultSet set = statement.execute(String sql);
5.操作ResultSet集合
操作方法见上述
6.释放数据库资源
set.close(); statement.close();; conn.close();
三 大数据处理
大文本数据CLOB和二进制数据BLOB必须使用PreparedStatement处理,所用操作都以IO流的形式进行存取。
方 法 | 功能描述 |
setCharacterStream(int parameterIndex, java.io.Reader reader, int length) | 写入文本 |
setBinaryStream(int parameterIndex, java.io.InputStream x, long length) | 写入二进制数据 |
四 批处理
preparedStatement批处理
Connection conn = DriverManager.getConnection(String url, String user, String password); String sql = "INSERT INTO users(name, password, email, birthday) VALUES(?, ?, ?, ?)"; PreparedStatement preparedStatement = conn.prepareStatement(sql); for(int i=0; i<4; i++){ preparedStatement.setString(1,"name"+i); preparedStatement.setString(2,"password"+i); preparedStatement.setString(3,"email"+i); preparedStatement.setDate(4,Date.valueOf("1990-1-1")); } preparedStatement.executeBatch();