1、结果集的元数据操作
ResultSetMetaData 是描述ResultSet的元数据对象,可以通过元数据对象获取结果集的列信息,使用方式如下:
public void query() {Connection connection = DBUtil.getConnection();String sql = "SELECT ID,UNAME u,PASSWORD FROM USER";PreparedStatement prepareStatement = null;ResultSet resultSet = null;try {prepareStatement = connection.prepareStatement(sql);//获取到结果集CallableStatementresultSet = prepareStatement.executeQuery();// 通过 结果集的getMetaData() 获取到元数据对象ResultSetMetaData metaData = resultSet.getMetaData();System.out.println("获取数据列数"+metaData.getColumnCount());System.out.println("第二列的字段名是:"+metaData.getColumnName(2));System.out.println("第二列的字段别名是:"+metaData.getColumnLabel(2));} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(resultSet, prepareStatement, connection);}
}
2、使用jdbc进行批量处理
当一次处理多条记录时,可使用jdbc进行批量操作,其基本思路是现将要执行的sql进行积攒,然后一次性发送到数据库进行执行,示例代码如下:
//获取连接
Connection connection = DBUtil.getConnection();
String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)";
PreparedStatement prepareStatement = null;
try {//这里一定要注意,mysql是自动提交事务的,所以这里一定要先关闭自动提交connection.setAutoCommit(false);//通过数据库连接获取数据库操作对象prepareStatement = connection.prepareStatement(sql);// 组装sql、积攒sqlfor (int i = 0; i < 10000; i++) {prepareStatement.setObject(1, "zhangsan"+i);prepareStatement.setObject(2, i);prepareStatement.addBatch();}//一次性发送到数据库执行prepareStatement.executeBatch();//手动提交事务connection.commit();
} catch (SQLException e) {e.printStackTrace();
} finally {//关闭资源DBUtil.close(null, prepareStatement, connection);
}
3、使用jdbc调用存储过程、函数
当调用存储过程或者函数时,需要使用到 CallableStatement 类,使用的代码实例如下:
//存储过程
CREATE PROCEDURE add(IN a INT , OUT b INT )
BEGINSET b = a * 10;
END//jdbc调用存储过程 add()//获取连接
Connection connection = DBUtil.getConnection();
//写sql,使用 {CALL 存储过程|函数} 方式调用
String sql = "{CALL getUser(?,?)}";
//获取 CallableStatement 对象
CallableStatement callableStatement = null;
try {callableStatement = connection.prepareCall(sql);//设置传入的参数callableStatement.setInt(1, 256);//执行存储过程callableStatement.execute();//因为第二个参数是OUT类型,所以这里可以获取到int result = callableStatement.getInt(2);System.out.println(result);
} catch (SQLException e) {e.printStackTrace();
} finally {DBUtil.close(null, callableStatement, connection);
}
4、使用jdbc处理事务
使用jdbc操作事务时,首先要关闭mysql的自动提交,最后手动提交,实例代码如下:
//获取连接
Connection connection = DBUtil.getConnection();
String sql = "UPDATE USER SET UNAME = ? WHERE ID = 1";
String sql2 = "UPDATE USER SET UNAME = ? WHERE ID = 2";
try {//关闭自动提交,开启事务connection.setAutoCommit(false);PreparedStatement statement1 = connection.prepareStatement(sql);statement1.setString(1, "czp");statement1.execute();int a=10 / 0;//这里出现错误,则回滚PreparedStatement statement2 = connection.prepareStatement(sql2);statement2.setString(1, "java");statement2.execute();//主动提交事务connection.commit();
} catch (SQLException e) {//出现错误时,回滚try {connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();
} finally {DBUtil.close(null, null, connection);
}