• JDBC(获取数据库连接、自定义JDBC工具类)


    1、JDBC

    (1)概念:

    JDBC(Java DataBase Connectivity,java数据库连接),是java程序访问数据库的标准API,是由java语言编写的类和接口组成。但是访问不同的数据库要有不同的数据库驱动。java只是提供接口,具体实现由不同的数据库生产厂商来实现(数据库驱动)。

    (2)使用JDBC访问数据库:

    加载驱动:

    Class.forName("com.mysql.jdbc.Driver");
    • forName方法是Class类的静态方法,参数是要加载的驱动程序的名称。

    创建数据库连接:

            String url = "jdbc:mysql://localhost:3306/student mangement system";//url: 数据库地址  jdbc:mysql://连接主机IP:端口号//数据库名字
            String username="root";
            String password="root";
            Connection con = DriverManager.getConnection(url, username, password);
    • url是数据库地址,连接数据库还需要数据库的用户名和密码
    • DriverManager类的getConnection实现了实现数据库连接的方法

    创建Statement对象:

    Statement对象或他的子类,为数据库传输sql语句并返回执行结果。

    Statement stat = con.createStatement();

    执行sql语句:

    • 即通Statement对象调用方法执行sql语句。
    • public int executeUpdate(String sql);  执行insert 、update、 delete语句,或者是DDL语句,返回值是受影响的行数。
    • public ResultSet executeQuery(String sql);  执行select语句,将结果集封装在结果集对象ResultSet中。

    释放资源:

        stat.close();
        con.close();

     2、自定义JDBC工具类

    (1)不含配置文件:

    因为数据库的连接代码都是固定的,为了将减少重复的代码的书写,可以将这些代码封装为一个工具类,获取数据库的连接对象。

     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.ResultSet;
     4 import java.sql.SQLException;
     5 import java.sql.Statement;
     6 
     7 public final class JDBCUtils {// 不能被继承或重写
     8     private JDBCUtils() {
     9     }
    10 
    11     private static Connection con;
    12 
    13     static {
    14         try {
    15             Class.forName("com.mysql.jdbc.Driver");
    16             String url = "jdbc:mysql://localhost:3306/student mangement system";
    17             String username = "root";
    18             String password = "root";
    19             con = DriverManager.getConnection(url, username, password);
    20         } catch (Exception e) {
    21             e.printStackTrace();
    22             throw new RuntimeException(e + "数据库连接失败");
    23         }
    24     }
    25 
    26     public static Connection getConnection() {
    27         return con;
    28     }
    29 
    30     public static void close(Connection con, Statement stat) {
    31 
    32         if (stat != null) {
    33             try {
    34                 stat.close();
    35             } catch (SQLException e) {
    36                 e.printStackTrace();
    37                 System.out.println("stat流关闭异常!");
    38             }
    39         }
    40 
    41         if (con != null) {
    42             try {
    43                 con.close();
    44             } catch (SQLException e) {
    45                 e.printStackTrace();
    46                 System.out.println("con流关闭异常!");
    47             }
    48         }
    49 
    50     }
    51 
    52     public static void close(Connection con, Statement stat, ResultSet rs) {
    53         if (rs != null) {
    54             try {
    55                 rs.close();
    56             } catch (SQLException e) {
    57                 e.printStackTrace();
    58                 System.out.println("rs流关闭异常!");
    59             }
    60         }
    61 
    62         if (stat != null) {
    63             try {
    64                 stat.close();
    65             } catch (SQLException e) {
    66                 e.printStackTrace();
    67                 System.out.println("stat流关闭异常!");
    68             }
    69         }
    70 
    71         if (con != null) {
    72             try {
    73                 con.close();
    74             } catch (SQLException e) {
    75                 e.printStackTrace();
    76                 System.out.println("con流关闭异常!");
    77             }
    78         }
    79 
    80     }
    81 }

    测试工具类:

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    public class Test {
        public static void main(String[] args)throws Exception {
            Connection con = JDBCUtils.getConnection();
            PreparedStatement pst = con.prepareStatement("SELECT sname,studentno FROM student");
            ResultSet rs = pst.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString("sname")+"   "+rs.getString("studentno"));
            }
            JDBCUtils.close(con, pst, rs);
        }
    }

    (2)含有配置文件的工具类:

     1 import java.io.IOException;
     2 import java.io.InputStream;
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 import java.util.Properties;
     9 
    10 public class JDBCUtils {
    11     private static Connection con;
    12     private static String driver;
    13     private static String url;
    14     private static String username;
    15     private static String password;
    16 
    17     static {// 静态代码块只执行一次,获取一次信息即可
    18         try {
    19             readConfig();
    20             Class.forName(driver);
    21             con = DriverManager.getConnection(url, username, password);
    22         } catch (Exception ex) {
    23             throw new RuntimeException("数据库连接失败");
    24         }
    25     }
    26 /*
    27  * getClassLoader();返回该类的加载器
    28  * getResourceAsStream();查找具有给定名称的资源 
    29  */
    30     private static void readConfig() {
    31         InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("JDBC.properties");
    32         Properties pro = new Properties();
    33         try {
    34             pro.load(in);
    35         } catch (IOException e) {
    36             e.printStackTrace();
    37         }
    38         driver = pro.getProperty("driver");
    39         url = pro.getProperty("url");
    40         username = pro.getProperty("username");
    41         password = pro.getProperty("password");
    42     }
    43 
    44     public static Connection getConnection() {
    45         return con;
    46     }
    47     public static void close(Connection con, Statement stat) {
    48 
    49         if (stat != null) {
    50             try {
    51                 stat.close();
    52             } catch (SQLException e) {
    53                 e.printStackTrace();
    54                 System.out.println("stat流关闭异常!");
    55             }
    56         }
    57 
    58         if (con != null) {
    59             try {
    60                 con.close();
    61             } catch (SQLException e) {
    62                 e.printStackTrace();
    63                 System.out.println("con流关闭异常!");
    64             }
    65         }
    66 
    67     }
    68 
    69     public static void close(Connection con, Statement stat, ResultSet rs) {
    70         if (rs != null) {
    71             try {
    72                 rs.close();
    73             } catch (SQLException e) {
    74                 e.printStackTrace();
    75                 System.out.println("rs流关闭异常!");
    76             }
    77         }
    78 
    79         if (stat != null) {
    80             try {
    81                 stat.close();
    82             } catch (SQLException e) {
    83                 e.printStackTrace();
    84                 System.out.println("stat流关闭异常!");
    85             }
    86         }
    87 
    88         if (con != null) {
    89             try {
    90                 con.close();
    91             } catch (SQLException e) {
    92                 e.printStackTrace();
    93                 System.out.println("con流关闭异常!");
    94             }
    95         }
    96 
    97 }
    98 }
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Test {
        public static void main(String[] args) {
    
            ResultSet rs = null;
            PreparedStatement pst = null;
    
            Connection con = JDBCUtils.getConnection();
            try {
                pst = con.prepareStatement("SELECT sname,studentno FROM student");
                rs = pst.executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString("sname") + "   "
                            + rs.getString("studentno"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            JDBCUtils.close(con, pst, rs);
        }
    }

    配置文件:

    这样在以后更换数据库后,只需更改配置文件即可,不用再修改程序里面的内容。

    利用Properties类,读取配置文件中的信息,通过键获取值。

    类加载器getClassLoader()负责读取 Java 字节代码,因为在实际情况下,用户得到的项目没有sre文件夹,只能在bin目录下读取文件。

  • 相关阅读:
    String的本质是一个char*,只是以类的形式提供,使用起来比较方便
    感觉技术停滞时,该怎么办?(离开舒适区,刻意练习)
    网盘和云存储的区别(面向用户,产品形态,文件组织形式,功能侧重,一共4点区别)
    压力负载测试工具
    模型配置方式实现爬虫
    jquery Deferred
    Server是如何完成针对请求的监听、接收与响应1
    asp.net core 使用 Redis 和 Protobuf
    带进度条的文件上传
    ASP.NET Core Authorization
  • 原文地址:https://www.cnblogs.com/zhai1997/p/11375165.html
Copyright © 2020-2023  润新知