JavaWeb技术(三):JDBC中核心接口

时间:2022-08-09 18:21:53

一.  DriverManager 接口

  DriverManager 数据库连接驱动接口,用于获取数据库连接对象Connection

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;

 public class DriverManagerDemo {

     public static void main(String[] args) {
         // 数据库连接引用变量
         Connection conn = null;

         // 加载数据库驱动程序
         try {
             Class.forName("com.mysql.jdbc.Driver");
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }

         try {
             // 获取数据库连接对象
             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "1234");
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
 }

  DBUtil工具类

  DBUtil用于封装数据库连接和关闭,简化JDBC开发,提高代码复用性。

 import java.io.FileReader;
 import java.io.Reader;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.Properties;

 /** 动态获取数据库连接参数 */
 public class DBUtil {
     private static String driver;
     private static String url;
     private static String username;
     private static String password;

     // 静态代码块,初始化成员变量
     static {
         Properties prop = new Properties();
         Reader in;
         try {
             in = new FileReader("src\\dbconfig.properties");
             // 从输入流中加载配置文件
             prop.load(in);

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

         driver = prop.getProperty("driver");
         url = prop.getProperty("url");
         username = prop.getProperty("username");
         password = prop.getProperty("password");
     }

     // 获得一个数据库连接
     public static Connection open() {
         try {
             Class.forName(driver);
             return DriverManager.getConnection(url, username, password);
         } catch (Exception e) {
             e.printStackTrace();
         }

         // 抛出异常,方法返回null
         return null;
     }

     // 关闭数据库连接
     public static void close(Connection conn) {
         if (conn != null) {
             try {
                 conn.close();
             } catch (SQLException e) {
                 e.printStackTrace();
             }
         }
     }
 }

二. Connection接口

  数据库连接接口,用于生成Statement和PreparedStatement对象,以及执行Transaction

三. Statement接口和PreparedStatement接口

  Statement用于执行静态sql语句以及处理返回结果

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

 public class StatementDemo {

     public static void main(String[] args) {
         String sql = "update from CustomerTb1 set name=? where id=?";
         Connection conn = DBUtil.open(); // 获取数据库连接

         // 生成Statement对象用于执行sql语句
         try {
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql); // 执行查询,返回结果集

             while (rs.next()) {
                 int id = rs.getInt(1);
                 String name = rs.getString(2);
                 String email = rs.getString("email");

                 System.out.println(id + ", " + name + ", " + email);
             }
         } catch (SQLException e) {
             e.printStackTrace();
         } finally {
             DBUtil.close(conn);
         }
     }
 }

  PreparedStatement是预定义sql语句,用于动态生成sql与执行sql语句

 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;

 public class StatementDemo {

     public static void main(String[] args) {
         String sql = "update CustomerTb1 set name=? where id=?";
         Connection conn = DBUtil.open(); // 获取数据库连接

         /** 预定义sql语句,?为占位符,在运行中动态生成sql语句 */
         try {
             PreparedStatement pstmt = conn.prepareStatement(sql);
             // 对占位符替换赋值
             pstmt.setString(1, "gepeng");
             pstmt.setInt(2, 3);

             pstmt.executeUpdate(); // 执行更新

         } catch (SQLException e) {
             e.printStackTrace();
         } finally {
             DBUtil.close(conn);
         }
     }
 }