Loading

java.JDBC

JDBC

获取数据库连接

Driver接口实现类

Driver接口介绍

  • java.sql.Driver接口是所有的DBUtils驱动程序需要实现的接口。提供给不同的数据库厂商使用
  • 程序中不需要直接去访问实现了的Driver接口的类,而是有驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实习
- Oracle的驱动:oracle.jdbc.driver.OracleDriver 
- mySql 的驱动:com.mysql.jdbc.Driver

加载与注册DBUtils驱动

  • 加载驱动:Class.forName("com.mysql.jdbc.Driver");

  • 注册驱动:DriverManager.registerDriver(com.mtsql.jdbc.Driver)

    • 通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因

      为 Driver 接口的驱动程序类包含了静态代码块,在这个静态代码块中,会调用

      DriverManager.registerDriver() 方法来注册自身的一个实例。

URL

  • URL的标准由三部分组成
    • jdbc:子协议:子名称
    • 协议:DBUtils URL中的协议总是jdbc
    • 子协议:用于标识一个数据库驱动
    • 子名称:用于定位数据库,包含主机名(对应服务器的ip地址)、端口号、数据库名
  • 常用的DBUtils URL
    • Mysql的连接URL编写方式:
      • jdbc:mysql://主机名称:mysql服务端口号/数据库名称
      • jdbc:mysql://localhost:3306/test
      • jdbc:mysql://localhost:3306/xinzhi?useUnicode=true&characterEncoding=utf8(如果程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
      • 8.0后需要加上&useSSL=false&serverTimezone=UTC",MySQL在高版本需要指明是否进行SSL连(认证和加密),serverTimezone=Asia/Shanghai 使用UTC(世界统一时间)和中国的时间差八个小时
    • Oracle的连接URL编写方式:
      • jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称
      • jdbc:oracle:thin:@localhost:1521:test
    • SQLServer的连接URL编写方式
      • jdbc:oracle:thin:@主机名称:sqlserver服务端口号:DatabaseName=数据库名称
      • jdba:sqlserver://localhost:1433:DatabaseName=test

用户名和密码

  • user,password可以用“属性名=属性值”方式告诉数据库
  • 可以调用DriverManager类的getConnection()方法建立到数据库的连接

数据库连接方式举例

连接数据库

@Test
public void test() throws Exception {
    //1.数据库连接的4个基本要素
    String url = "jdbc:mysql://localhost:3308/test";
    String user = "root";
    String password = "asd";
    String driverName = "com.mysql.jdbc.Driver";

    //实例化Driver,加载驱动(可忽略)
    Class<?> clazz = Class.forName(driverName);
    Driver driver = (Driver) clazz.newInstance();

    //3.注册驱动(可忽略)
    DriverManager.registerDriver(driver);

    //4.获取连接
    Connection conn = DriverManager.getConnection(url, user, password);
    System.out.println(conn);
}

简写连接数据库

@Test
public void test2() throws Exception  {
    //1.数据库连接的4个基本要素
    String url = "jdbc:mysql://localhost:3308/test";
    String user = "root";
    String password = "asd";
    String driverName = "com.mysql.jdbc.Driver";

    //实例化Driver,加载驱动(可忽略)
    //        Class<?> clazz = Class.forName(driverName);
    //        Driver driver = (Driver) clazz.newInstance();

    //3.注册驱动(可忽略)
    //        DriverManager.registerDriver(driver);

    //4.获取连接
    Connection conn = DriverManager.getConnection(url, user, password);
    System.out.println(conn);
}

将基本要素放入properties

mysql.username=root
mysql.password=asd
mysql.url=jdbc:mysql://localhost:3308/test?rewriteBatchedStatements=true
mysql.dirvername=com.mysql.jdbc.Driver
@Test
public void test4() throws Exception {
    InputStream is = com.ccl.jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    Properties properties = new Properties();
    properties.load(is);

    //        Properties properties = new Properties();
    //        properties.load(com.ccl.jdbcTest.class.getClassLoader().getResourceAsStream("jdbc-study/jdbc.properties"));
    String url = properties.getProperty("mysql.url");
    String user = properties.getProperty("mysql.username");
    String password = properties.getProperty("mysql.password");

    //4.获取连接
    Connection conn = DriverManager.getConnection(url, user, password);
    System.out.println(conn);

}

将连接数据库的代码封装为一个工具类

public class jdbcUtil {
    public static void closeResourse(Connection conn, Statement ps){
        try {
            if (conn != null){
                conn.close();
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        
        try {
            if (ps != null){
                ps.close();
                System.out.println("Close");
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        Connection conn = null;
        try {
            InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            properties.load(is);

            String url = properties.getProperty("mysql.url");
            String user = properties.getProperty("mysql.username");
            String password = properties.getProperty("mysql.password");

            //4.获取连接
            conn = DriverManager.getConnection(url, user, password);
        } catch (IOException | SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

通过statement操作数据库

@Test
public void testStatement1() {
    Connection connection = null;
    Statement statement = null;
    try {
        connection = jdbcUtil.getConnection();
        statement = connection.createStatement();
        String sql = "insert into user_table values('CCL',123456,1234)";
        statement.execute(sql);
        
        //返回值:执行成功或者失败
        //boolean execute = statement.execute(sql);
        
        //返回受影响的行数
        //String sql = "insert into user_table values('CCL',123456,1234),('Leesin',123456,1234)";
        //int i = statement.executeUpdate(sql);
	    //System.out.println(i);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    jdbcUtil.closeResourse(connection,statement);
}
posted @ 2021-01-10 23:04  yonugleesin  阅读(70)  评论(0编辑  收藏  举报