结果集元数据
ResultSetMetaData用于描述查询结果的相关信息, 其中包含列名称, 列数量, 类数据类型等.
原理:
使用案例:
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
String sql = "select * from "
+ "robin_user";
Statement st = conn.createStatement();
ResultSet rs=st.executeQuery(sql);
//结果集元数据
ResultSetMetaData meta=
rs.getMetaData();
int n = meta.getColumnCount();
for(int i=1; i<=n; i++){
// i = 1 ... n
String name= meta.getColumnName(i);
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.close(conn);
}
}
作业:
/**
* 打印一个SQL查询结果的全部列名
* @param sql
*/
public static void print(String sql){
//...
}
JDBC 事务控制
数据库提供了事务控制功能, 支持ACID特性.
JDBC提供了API, 方便的调用数据库的事务功能, 其方法有:
相关API:
- Connection.getAutoCommit():获得当前事务的提交方式,默认为true
- Connection.setAutoCommit():设置事务的提交属性,参数是
- true:自动提交;false:不自动提交
- Connection.commit():提交事务
- Connection.rollback():回滚事务
事务API调用模板:
Connection conn = null;
try {
conn = DBUtils.getConnection();
//取消自动提交, 后续手动提交
conn.setAutoCommit(false);
//SQL... update
//SQL... update
// 余额不足 抛出异常 throw e;
//SQL... update
conn.commit();
} catch (Exception e) {
e.printStackTrace();
DBUtils.rollback(conn);
} finally {
DBUtils.close(conn);
}
提示: 事务API经典的用法