zoukankan      html  css  js  c++  java
  • JDBC(1)—Connection

    • 一、简介:
    • 1.JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的
      *公共接口(一组API)
      *定义了用来访问数据库的标准java类库,使用这个类库可以以一种标准的方法,方便的访问数据库资源。
    • 2.JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
    • 3.JDBC的目标是使java程序员使用jdbc可以连接任何提供了JDBC驱动程序的数据库系统,这样使得java程序员无需对
      *特定的数据库
      *系统的特点有过多的了解,从而简化开发过程。
    • 4.可以调用DriverManager类的getConnection()方法建立到数据库的连接。
    • 5.JDBC URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个url选择正的驱动程序,从而建立到数据库连接。
    • 6.url由三部分组成各部分之间用 冒号分割
      *——jdbc:<子协议>:<子名称>
      *——协议:JDBC URL中的协议总是jdbc.
      *——子协议:子协议用于标识一个数据库驱动程序
      *——子名称:一种标识数据库的方法 ,子名称可以依不同的子协议而变化,使用子名称的目的就是问了定位数据库提供足够的信息
      *例如(每一种数据库的各个版本之间可能会有些变化):
      *连接mysql数据库:jdbc:mysql://localhost:3306/test
      *连接SQL Server数据库:jdbc:microsoft:sqlserver//localhost:1433;DatabaseName = test
      *连接Oracle数据库:jdbc:oracle:thin:@localhost:1521:test
    • 二、步骤
    • 连接Mysql的准备:
    • 1.添加jar文件(mysql-connector-java-5.1.26-bin.jar)
    • 2.加载到当前的类路径下(右键jar文件,Builder Path–add builder path)
    • 3.创建Driver实现类的对象
    • 4.Driver实现类对象调用connect(url , info)方法,返回数据库连接(connection)

    以下共有四个连接数据库的方法:

    • 1.testDriver():该方法使用驱动对象(driver)建立连接,可重用性差,耦合性高,但代码简单,易于理解。

    • 2.getConnection():该方法在上一个方法的基础上进行了修改,不过还是通过驱动对象建立连接(driver),
      *比如:把连接数据库的url、账号、密码写道配置文件中,程序再读取配置文件,通过反射加载驱动,并创建驱动对象,

    • 3.testDriverManager():该方法使用驱动管理类的getConnection()方法建立连接,在上一个方法的基础上进行了修改,
      *修改了加载驱动的方法,因为使用了驱动管理类,所以不需要创建驱动对象,减少了代码量。

    • 4.getDriverManager():该方法是对以上几个方法一个总结,相对来说少代码,高重用性,低耦合

    第一种方法:

    /**
         * 1.简单连接数据库
         * 在使用的过程中并不建议直接访问该接口,在此只是练习演示。
         * Driver是一个接口,数据库厂商必须提供实现的接口,能从中获取数据库连接,
         * 步骤:
         * 1.创建数据库驱动对象
         * 2.准备数据库连接的url、user、password
         * 3.数据库驱动对象调用connect(url , info)方法建立连接
         */
    @Test
        public void testDriver() throws Exception{
            //1.驱动
            Driver driver = new com.mysql.jdbc.Driver();
            //2.准备url,账号、密码
            String url = "jdbc:mysql://127.0.0.1:3306/test";//test数据库首先要在创建好之后才可以连接
            Properties info = new Properties();
            info.put("user", "root");
            info.put("password", "");
            //3.建立链接
            Connection connection = driver.connect(url , info);
            System.out.println(connection);
        }

    第二种方法:

    /**
         * 2.对以上方法进行修改优化,在不改变源程序的情况下,可以获得任何数据库连接
         * 解决方案:把数据库驱动Driver实现类是全类名、url、user、passworld放到一个配置文件中,
         *通过修改配置文件的方式实现的具体数据库的解耦。
         *步骤:
         *1.准备url、账号、密码、驱动的全类名的字段
         *2.通过反射加载配置文件
         *3.通过getProperty()获取配置文件中的信息
         *4.通过反射创建驱动程序对象(链接数据库需要用到该对象,所以要创建)
         *5.驱动对象调用connect(jdbcUrl, info)建立连接
         */
        public Connection getConnection() throws Exception{
            //1.准备字段
            String driverClass = null;
            String jdbcUrl = null;
            String user = null;
            String password = null;
            //2.通过反射,读取类路径下的jdbc.properties文件,获取配置信息。
            InputStream is = getClass().getClassLoader().
                    getResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            properties.load(is);
            //3.通过getProperty()方法,获取到每个字段的值,并赋给变量
            driverClass = properties.getProperty("driver");
            jdbcUrl = properties.getProperty("jdbcUrl");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
    
            //4.通过反射来进行创建驱动对象,这样就可以实现解耦。
            //4_1.创建驱动程序对象
            Driver driver = (Driver)Class.forName(driverClass).newInstance();
            //4_2.账号密码
            Properties info = new Properties();
            info.put("user", user);
            info.put("password", password);
            //5.调用connect方法建立连接
            Connection connection = driver.connect(jdbcUrl, info);
            return connection;
        }
    
        /**
         * 测试以上方法是否正确
         * @throws Exception 
        */
        @Test
        public void testGetConnection() throws Exception{
            System.out.println(getConnection());
        }

    第三种方法:

    /**
         * 3.对以上方法再次进行修改优化。
         * DriverManager是驱动的管理类,联系使用
         * 步骤:
         * 1.准备驱动的全类名、url、user、password字段
         * 2.通过反射读取配置文件信息
         * 3.通过反射加载数据库驱动程序(因为使用DriverManager,所以链接数据库不需要驱动程序对象,所以不需要创建)
         * 4.使用DriverManager类的getConnection(jdbcUrl, user, password)方法建立连接
         */
        @Test
        public void testDriverManager() throws Exception{
            //1.准备字段
            String driverClass = null;
            String jdbcUrl = null;
            String user = null;
            String password = null;
            //2.读取类路径下的jdbc.properties文件,获取配置信息
            InputStream is = getClass().getClassLoader().
                    getResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            properties.load(is);
            driverClass = properties.getProperty("driver");
            jdbcUrl = properties.getProperty("jdbcUrl");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
    
            //3.通过反射来进行创建驱动对象,这样就可以实现解耦。
            //3_1.加载数据库驱动程序(注册一个驱动程序)
            Class.forName(driverClass);
    
            //4.调用connect方法建立连接
            Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
            System.out.println(connection);
        }

    第四种方法:

    /**
         * 4.总结。
         * 步骤:
         * 1.准备链接数据库的4个字符串
         *      1_1.创建Properties对象
         *      1_2.获取jabc.properties对应的输入流
         *      1_3.加载1_2对应的输入流 
         *      1_4.获取具体数据(Driver、url、user、password)
         * 2.加载数据库驱动程序(对应的Driver实现类中有注册驱动的代码块)
         * 3.通过DriverManager的getConnection()方法获取数据库链接
         * 
         */
        public Connection getDriverManager() throws Exception{
            //1_1.创建Properties对象
            Properties properties = new Properties();
            //1_2.获取jdbc.properties输入流
            InputStream is = getClass().getClassLoader().
                    getResourceAsStream("jdbc.properties");
            //1_3.加载对应发输入流
            properties.load(is);
            //1_4.获取具体信息
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String jdbcUrl = properties.getProperty("jdbcUrl");
            String driver = properties.getProperty("driver");
            //2.加载数据库驱动程序
            Class.forName(driver);
            //3.通过DriverManager的getConnection()方法获取数据库链接,并返回
            return DriverManager.getConnection(jdbcUrl, user, password);
        }
        /**
         * 测试以上方法
         */
        @Test
        public void testGetConnection1(){
            try {
                System.out.println(getDriverManager());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    jdbc.properties配置文件

    #连接mysql驱动,其中?characterEncoding=utf-8是为防止乱码
    driver = com.mysql.jdbc.Driver
    jdbcUrl = jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
    user = root
    password = 
    
    #连接sqlserver2008驱动
    #driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
    #jdbcUrl = jdbc:sqlserver://127.0.0.1:1433;DatabaseName = SIMS
    #user = sa
    #password = admin
  • 相关阅读:
    《BI项目笔记》挑选产出分析Cube
    《BI项目笔记》报到信息分析Cube
    详解jQuery each() 方法
    可编辑的select下拉框
    可编辑的select下拉框
    UML关系(泛化,实现,依赖,关联(聚合,组合))
    UML关系(泛化,实现,依赖,关联(聚合,组合))
    深入浅出UML图(三)
    深入浅出UML图(三)
    深入浅出UML类图(二)
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454025.html
Copyright © 2011-2022 走看看