zoukankan      html  css  js  c++  java
  • JDBC学习笔记(1)——JDBC概述

    JDBC

    JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。

    JDBC库中所包含的API任务通常与数据库使用:

    • 连接到数据库

    • 创建SQL或MySQL语句

    • 在数据库中执行SQL或MySQL查询

    • 查看和修改记录

    JDBC架构

               

    JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成:

    1. JDBC API: 这提供了应用程序到JDBC管理器连接。

    2. JDBC Driver API: 这支持JDBC管理器 - 驱动器连接。

    JDBC API使用一个驱动程序管理器和数据库特定的驱动程序提供透明的异构数据库的连接。

    确保使用正确的驱动程序来访问每个数据源的JDBC驱动程序管理器。驱动程序管理器能够支持多个并发连接到多个异构数据库的驱动程序。

    上面的这些内容网上都可以找到,我只记录一下连接数据库的具体步骤;

    通过Driver接口获取数据库连接

    第一步:创建一个Driver实现类的对象

    其中:

    /**
         * Driver是一个接口,数据库厂商必须提供实现的接口
         * 能从其中获取数据库连接,可以通过Driver的实现类的对象获取连接
         * 1.加入mysql驱动
         * 1).解压mysql-connector-java-5.1.18.zip
         * 2).在当前目录下新建lib目录
         * 3).把mysql-connector-java-5.1.18-bin.jar复制到lib目录
         * 4).右键->build-path->add build path加载到类路径下
         * @throws SQLException 
         * 
         */

    执行上面的步骤,加入mysql的驱动

    1 Driver driver=new com.mysql.jdbc.Driver();

    其中:

    com.mysql.jdbc.Driver()

    这是驱动的类型。
    jdbc中需要配置不同的驱动类型来连接不同类型的数据库,这种是连接mysql用的数据库驱动类型。
    用法举例:class.forName("com.mysql.jdbc.Driver")
    注意,Driver的D要大写。


     第二步:准备连接数据库的基本信息,url,user,password

    JDBC URL的标准由三部分组成

    jdbc:<子协议>:<子名称>
    1).协议:JDBC URL中的协议总是JDBC
    2).子协议:子协议用于标识一个数据库驱动程序
    3).子名称:一种标识数据库的方法。子名称可以依据不同的
        子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
    例如:jdbc:mysql://127.0.0.1:3306/test【这是我的主机上的,你的不一定】
    【记忆】如何查看自己安装的mysql数据库绑定的端口号:进入mysql->mysql后面输入show global variables like 'port';别写错了,切记别忘记写英文状态下的分号;

    1     String url="jdbc:mysql://localhost:3306/test";
    2         Properties info=new Properties();
    3         info.put("user", "root");
    4         info.put("password", "123456");

    第三步:调用Driver接口实现类对象的connect(url,info)方法获取数据库的连接

    1 Connection connection=driver.connect(url, info);
    2         System.out.println(connection);

    【注意】:Connection是一个接口,java.sql包下的接口,eclipse的自动补全功能总是出错,不注意的话会导成别的包里的Connection

    此时在开启你的mysql服务的情况下运行程序,运行结果:

    com.mysql.jdbc.JDBC4Connection@1f8bb67

    上面的步骤的完整代码(main函数中)

    public static void main(String[] args) throws SQLException {
            //1.创建一个Driver实现类的对象
            Driver driver=new com.mysql.jdbc.Driver();
            /*
             * JDBC URL的标准由三部分组成
             * jdbc:<子协议>:<子名称>
             * 1).协议:JDBC URL中的协议总是JDBC
             * 2).子协议:子协议用于标识一个数据库驱动程序
             * 3).紫明成:一种标识数据库的方法。子名称可以一句不同的
             * 子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
             * 例如:jdbc:mysql://127.0.0.1:3306/test【这是我的主机上的,你的不一定】
             * 查看端口号:在mysql后面输入show global variables like 'port';别写错了,切记别忘记写英文状态下的分号
             */
            //2.准备连接数据库的基本信息,url,user,password
            String url="jdbc:mysql://localhost:3306/test";
            Properties info=new Properties();
            info.put("user", "root");
            info.put("password", "123456");
            //3.调用Driver接口实现类对象的connect(url,info)方法获取数据库的连接
            //此处Connection是一个接口,java.sql包下的接口
            Connection connection=driver.connect(url, info);
            System.out.println(connection);
        }

    做上面的步骤的时候有一个小插曲,连接上数据库进行登录(具体登录步骤):

    /*
             * MySQL附带了一个空密码有的root用户。成功后安装了数据库和客户端,需要进行如下设置root密码:
        
        D:softwaremysql-5.6.25-winx64in> mysqladmin -u root password "123456";
        注:
        
        1. 关闭正在运行的MySQL服务。 
        2. 打开DOS窗口,转到 D:softwaremysql-5.6.25-winx64in 目录。 
        3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 
        4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlin目录。 
        5. 输入mysql回车,如果成功,将出现MySQL提示符 >。 
        6. 连接权限数据库: use mysql; 。 
        6. 改密码:update user set password=password("123456") where user="root";(别忘了最后加分号) 。 
        7. 刷新权限(必须步骤):flush privileges; 
        8. 退出 quit。 
        9. 注销系统,再进入,使用用户名root和刚才设置的新密码 123456 登录。
        现在使MySQL服务器的连接,那么使用下面的命令:
         */

    上面的步骤可以完成我们连接mysql的需求,但是我们想连接Orcle或者Sqlserver等其他数据库了呢,我们需要更改我们的程序,改变驱动器的类型,这样不是很好。

    我们可以这样:

    编写一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接
         * 解决方案:把数据库驱动Driver实现类的全类名、url、user、password
         * 放入一个配置文件中,通过修改配置文件的方法实现和具体的数据库解耦

    首先,我们新建一个配置文件名字叫做jdbc.Properties,里面添加我们连接数据库需要的信息

    driver=com.mysql.jdbc.Driver
    jdbcUrl=jdbc:mysql://localhost:3306/test
    user=root
    password=123456

    具体的代码实现:

    测试方法一:

    public Connection getConnection() throws Exception{
            String driverClass=null;
            String jdbcUrl=null;
            String user=null;
            String password=null;
            //读取类路径下的jdbc.properties文件
            InputStream in=getClass().getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            Properties properties=new Properties();
            properties.load(in);
            driverClass=properties.getProperty("driver");
            jdbcUrl=properties.getProperty("jdbcUrl");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
            //通过反射创建Driver对象
            Driver driver=(Driver) Class.forName(driverClass).newInstance();
            Properties info=new Properties();
            info.put("user", user);
            info.put("password", password);
            Connection connection=driver.connect(jdbcUrl, info);
            return connection;
        }

    测试方法二:

    public Connection testGetConnection2() throws Exception{
            //1.准备连接数据库的四个字符串
            //1).创建Properties对象
            Properties properties=new Properties();
            //2).获取jdbc.properties对应的输入流
            InputStream in=this.getClass().
                    getClassLoader().getResourceAsStream("jdbc.properties");
            //3).加载2)对应的输入流
            properties.load(in);
            //4).具体决定user,password等四个字符串
            String user=properties.getProperty("user");
            String jdbcUrl=properties.getProperty("jdbcUrl");
            String password=properties.getProperty("password");
            String driver=properties.getProperty("driver");
            //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
            Class.forName(driver);
            //3.通过DriverManager的getConnection()方法获取数据库连接
            return DriverManager.getConnection(jdbcUrl,user,password);
        }

    通过DriverManager获取数据库连接

    public void testDriverManager() throws Exception{
            //1.准备连接数据库的四个字符串
            //驱动的全类名
            String driverClass="com.mysql.jdbc.Driver";
            //url
            String jdbcUrl="dbc:mysql://localhost:3306/test";
            //user
            String user="root";
            //password
            String password="123456";
            //读取类路径下的jdbc.properties文件
            InputStream in=getClass().getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            Properties properties=new Properties();
            properties.load(in);
            driverClass=properties.getProperty("driver");
            jdbcUrl=properties.getProperty("jdbcUrl");
            user=properties.getProperty("user");
            //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
            /*
             *使用Drivermanager的好处:可以加载多个驱动
            DriverManager
            .registerDriver(Class.forName(driverClass).newInstance());
             * 
             */
            Class.forName(driverClass);
            password=properties.getProperty("password");
            //3.通过DriverManager的getConnection()方法获取数据库连接
            Connection connection=DriverManager
                    .getConnection(jdbcUrl, user, password);
            System.out.println(connection);
        }

    完整代码(先这样排版,有时间整理):

    package com.atguigu.jdbc;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    import org.junit.Test;
    
    import com.mysql.jdbc.Driver;
    
    //JDBC学习
    public class JDBCTest {
    
        public Connection testGetConnection2() throws Exception{
            //1.准备连接数据库的四个字符串
            //1).创建Properties对象
            Properties properties=new Properties();
            //2).获取jdbc.properties对应的输入流
            InputStream in=this.getClass().
                    getClassLoader().getResourceAsStream("jdbc.properties");
            //3).加载2)对应的输入流
            properties.load(in);
            //4).具体决定user,password等四个字符串
            String user=properties.getProperty("user");
            String jdbcUrl=properties.getProperty("jdbcUrl");
            String password=properties.getProperty("password");
            String driver=properties.getProperty("driver");
            //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
            Class.forName(driver);
            //3.通过DriverManager的getConnection()方法获取数据库连接
            return DriverManager.getConnection(jdbcUrl,user,password);
        }
        /**
         * DriverManager是驱动的管理类
         * 1).可以通过重载的getConnection()方法获取数据库连接,较为方便
         * 2).可以同时管理多个驱动程序:若注册了多个数据库连接
         * ,则调用getConnection()方法时传入的参数不同,即返回不同的数据库连接
         * @throws Exception 
         */
        public void testDriverManager() throws Exception{
            //1.准备连接数据库的四个字符串
            //驱动的全类名
            String driverClass="com.mysql.jdbc.Driver";
            //url
            String jdbcUrl="dbc:mysql://localhost:3306/test";
            //user
            String user="root";
            //password
            String password="123456";
            //读取类路径下的jdbc.properties文件
            InputStream in=getClass().getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            Properties properties=new Properties();
            properties.load(in);
            driverClass=properties.getProperty("driver");
            jdbcUrl=properties.getProperty("jdbcUrl");
            user=properties.getProperty("user");
            //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
            /*
             *使用Drivermanager的好处:可以加载多个驱动
            DriverManager
            .registerDriver(Class.forName(driverClass).newInstance());
             * 
             */
            Class.forName(driverClass);
            password=properties.getProperty("password");
            //3.通过DriverManager的getConnection()方法获取数据库连接
            Connection connection=DriverManager
                    .getConnection(jdbcUrl, user, password);
            System.out.println(connection);
        }
    
        /**
         * Driver是一个接口,数据库厂商必须提供实现的接口
         * 能从其中获取数据库连接,可以通过Driver的实现类的对象获取连接
         * 1.加入mysql驱动
         * 1).解压mysql-connector-java-5.1.18.zip
         * 2).在当前目录下新建lib目录
         * 3).把mysql-connector-java-5.1.18-bin.jar复制到lib目录
         * 4).右键->build-path->add build path加载到类路径下
         * @throws SQLException 
         * 
         */
            /*
             * MySQL附带了一个空密码有的root用户。成功后安装了数据库和客户端,需要进行如下设置root密码:
        
        D:softwaremysql-5.6.25-winx64in> mysqladmin -u root password "123456";
        注:
        
        1. 关闭正在运行的MySQL服务。 
        2. 打开DOS窗口,转到 D:softwaremysql-5.6.25-winx64in 目录。 
        3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 
        4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysqlin目录。 
        5. 输入mysql回车,如果成功,将出现MySQL提示符 >。 
        6. 连接权限数据库: use mysql; 。 
        6. 改密码:update user set password=password("123456") where user="root";(别忘了最后加分号) 。 
        7. 刷新权限(必须步骤):flush privileges; 
        8. 退出 quit。 
        9. 注销系统,再进入,使用用户名root和刚才设置的新密码 123456 登录。
        现在使MySQL服务器的连接,那么使用下面的命令:
         */
        public static void main(String[] args) throws SQLException {
            //1.创建一个Driver实现类的对象
            Driver driver=new com.mysql.jdbc.Driver();
            /*
             * JDBC URL的标准由三部分组成
             * jdbc:<子协议>:<子名称>
             * 1).协议:JDBC URL中的协议总是JDBC
             * 2).子协议:子协议用于标识一个数据库驱动程序
             * 3).紫明成:一种标识数据库的方法。子名称可以一句不同的
             * 子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
             * 例如:jdbc:mysql://127.0.0.1:3306/test【这是我的主机上的,你的不一定】
             * 查看端口号:在mysql后面输入show global variables like 'port';别写错了,切记别忘记写英文状态下的分号
             */
            //2.准备连接数据库的基本信息,url,user,password
            String url="jdbc:mysql://localhost:3306/test";
            Properties info=new Properties();
            info.put("user", "root");
            info.put("password", "123456");
            //3.调用Driver接口实现类对象的connect(url,info)方法获取数据库的连接
            //此处Connection是一个接口,java.sql包下的接口
            Connection connection=driver.connect(url, info);
            System.out.println(connection);
        }
        /**
         * 编写一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接
         * 解决方案:把数据库驱动Driver实现类的全类名、url、user、password
         * 放入一个配置文件中,通过修改配置文件的方法实现和具体的数据库解耦
         * @throws ClassNotFoundException 
         * @throws IllegalAccessException 
         * @throws InstantiationException 
         */
        public Connection getConnection() throws Exception{
            String driverClass=null;
            String jdbcUrl=null;
            String user=null;
            String password=null;
            //读取类路径下的jdbc.properties文件
            InputStream in=getClass().getClassLoader()
                    .getResourceAsStream("jdbc.properties");
            Properties properties=new Properties();
            properties.load(in);
            driverClass=properties.getProperty("driver");
            jdbcUrl=properties.getProperty("jdbcUrl");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
            //通过反射创建Driver对象
            Driver driver=(Driver) Class.forName(driverClass).newInstance();
            Properties info=new Properties();
            info.put("user", user);
            info.put("password", password);
            Connection connection=driver.connect(jdbcUrl, info);
            return connection;
        }
        @Test
        public void testGetConnection() throws Exception{
            System.out.println(getConnection());
        }
    }

    本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/ysw-go/
    1、本博客的原创原创文章,都是本人平时学习所做的笔记,如有错误,欢迎指正。
    2、如有侵犯您的知识产权和版权问题,请通知本人,本人会即时做出处理文章。
    3、本博客的目的是知识交流所用,转载自其它博客或网站,作为自己的参考资料的,感谢这些文章的原创人员

  • 相关阅读:
    环境部署(二):Linux下安装jenkins
    环境部署(一):Linux下安装JDK
    jenkins简单安装及配置(Windows环境)
    python相关资料链接
    性能测试相关资料链接
    管理篇:测试Leader应该做哪些事
    进阶篇:软件测试工程师的岗位职责
    基础篇:如何做一名专业的软件测试工程师
    python:面向对象编程之Zope.interface安装使用
    Django:Python3.6.2+Django2.0配置MySQL
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5451314.html
Copyright © 2011-2022 走看看