转自:http://www.cnblogs.com/ysw-go/

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函数中)

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

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

/*
         * MySQL附带了一个空密码有的root用户。成功后安装了数据库和客户端,需要进行如下设置root密码:

    D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root password "123456";
    注:

    1. 关闭正在运行的MySQL服务。
    2. 打开DOS窗口,转到 D:\software\mysql-5.6.25-winx64\bin 目录。
    3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
    4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
    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

具体的代码实现:

测试方法一:

 1 public Connection getConnection() throws Exception{
 2         String driverClass=null;
 3         String jdbcUrl=null;
 4         String user=null;
 5         String password=null;
 6         //读取类路径下的jdbc.properties文件
 7         InputStream in=getClass().getClassLoader()
 8                 .getResourceAsStream("jdbc.properties");
 9         Properties properties=new Properties();
10         properties.load(in);
11         driverClass=properties.getProperty("driver");
12         jdbcUrl=properties.getProperty("jdbcUrl");
13         user=properties.getProperty("user");
14         password=properties.getProperty("password");
15         //通过反射创建Driver对象
16         Driver driver=(Driver) Class.forName(driverClass).newInstance();
17         Properties info=new Properties();
18         info.put("user", user);
19         info.put("password", password);
20         Connection connection=driver.connect(jdbcUrl, info);
21         return connection;
22     }

测试方法二:

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

通过DriverManager获取数据库连接

 1 public void testDriverManager() throws Exception{
 2         //1.准备连接数据库的四个字符串
 3         //驱动的全类名
 4         String driverClass="com.mysql.jdbc.Driver";
 5         //url
 6         String jdbcUrl="dbc:mysql://localhost:3306/test";
 7         //user
 8         String user="root";
 9         //password
10         String password="123456";
11         //读取类路径下的jdbc.properties文件
12         InputStream in=getClass().getClassLoader()
13                 .getResourceAsStream("jdbc.properties");
14         Properties properties=new Properties();
15         properties.load(in);
16         driverClass=properties.getProperty("driver");
17         jdbcUrl=properties.getProperty("jdbcUrl");
18         user=properties.getProperty("user");
19         //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
20         /*
21          *使用Drivermanager的好处:可以加载多个驱动
22         DriverManager
23         .registerDriver(Class.forName(driverClass).newInstance());
24          *
25          */
26         Class.forName(driverClass);
27         password=properties.getProperty("password");
28         //3.通过DriverManager的getConnection()方法获取数据库连接
29         Connection connection=DriverManager
30                 .getConnection(jdbcUrl, user, password);
31         System.out.println(connection);
32     }

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

  1 package com.atguigu.jdbc;
  2
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.SQLException;
  7 import java.util.Properties;
  8
  9 import org.junit.Test;
 10
 11 import com.mysql.jdbc.Driver;
 12
 13 //JDBC学习
 14 public class JDBCTest {
 15
 16     public Connection testGetConnection2() throws Exception{
 17         //1.准备连接数据库的四个字符串
 18         //1).创建Properties对象
 19         Properties properties=new Properties();
 20         //2).获取jdbc.properties对应的输入流
 21         InputStream in=this.getClass().
 22                 getClassLoader().getResourceAsStream("jdbc.properties");
 23         //3).加载2)对应的输入流
 24         properties.load(in);
 25         //4).具体决定user,password等四个字符串
 26         String user=properties.getProperty("user");
 27         String jdbcUrl=properties.getProperty("jdbcUrl");
 28         String password=properties.getProperty("password");
 29         String driver=properties.getProperty("driver");
 30         //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
 31         Class.forName(driver);
 32         //3.通过DriverManager的getConnection()方法获取数据库连接
 33         return DriverManager.getConnection(jdbcUrl,user,password);
 34     }
 35     /**
 36      * DriverManager是驱动的管理类
 37      * 1).可以通过重载的getConnection()方法获取数据库连接,较为方便
 38      * 2).可以同时管理多个驱动程序:若注册了多个数据库连接
 39      * ,则调用getConnection()方法时传入的参数不同,即返回不同的数据库连接
 40      * @throws Exception
 41      */
 42     public void testDriverManager() throws Exception{
 43         //1.准备连接数据库的四个字符串
 44         //驱动的全类名
 45         String driverClass="com.mysql.jdbc.Driver";
 46         //url
 47         String jdbcUrl="dbc:mysql://localhost:3306/test";
 48         //user
 49         String user="root";
 50         //password
 51         String password="123456";
 52         //读取类路径下的jdbc.properties文件
 53         InputStream in=getClass().getClassLoader()
 54                 .getResourceAsStream("jdbc.properties");
 55         Properties properties=new Properties();
 56         properties.load(in);
 57         driverClass=properties.getProperty("driver");
 58         jdbcUrl=properties.getProperty("jdbcUrl");
 59         user=properties.getProperty("user");
 60         //2.加载数据库驱动程序(对应的Driver实现类中注册驱动的静态代码块)
 61         /*
 62          *使用Drivermanager的好处:可以加载多个驱动
 63         DriverManager
 64         .registerDriver(Class.forName(driverClass).newInstance());
 65          *
 66          */
 67         Class.forName(driverClass);
 68         password=properties.getProperty("password");
 69         //3.通过DriverManager的getConnection()方法获取数据库连接
 70         Connection connection=DriverManager
 71                 .getConnection(jdbcUrl, user, password);
 72         System.out.println(connection);
 73     }
 74
 75     /**
 76      * Driver是一个接口,数据库厂商必须提供实现的接口
 77      * 能从其中获取数据库连接,可以通过Driver的实现类的对象获取连接
 78      * 1.加入mysql驱动
 79      * 1).解压mysql-connector-java-5.1.18.zip
 80      * 2).在当前目录下新建lib目录
 81      * 3).把mysql-connector-java-5.1.18-bin.jar复制到lib目录
 82      * 4).右键->build-path->add build path加载到类路径下
 83      * @throws SQLException
 84      *
 85      */
 86         /*
 87          * MySQL附带了一个空密码有的root用户。成功后安装了数据库和客户端,需要进行如下设置root密码:
 88
 89     D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root password "123456";
 90     注:
 91
 92     1. 关闭正在运行的MySQL服务。
 93     2. 打开DOS窗口,转到 D:\software\mysql-5.6.25-winx64\bin 目录。
 94     3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
 95     4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
 96     5. 输入mysql回车,如果成功,将出现MySQL提示符 >。
 97     6. 连接权限数据库: use mysql; 。
 98     6. 改密码:update user set password=password("123456") where user="root";(别忘了最后加分号) 。
 99     7. 刷新权限(必须步骤):flush privileges; 
100     8. 退出 quit。
101     9. 注销系统,再进入,使用用户名root和刚才设置的新密码 123456 登录。
102     现在使MySQL服务器的连接,那么使用下面的命令:
103      */
104     public static void main(String[] args) throws SQLException {
105         //1.创建一个Driver实现类的对象
106         Driver driver=new com.mysql.jdbc.Driver();
107         /*
108          * JDBC URL的标准由三部分组成
109          * jdbc:<子协议>:<子名称>
110          * 1).协议:JDBC URL中的协议总是JDBC
111          * 2).子协议:子协议用于标识一个数据库驱动程序
112          * 3).紫明成:一种标识数据库的方法。子名称可以一句不同的
113          * 子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
114          * 例如:jdbc:mysql://127.0.0.1:3306/test【这是我的主机上的,你的不一定】
115          * 查看端口号:在mysql后面输入show global variables like 'port';别写错了,切记别忘记写英文状态下的分号
116          */
117         //2.准备连接数据库的基本信息,url,user,password
118         String url="jdbc:mysql://localhost:3306/test";
119         Properties info=new Properties();
120         info.put("user", "root");
121         info.put("password", "123456");
122         //3.调用Driver接口实现类对象的connect(url,info)方法获取数据库的连接
123         //此处Connection是一个接口,java.sql包下的接口
124         Connection connection=driver.connect(url, info);
125         System.out.println(connection);
126     }
127     /**
128      * 编写一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接
129      * 解决方案:把数据库驱动Driver实现类的全类名、url、user、password
130      * 放入一个配置文件中,通过修改配置文件的方法实现和具体的数据库解耦
131      * @throws ClassNotFoundException
132      * @throws IllegalAccessException
133      * @throws InstantiationException
134      */
135     public Connection getConnection() throws Exception{
136         String driverClass=null;
137         String jdbcUrl=null;
138         String user=null;
139         String password=null;
140         //读取类路径下的jdbc.properties文件
141         InputStream in=getClass().getClassLoader()
142                 .getResourceAsStream("jdbc.properties");
143         Properties properties=new Properties();
144         properties.load(in);
145         driverClass=properties.getProperty("driver");
146         jdbcUrl=properties.getProperty("jdbcUrl");
147         user=properties.getProperty("user");
148         password=properties.getProperty("password");
149         //通过反射创建Driver对象
150         Driver driver=(Driver) Class.forName(driverClass).newInstance();
151         Properties info=new Properties();
152         info.put("user", user);
153         info.put("password", password);
154         Connection connection=driver.connect(jdbcUrl, info);
155         return connection;
156     }
157     @Test
158     public void testGetConnection() throws Exception{
159         System.out.println(getConnection());
160     }
161 }

