当前位置:Gxlcms > 数据库问题 > 由浅到深学习JDBC二

由浅到深学习JDBC二

时间:2021-07-01 10:21:17 帮助过:21人阅读

 class JDBC_Dao {

       /**

        * 向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();

                    

人气教程排行