JDBC的工具类

JDBC的工具类

 为了避免上图中大量代码每次重复去写,且只有sql和结果在变,其他都不变。所以要提取工具类。

1. 建包(Package)和文件(File)

首先,要建如下几个包和文件:

 step1:在src包下,建一个lesson2包

    

step2:在lesson2包下,弄一个package,名为utils包,utils包专注于写SQL

    

step3:把配置信息专门写在一个文件里,在src包下,弄一个文件(File),名为db.properities

  

  

2. 在文件(File) db.properties 中写配置信息

文件在src里面导入,如截图所示:

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username = root
password = 123456

效果图如下:

3. utils包中的工具类,读取db.properities中写配置信息

step1:在utils包下建工具类:JdbcUtils

效果如图如下:

    

step2:在utils包的JdbcUtils工具类中写代码:

package com.wang.lesson2.utils;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
   private static String driver = null;
   private static String url = null;
   private static String username = null;
   private static String password = null;

   static {
       try {
           InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
           Properties properties = new Properties();
           properties.load(in);

           driver = properties.getProperty("driver");
           url = properties.getProperty("url");
           username = properties.getProperty("username");
           password = properties.getProperty("password");

           //驱动只用加载一次
           Class.forName(driver);

      } catch (Exception e) {
           e.printStackTrace();
      }
  }

   //获取连接
   public static Connection getConnection() throws SQLException {
       return DriverManager.getConnection(url, username, password);
  }
   //释放连接资源
   public static void release(Connection conn, Statement st, ResultSet rs){
       if(rs!=null){
           try {
               rs.close();
          }catch (SQLException e){
               e.printStackTrace();
          }
      }

       if(st!=null){
           try {
               st.close();
          }catch (SQLException e){
               e.printStackTrace();
          }
      }

       if(conn!=null){
           try {
               conn.close();
          }catch (SQLException e){
               e.printStackTrace();
          }
      }

  }

}

效果如图:

 

 

4. 用上述工具类,测试增删改查(同时,用statement对象的两个方法,一个是: st.executeUpdate(sql);  另一个是: st.executeQuery(sql); )

4.1-4.3,也就是增、删、改,都是用 st.executeUpdate(sql);  返回值是改变的行数。

4.4 也就是查,用的是 st.executeQuery(sql); 返回值是查询结果集合。

4.1 增加信息(insert)

step1:在lesson2建立Java Class,名为:TestInsert。

      

 

step2:在TestInsert中,写如代码:

package com.wang.lesson2;

import com.wang.lesson2.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;

try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
String sql = "INSERT INTO `users` (id,`NAME`,`PASSWORD`,`email`,`birthday`)\n" +
"VALUES(4,'BeiHang','123456','bh@sina.com','2020-02-29')";
//上面SQL对象有了后,增删改全用executeUpdate()语句实现。
int i = st.executeUpdate(sql); //返回结果是受影响的行数
if (i>0)
{
System.out.println("插入新数据成功!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
JdbcUtils.release(conn,st,rs);
}
}
}
效果图如下:

 

4.2 删除信息(delete)

4.1中的全部都不用改变,只改变下图中圈起来的sql语句即可:

在TestInsert中,写如下代码:

package com.wang.lesson2;

import com.wang.lesson2.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
   public static void main(String[] args) throws SQLException {
       Connection conn = null;
       Statement st = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();
           st = conn.createStatement();
           //下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
           String sql = "DELETE FROM users WHERE `id` = '4'";
           //上面SQL对象有了后,增删改全用executeUpdate()语句实现。
           int i = st.executeUpdate(sql);   //返回结果是受影响的行数
           if (i>0)
          {
               System.out.println("删除新数据成功!");
          }
      }catch (SQLException e){
           e.printStackTrace();
      }finally {
           //释放资源
           JdbcUtils.release(conn,st,rs);
      }
  }
}

效果图如下:

    

 

4.3 改信息(update)

4.1中的全部都不用改变,只改变下图中圈起来的sql语句即可:

在TestInsert中,写如下代码:

package com.wang.lesson2;

import com.wang.lesson2.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
   public static void main(String[] args) throws SQLException {
       Connection conn = null;
       Statement st = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();
           st = conn.createStatement();
           //下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
           String sql = "UPDATE users SET `NAME`='BeiHang', `email`='BeiHang@sina.com' WHERE `id`='1'";
           //上面SQL对象有了后,增删改全用executeUpdate()语句实现。
           int i = st.executeUpdate(sql);   //返回结果是受影响的行数
           if (i>0)
          {
               System.out.println("修改数据成功!");
          }
      }catch (SQLException e){
           e.printStackTrace();
      }finally {
           //释放资源
           JdbcUtils.release(conn,st,rs);
      }
  }
}

效果图如下:

 

4.4 查信息

4.1中的全部都不用改变,只改变下图中圈起来的sql语句statement的方法,即可:

在TestInsert中,写如下代码:

package com.wang.lesson2;

import com.wang.lesson2.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
   public static void main(String[] args) throws SQLException {
       Connection conn = null;
       Statement st = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();
           st = conn.createStatement();
           //下面双引号中,是在SQLyog中写的增加信息的SQL语句后,直接复制过来的。
           String sql = "SELECT * FROM users WHERE `id`=1";
           //上面SQL对象有了后,查询用executeQuery()语句实现。
           rs = st.executeQuery(sql);   //返回结果是查询得到的结果集合
           while (rs.next()){
               System.out.println(rs.getString("NAME"));
          }
      }catch (SQLException e){
           e.printStackTrace();
      }finally {
           //释放资源
           JdbcUtils.release(conn,st,rs);
      }
  }
}

效果图如下:




posted @ 2020-02-29 01:49  WZ_BeiHang  阅读(447)  评论(0编辑  收藏  举报