【转】JDBC学习笔记(1)——JDBC概述的更多相关文章

  1. JDBC学习笔记(1)——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  2. JDBC学习笔记之JDBC简介

    1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据. JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据 ...

  3. JDBC学习笔记一

    JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...

  4. JDBC 学习笔记(十一)—— JDBC 的事务支持

    1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...

  5. JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架

    1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...

  6. JDBC 学习笔记(六)—— PreparedStatement

    1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...

  7. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  8. OGG学习笔记01-基础概述

    OGG学习笔记01-基础概述 OGG(Oracle Golden Gate),最近几年在数据同步.容灾领域特别火,甚至比Oracle自己的原生产品DataGuard还要风光,主要是因为其跨平台.跨数据 ...

  9. JDBC学习笔记(1)

    说明:本系列学习笔记主要是学习传智播客的李勇老师的教学课程和一本英文电子书<JDBC Recipes A Problem-Solution Approach>所作的笔记. 1,什么是JDB ...

随机推荐

  1. Servlet的监听

    Servlet监听 在<Servlet和Jsp>中我们使用了ServletConfig获取Servlet的初始配置,用ServletContext来获取整个Web应用的初始配置,但如果需要 ...

  2. 把Eclipse项目转换成Maven项目

    把Maven项目转换成Eclipse项目只要使用Maven的Eclipse插件就能做到 mvn eclipse:eclipse 其实Maven的Eclipse插件也有把Eclipse项目转换成Mave ...

  3. Unity Shader 知识点总结(二)

    紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ...

  4. ThinkPhp框架的数据库操作(查询)

    TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. ...

  5. 蓝牙DA14580开发:固件格式、二次引导和烧写

    嵌入式企鹅圈原创团队成员黄鑫提供. 相比NRF52832和CC254X,蓝牙单芯片DA14580在OTA和二次引导上要复杂一些,不仅体现在memory map.引导过程等流程上,而且在固件格式.生成和 ...

  6. MySQL+SSM+Ajax上传图片问题

    第一次写上传图片的代码,碰到很多问题.昨天做了整整一天,终于在晚上的时候成功了.大声欢呼. 但是,做完之后,还是有很多问题想不通.所以在这里也算是写个笔记,日后忘记了可以回顾,也算请教各路朋友.(^_ ...

  7. eclipse中以debug方式启动tomcat报错

    在eclipse中debug  Tomcat报错,错误如下: FATAL ERROR in native method: JDWP No transports initialized, jvmtiEr ...

  8. 《连载 | 物联网框架ServerSuperIO教程》- 16.OPC Server的使用步骤。附:3.3 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  9. 图文:eclipse中SVN分支合并到主干

    在项目开发中,需要添加一些新的功能,但是又不想影响到其他开发人员的项目进度,所以决定使用SVN分支进行开发,分支开发完毕后再合并到主干.本文介绍如何在eclipse中合并分支到主干. 1. 要想将分支 ...

  10. Linux云自动化运维第三课

    Linux云自动化运维第三课 一.正则表达式 1.匹配符 * ###匹配0到任意字符 ? ###匹配单个字符 [[:alpha:]] ###匹配单个字母 [[:lower:]] ###匹配单个小写字母 ...