时间:2021-07-01 10:21:17 帮助过:21人阅读
/**
* 向account表增加一条记录
*/
public void add(Account account){
Connection conn = null;
PreparedStatement pstm = null;
try {
//1加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2创建连接
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/zdx?serverTimezone=UTC",
"root",
"root");
//3准备sql
String sql = "insert into account values(?,?,?,?)";
//4创建Statement,发送sql
pstm = conn.prepareStatement(sql);
pstm.setString(1,account.getCardId());
pstm.setString(2, account.getPassword());
pstm.setDouble(3, account.getBalance());
pstm.setString(4, account.getPhone());
int i = pstm.executeUpdate();
//5如果是查询的话,处理结果集
} catch (Exception e) {
e.printStackTrace();
}
finally{
//6释放资源
try {
pstm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 向account表查询一条记录
* @param account
* @return
*/
public Account query(Account account){
Connection conn = null;
PreparedStatement pstm =null;
ResultSet rs = null;
try {
//1加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2创建连接
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/zdx?serverTimezone=UTC",
"root",
"root");
//3准备sql
String sql = "select * from account where "
+ "card_id = ? and password = ?";
//4创建Statement发送语句
pstm = conn.prepareStatement(sql);
pstm.setString(1, account.getCardId());
pstm.setString(2, account.getPassword());
rs = pstm.executeQuery();
//5处理结果集
while (rs.next()) {
account.setCardId(rs.getString("card_id"));
account.setPassword(rs.getString("password"));
account.setBalance(rs.getDouble("balance"));
account.setPhone(rs.getString("phone"));
}
} catch (Exception e) {
e.getStackTrace();
}
finally{
//6释放资源
try {
rs.close();
pstm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return account;
}
}
以上代码依旧使用account表,需要再写一个实体对象用来承载数据,一个test类用来调用方法,
,这些最基础的,这里就不赘述了,不清楚的同学就要自行参阅java语言了。
如果我查询A卡,B卡,C卡,三张银行卡信息,按照JDBC2.0要写三个查询方法,现在,只需要把参数传递过去,
调用三次query()方法就好了!
总结:可见利用Dao数据访问层封装JDBC常用方法,可以大大简化方法步骤,不用重复写方法,只需重复调用。
这就是JDBC3.0版本
=============================华丽丽的分割线================
但是仔细的读者一定发现了,这里还存在不少缺陷,没错,我们还可以改进它。
在JDBC3.0版本里,可以发现,查询,添加方法,存在大量冗余代码,比如:
①同的加载驱动, ②相同的创建连接,③相同的释放资源。
在上个版本的代码里我只写了添加查询方法,如果还有删除,修改,查询所有等方法呢,
没错这些方法,也存在相同的创建连接,释放链接。找见了问题,就好解决了。
那么解决的办法还是----封装。
我们可以尝试把1注册驱动,2创建连接,6释放资源,这三个步骤做成工具类-----JDBCutil
这样,我们在Dao层里面的JDBC方法,在遇到1,2,6等步骤时,不用再去写代码,只需调用封装好的工具即可。
没错程序员都是很懒得!
以下是JDBC4.0是4.0版本,后面还有更完善的版本娓娓道来!
public class JDBC_Util {
/**
* @return 返回链接
*/
public static Connection getConnection() throws Exception {
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/zdx?serverTimezone=UTC",
"root",
"root");
return conn;
}
/**
* 释放资源
*/
public static void release(ResultSet rs,
Statement stm,
Connection conn){
try {
if(rs!=null){rs.close();}
if(stm!=null){stm.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class JDBC_Dao2 {
/**
* 向account表增加一条记录
*/
public void add(Account account){
Connection conn = null;
PreparedStatement pstm = null;
try {
conn = JDBC_Util.getConnection();