JDBC

Wesley13
• 阅读 530

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. import java.sql.Connection;  

  2. import java.sql.Driver;  

  3. import java.sql.SQLException;  

  4. import java.util.Properties;  

  5. public class JDBCTest {  

  6.     public void getConnection() throws SQLException {  

  7.         /** 

  8.          * 连接Mysql数据库 

  9.          */  

  10.         // 创建MysqlDriver对象  

  11.         Driver mySqlDriver = new com.mysql.jdbc.Driver();  

  12.         // 数据库url,这里代表mysql数据库下,本地主机的3306端口号,Student数据库  

  13.         String url1 = "jdbc:mysql://localhost:3306/student";  

  14.         // 创建一个properties对象  

  15.         Properties info = new Properties();  

  16.         // 数据库的用户名和密码,前面必须为user和password  

  17.         info.put("user", "root");  

  18.         info.put("password", "admin");  

  19.         Connection conn1 = mySqlDriver.connect(url1, info);  

  20.         System.out.println(conn1);  

  21.         /** 

  22.          * 连接Oracle数据库 

  23.          */  

  24.         // 通过对象调用connect方法获取链接  

  25.         Driver oracleDriver = new oracle.jdbc.driver.OracleDriver();  

  26.         String url2 = "jdbc:oracle:thin:@localhost:1521:orcl";  

  27.         Properties info2 = new Properties();  

  28.         info2.put("user", "scott");  

  29.         info2.put("password","tiger");  

  30.         Connection conn2 = oracleDriver.connect(url2, info2);  

  31.         System.out.println(conn2);  

  32.     }  

  33.     public static void main(String[] args) throws SQLException {  

  34.         JDBCTest gc=new JDBCTest();  

  35.         gc.getConnection();  

  36.     }  

  37. }

  

结果: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. public class TestJDBC1 {  

  9.     public Connection getConnection() throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{  

  10.         //初始化连接所需的四个变量  

  11.         String driverClass=null;  

  12.         String url=null;  

  13.         String user=null;  

  14.         String password=null;  

  15.         //利用反射获取properties输入流  

  16.         InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");  

  17.         Properties properties=new Properties();  

  18.         //加载输入流到properties  

  19.         properties.load(inputStream);  

  20.         //从properties中取出连接需要四个条件  

  21.          driverClass=properties.getProperty("driver");  

  22.          url=properties.getProperty("url");  

  23.          password=properties.getProperty("password");  

  24.          user=properties.getProperty("user");  

  25.          //利用反射创建相应数据库Driver的对象  

  26.         Driver driver=(Driver) Class.forName(driverClass).newInstance();      

  27.         Properties info=new Properties();  

  28.         info.put("user",user);  

  29.         info.put( "password",password);  

  30.         //通过driver对象调用connect方法获取数据库连接  

  31.         Connection connection=driver.connect(url, info);  

  32.         return connection;  

  33.     }  

  34.     @Test  

  35.     public void testConnection() throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{  

  36.         System.out.println(getConnection());  

  37.     }  

  38. }

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
基础概念jdbc(JavaDataBaseConnectivity)是java连接数据库操作的原生接口。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为各个数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。一句话概括:jdbc是所有
Wesley13 Wesley13
2年前
java数据库
1.jdbc JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fbaike.baidu.com%2
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这