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';别写错了,切记别忘记写英文状态下的分号;

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

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

 Connection connection=driver.connect(url, info);
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:\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

具体的代码实现:

测试方法一:

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:\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服务器的连接,那么使用下面的命令:
*/
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、本博客的目的是知识交流所用,转载自其它博客或网站,作为自己的参考资料的,感谢这些文章的原创人员

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

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

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  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. mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'

    今天使用mysql出现 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name' 异常 通过查找问题,发现是字段编码不支 ...

  2. 内存分配方法 kmalloc()、vmalloc()、__get_free_pages()

    Copyright: 该文章版权由潘云登所有.可在非商业目的下任意传播和复制. 对于商业目的下对本文的任何行为需经作者同意. kmalloc #include <linux/slab.h> ...

  3. NDK(17)让ndk支持完整C++,exception,rtti,

    C++ Support The Android platform provides a very minimal C++ runtime support library (/system/lib/li ...

  4. hdu 1394 Minimum Inversion Number (裸树状数组 求逆序数 && 归并排序求逆序数)

    题目链接 题意: 给一个n个数的序列a1, a2, ..., an ,这些数的范围是0-n-1, 可以把前面m个数移动到后面去,形成新序列:a1, a2, ..., an-1, an (where m ...

  5. Codeforces Round #269 (Div. 2)

    A 题意:给出6根木棍,如果有4根相同,2根不同,则构成“bear”,如果剩余两个相同,则构成“elephant” 用一个数组分别储存各个数字出现的次数,再判断即可 注意hash[i]==5的时候,也 ...

  6. Android development tools line_endings hacking

    /******************************************************************** * Android development tools li ...

  7. 关于ecshop中jquery与js冲突解决的方案

    ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的.   但恰恰的,在封装JSON各种方法的同时对objec ...

  8. [Everyday Mathematics]20150111

    设 $n$ 阶方阵 $A=(\al_1,\cdots,\al_n)$ 非奇异, $B=(0,\al_2,\cdots,\al_n)$. 试证: $BA^{-1}$, $A^{-1}B$ 的秩均为 $n ...

  9. ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计

    ylbtech-DatabaseDesgin:ylbtech-数据库设计与优化-对作为复选框/单选列表的集合表的设计 -- DatabaseName:通用表结构-- -- 主要是针对将要设计的表对象, ...

  10. util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案

    ylbtech-funcation-util:  C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...