zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    lilntcode-508-摆动排序
    lintcode-501-迷你推特
    lintcode-496-玩具工厂
    lintcode-491-回文数
    lintcode-488-快乐数
    lintcode-480-二叉树的所有路径
    lintcode-248-统计比给定整数小的数的个数
    ubuntu 镜像站部署
    [转发]以我的亲身经历为例,告诉大家写简历和面试的技巧(面向高级开发和架构师)
    镜像站nginx
  • 原文地址:https://www.cnblogs.com/youngleesin/p/14260083.html
Copyright © 2011-2022 走看看