一、基本使用方
1.创建连接
// 创建一个数据库连接
Connection conn = null;
// 创建预编译语句对象
PreparedStatement pstm = null;
// 创建一个结果集对象
ResultSet rs = null;
//SQL语句
String sql = "";
cityConn = DBUtil.getConn(userName,passWord,url,driverClass)
String orclDriverClass = "oracle.jdbc.OracleDriver";
String dmDriverClass = "dm.jdbc.DmDriver";
2.处理sql
// 创建预编译语句对象
pstm = cityConn.prepareStatement(Sql);
rs = pstm.executeQuery();
while (rs.next()) {
xkCount = rs.getInt("COUNT");
}
3.使用完后记得关闭连接
conn.close;
pstm.close;
rs.close;
4.基本方法:
1. close(), 关闭该数据库连接
2. commit(), 提交所有更改内容并释放该Connection对象锁定的资源
3. createStatement(), 基于本Connection对象,创建Statement对象
4. getAutoCommit(), 获取当前是否是自动提交模式
5. getMetaData(), 获取本连接相关的数据库元数据
6. isClosed(), 返回当前连接对象是否已经被关闭
7. preparedStatement(), 基于本连接对象,创建PreparedStatement对象
8. rollback(), 取消本轮事务中前面已经提交的更改
9. setAutoCommmit(), 设置是否自动提交
Connection 对象的主要作用是打开与数据源的连接。
二、处理数据相关
1.Result结果集封装成list
List list = new ArrayList();
pstm = cityConn.prepareStatement(sql);
rs = pstm.executeQuery();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取行的数量
while (rs.next()) {
Map rowData = new HashMap();//声明Map
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值
errorData_wsh = rs.getString("XK_WSH");
}
list.add(rowData.get("XK_WSH"));
}
2.管理事务
(1)开启事务setAutoCommit
调用该方法设置参数为false,即开启事务。
在执行sql之前开启事务。
(2)提交事务:commit()
当所有sql都执行完提交事务。
(3)回滚事务:rollback()
在catch中回滚事务。
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
try {
//1.获取连接
conn = JDBCUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//2.定义sql
//2.1 张三 - 500
String sql1 = "update account set balance = balance - ? where id = ?";
//2.2 李四 + 500
String sql2 = "update account set balance = balance + ? where id = ?";
//3.获取执行sql对象
pstmt1 = conn.prepareStatement(sql1);
pstmt2 = conn.prepareStatement(sql2);
//4. 设置参数
pstmt1.setDouble(1,500);
pstmt1.setInt(2,1);
pstmt2.setDouble(1,500);
pstmt2.setInt(2,2);
//5.执行sql
pstmt1.executeUpdate();
// 手动制造异常
int i = 3/0;
pstmt2.executeUpdate();
//提交事务
conn.commit();
} catch (Exception e) {
//事务回滚
try {
if(conn != null) {
conn.rollback();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally {
//关闭资源
JDBCUtils.close(pstmt1,conn);
JDBCUtils.close(pstmt2,null);
}