文档章节

JDBC

architect刘源源
 architect刘源源
发布于 2018/01/20 15:01
字数 1253
阅读 23
收藏 0

JDBC

 

 

JDBC(JavaDatabase Connectivity):

 

1. 是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)

2.JDBC为访问不同的数据库提供了一种统一的途径,

3.JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统

4.JDBC接口(API)包括两个层次:

 

  • 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
  • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

 

JDBC驱动程序: 各个数据库厂商根据JDBC的规范制作的 JDBC 实现类的类库。

 

Driver接口:Java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。

 

 

加载与注册 JDBC 驱动: 加载 JDBC 驱动需调用 Class 类的静态方法 forName("DriverClass").

 

 

DriverManager类是驱动程序管理器类,负责管理驱动程序.

注意: 通常不手动调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例.

 

 

 

建立连接: 调用 DriverManager 类的 getConnection() 方法建立到数据库的连接 如connection.getConnection

 

 

JDBC URL: 用于标识一个被注册的驱动程序,驱动程序管理器通过 URL 选择正确的驱动程序,建立到数据库的连接。

JDBC URL的标准由三部分组成,各部分间用冒号分隔: jdbc:<子协议>:<子名称>

 

  •    协议:JDBC URL中的协议总是jdbc
  •    子协议:子协议用于标识一个数据库驱动程序
  •    子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息

 

     

常见JDBC Url:

 

  • Oracle 数据库:jdbc:oracle:thin:@localhost:1521:sid
  • SQLServer :jdbc:microsoft:sqlserver//localhost:1433;DatabaseName=sid
  • MYSQL 数据库:jdbc:mysql://localhost:3306/sid 

 

连接数据库的步奏:

1.将数据库jar包复制到MyEclipse当前项目的lib目录下(没有就手动建目录)

2.右键jar文件,add to bulidPath 加入到类路径下.

3.通过数据库提供的驱动创建对象 Driver driver=new com.mysql.jdbc.Driver();

4.通过driver调用connect方法获取数据库连接.

5.关闭连接资源.

 

一个获取数据库链接的最简单例子:

 

[java] view plain copy

  1. <span style="font-size:14px;">import java.sql.Connection;  
  2. import java.sql.Driver;  
  3. import java.sql.SQLException;  
  4. import java.util.Properties;  
  5.   
  6. public class JDBCTest {  
  7.   
  8.     public void getConnection() throws SQLException {  
  9.         /** 
  10.          * 连接Mysql数据库 
  11.          */  
  12.         // 创建MysqlDriver对象  
  13.         Driver mySqlDriver = new com.mysql.jdbc.Driver();  
  14.         // 数据库url,这里代表mysql数据库下,本地主机的3306端口号,Student数据库  
  15.         String url1 = "jdbc:mysql://localhost:3306/student";  
  16.         // 创建一个properties对象  
  17.         Properties info = new Properties();  
  18.         // 数据库的用户名和密码,前面必须为user和password  
  19.         info.put("user", "root");  
  20.         info.put("password", "admin");  
  21.   
  22.         Connection conn1 = mySqlDriver.connect(url1, info);  
  23.         System.out.println(conn1);  
  24.           
  25.         /** 
  26.          * 连接Oracle数据库 
  27.          */  
  28.         // 通过对象调用connect方法获取链接  
  29.         Driver oracleDriver = new oracle.jdbc.driver.OracleDriver();  
  30.         String url2 = "jdbc:oracle:thin:@localhost:1521:orcl";  
  31.   
  32.         Properties info2 = new Properties();  
  33.         info2.put("user", "scott");  
  34.         info2.put("password","tiger");  
  35.   
  36.         Connection conn2 = oracleDriver.connect(url2, info2);  
  37.         System.out.println(conn2);  
  38.   
  39.     }  
  40.   
  41.     public static void main(String[] args) throws SQLException {  
  42.         JDBCTest gc=new JDBCTest();  
  43.         gc.getConnection();  
  44.     }  
  45. }</span>  


结果:com.mysql.jdbc.JDBC4Connection@196c1b0
     oracle.jdbc.driver.T4CConnection@b9b538 说明已经连接上了Oracle和Mysql数据库了

 

 

通过分析以上mysql数据库的链接和Oracle数据库的链接可以发现,他们都多数的代码都是一样或者相似的,能不能用一个方法,只需改变一点点就让数据库完成连接的切换呢?

办法当然有,我们在集合和反射都用到了properties配置文件,它的作用是使代码重用性增强.

 

利用反射实现不同数据库的链接而不改变原有代码:

properties:文件 jdbc.properties

#mysql
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/student
user=root
password=admin

#Oracle
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
#user=scott
#password=tiger 

 

[java] view plain copy

  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.sql.Connection;  
  4. import java.sql.Driver;  
  5. import java.sql.SQLException;  
  6. import java.util.Properties;  
  7. import org.junit.Test;  
  8.   
  9. public class TestJDBC1 {  
  10.       
  11.     public Connection getConnection() throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{  
  12.         //初始化连接所需的四个变量  
  13.         String driverClass=null;  
  14.         String url=null;  
  15.         String user=null;  
  16.         String password=null;  
  17.           
  18.         //利用反射获取properties输入流  
  19.         InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");  
  20.         Properties properties=new Properties();  
  21.         //加载输入流到properties  
  22.         properties.load(inputStream);  
  23.           
  24.         //从properties中取出连接需要四个条件  
  25.          driverClass=properties.getProperty("driver");  
  26.          url=properties.getProperty("url");  
  27.          password=properties.getProperty("password");  
  28.          user=properties.getProperty("user");  
  29.            
  30.          //利用反射创建相应数据库Driver的对象  
  31.         Driver driver=(Driver) Class.forName(driverClass).newInstance();      
  32.         Properties info=new Properties();  
  33.         info.put("user",user);  
  34.         info.put( "password",password);  
  35.         //通过driver对象调用connect方法获取数据库连接  
  36.         Connection connection=driver.connect(url, info);  
  37.         return connection;  
  38.     }  
  39.   
  40.     @Test  
  41.     public void testConnection() throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{  
  42.         System.out.println(getConnection());  
  43.     }  
  44.   
  45. }  

© 著作权归作者所有

上一篇: Cookie+cession
下一篇: 网络编程(Socket)
architect刘源源

architect刘源源

粉丝 167
博文 555
码字总数 935372
作品 0
浦东
程序员
私信 提问
使用ANT生成证书的时候出错

我想使用Ant生成CA证书,在做好build.xml,写好./bin/cli.xml 执行脚本时出现 [java] Initializing CA [java] Generating rootCA keystore: [java] CA name: AdminRootCA [java] SuperAdmin CN......

fringe-liu
2012/06/26
474
2
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
JVM -verbose参数详解(转)

转自:http://www.javaranger.com/archives/367 java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息。 1.java -verbose:class 在程序运行的时候有多少类被加载!你可以用verbose...

巴顿
2014/12/04
4K
0
访问不了http://localhost:8080/ecommerce和https://localhost:8443/webtools?

1.ofbiz版本是:ofbiz12 2.根据这篇博文(http://blog.csdn.net/xiaoliouc/article/details/10223095?reload#html),前面都没有问题,但是在最后一步: 1)执行ant load-demo,成功创建了数...

对岸
2014/11/12
3.4K
2
Ubuntu 13.10 64位下安装配置 JDK 7

第一步:下载 jdk-7u45-linux-x64.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz 或者直接下载:http://download.oracle.com/otn-pub/ja......

姚君
2014/03/24
2.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部