JDBC中常见的对象,实现与业务逻辑层的交互
* 1、Connection对象:Connection conn = DriverMananger.getConnection(url,username,password);
该对象还可以通过setAutoCommit()、rollback()、commit()进行事务管理,进行事务管理的过程,实际上就是PreparedStatement对象预编译,将事务分配到缓冲区进行。conn.close()关闭连接
* 2、PreparedStatement对象:PreparedStatement pre = connection.prepareStatement(sql);
对接受的sql语句进行预编译处理,提高与数据库交互的效率。执行sql时,是对sql中的参数(也就是带?号的字段)进行初始化,主要通过PreparedStatement对象的setXXX()方法实现,该方法的第一个参数是指要对sql中第几个参数初始化,第二个参数就是初始化值。执行完后,executeQuery()执行查询,返回的是ResultSet对象,executeUpdate()执行插入或更新。
* 3、ResultSet对象:ResultSet rs = pre.executeQuery();
结果集对象看成是个表,通过getXXX()方法来实现赋值操作。
下面是从一个项目中截取的实现过程:
//将提交的订单保存到数据库
public Forder saveForder(Forder forder) {
int fid = 0;
Connection connection = null;
PreparedStatement pre = null;
String sql = "INSERT INTO forder(ftotal,fname,fphone,fremark,femail,fpost,uid) VALUES(?,?,?,?,?,?,?)";
DBConn conns = new DBConn();
connection = conns.getConnection();
try {
//手动事务处理
connection.setAutoCommit(false);
pre = connection.prepareStatement(sql);
//pre.setDate(1, (Date) forder.getFdate());
pre.setDouble(1, forder.getFtotal());
pre.setString(2, forder.getFname());
pre.setString(3, forder.getFphone());
pre.setString(4, forder.getFremark());
pre.setString(5, forder.getFemail());
pre.setString(6, forder.getFpost());
pre.setInt(7, forder.getUsers().getUid());
pre.executeUpdate();
//查询插入订单的主键
pre = connection.prepareStatement("SELECT @@IDENTITY id FROM forder");
ResultSet rs = pre.executeQuery();
if (rs.next()) {
fid = rs.getInt("id");
}
//由于要在同一个事务中,所以要用同一个connection
for(Sorder sorder : forder.getSorders()){
sorderImpl.saveSorder(sorder, fid, connection);
}
connection.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
connection.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return forder;
}