JDBC核心类
一、Driver接口
1、说明
装载驱动程序的管理器,创建和管理应用程序与驱动程序之间的结构
2、常用API
装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");
二、Connection接口
1、说明
Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。
2、常用API
createStatement()
创建向数据库发送sql的statement对象。
prepareStatement(sql)
创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql)
创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit)
设置事务是否自动提交。
commit()
在链接上提交事务。
rollback()
在此链接上回滚事务。
三、Statement接口
1、说明
用于执行静态SQL语句并返回它所生成结果的对象
2、Statement类:
Statement
由createStatement创建,用于发送简单的静态SQL语句(不带参数)。
PreparedStatement
继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的动态SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,一般都使用PreparedStatement
笔记
// ? 表示占位符 ,相当于 《 '值' 》,这样就能解决sql注入问题 String sql = "select * from tb_user where username = ? and password = ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1,username); ps.setString(2,password); ResultSet rs = ps.executeQuery();
CallableStatement
继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。
3、常用API
方法 | 说明 |
---|---|
execute(String sql) | 运行语句,返回是否有结果集 |
executeQuery(String sql) | 运行select语句,返回ResultSet结果集。 |
executeUpdate(String sql) | 运行insert/update/delete操作,返回更新的行数。 |
addBatch() | 将同种操作的sql语句添加到一起(批量处理) |
addBatch(String sql) | 把多条sql语句放到一个批处理中。 |
executeBatch() | 执行批量处理的多条sql语句 |
笔记示例1
List<User> users = new ArrayList<>(); ... /* * 实现批量插入的时候 尤其oracle批量处理效率很高 * mysql 效率不明显 */ String sql = "INSERT INTO TB_USER (USER_ID, USERNAME,PASSWORD) VALUES (SEQ_TBUSER_USERID.NEXTVAL,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //创建PreparedStatement对象要传入sql参数,说明批量处理时添加的只能是同种操作的sql语句 for (User user : users) { ps.setString(1, user.getUserName()); ps.setString(2, user.getPassword()); ps.addBatch();//添加到批量处理 } int[] ints = ps.executeBatch();//执行批量处理的多条sql语句
示例2
String sql = "INSERT INTO TB_USER (USER_ID, USERNAME,PASSWORD) VALUES (SEQ_TBUSER_USERID.NEXTVAL,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "泷泽萝拉"); ps.setString(2, "123"); ps.addBatch(); ps.setString(1, "小泽玛利亚"); ps.setString(2, "123"); ps.addBatch(); int[] ints = ps.executeBatch();
示例3
//oracle数据库不支持的特性 //动态sql操作跟静态sql批量操作 String sql = "insert into TB_USER (USER_ID, USERNAME, PASSWORD) values (?,?,?) "; PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1,1); ps.setString(2,"lrk"); ps.setString(3,"123"); ps.addBatch();//添加动态sql语句(有参数即占位符?) String sql2 = "insert into TB_USER (USER_ID, USERNAME, PASSWORD) values (2, \"xiaoming\",\"123456\") "; ps.addBatch(sql2);//添加静态sql语句,(没有占位符?参数) int[] ints = ps.executeBatch(); System.out.println(ints.length);
说明:oracle数据库不支持,MySql是否支持待验证,暂且没试不知道@TODO
...
四、ResultSet结果集类
1、说明
SELECT 语句执行完成后返回的数据结果集(包括行跟列)
2、ResultSet提供检索不同类型字段的方法
getString(int index)、getString(String columnName)
获得在数据库里是varchar(varchar2)、 char等类型的数据对象
getFloat(int index)、getFloat(String columnName)
获得在数据库里是Float类型的数据对象
getDate(int index)、getDate(String columnName)
获得在数据库里是Date类型的数据
getBoolean(int index)、getBoolean(String columnName)
获得在数据库里是Boolean类型的数据。
getObject(int index)、getObject(String columnName)
获取在数据库里任意类型的数据
3、ResultSet还提供了对结果集进行滚动的方法
方法 | 说明 |
---|---|
next() | 移动到下一行 |
Previous() | 移动到前一行 |
absolute(int row) | 移动到指定行 |
beforeFirst() | 移动resultSet的第一行前面 |
afterLast() | 移动到resultSet的最后一行后面 |
first() | 移动到第一行 |
last() | 移动到最后 |
isAfterLast() | 判断是否是resultSet的最后一行后面 |
isXxxx() |
笔记
使用示例
//遍历结果集for() PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); //注意,要设置ResultSet的参数,否则默认只能.next(),不能往前滚动 ResultSet rs = ps.executeQuery(); for(rs.first();!rs.isAfterLast();rs.next()){ String username = rs.getString("username"); }
五、DatabaseMetaData接口
1、说明
关于数据库结构,数据库系统和驱动程序等的元数据信息
2 、常用API
ResultSet getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types);
获取表信息
ResultSet getPrimaryKeys(String catalog,String schema,String table);
获取表主键信息
ResultSet getIndexInfo(String catalog,String schema,String table,boolean unique,boolean approximate);
获取表索引信息
ResultSet getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern);
获取表列信息
....