JDBC(Java Data Base Connectivity,java数据库连接)
2019独角兽企业重金招聘Python工程师标准>>>
JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法,JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。
通常一个数据库厂商在推出自己的数据库产品的时候都会提供一套访问数据库的API,这些API可以用各种语言的形式提供,客户端应用程序调用这些API来访问数据库。每一个厂商提供的API都不相同,导致了使用某一个特定的数据库的程序不能移植到另一个数据库上。JDBC以Java类库来取代数据库厂商的专有API,客户端只需要调用JDBC API,由JDBC驱动程序(第三方数据库厂商实现Java JDBC标准而定义的特定于某一数据库操作的API)去处理与数据库的通信。
应用:
使用某种数据库持久化数据要导入相应的数据库驱动包。
主要数据库JDBC驱动的类名:
SQL Server:com.microsoft.jdbc.sqlserver.SQLServerDriver
MySQL:com.mysql.jdbc.Driver
Oracle:oracle.jdbc.driver.OracleDriver
1、首先我们一般要加载并注册数据库驱动,有以下三种方式可以做到这一点:
①、Class.forName("JDBC驱动类名") //通过反射机制加载注册驱动,常用
②、System.setProperty("jdbc.driver","JDBC驱动类名");//设置系统属性指定数据库驱动
③、DriverManager.registerDriver(new com.mysql.jdbc.Driver());
总结:推荐①,和②两种方式。
原因:③在编译时需要导入对应的lib。①,②不需要。
第②种方式的话,可以同时导入多个jdbc驱动,中间用冒号“:”分开
比如System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");
这样就一次注册了三个数据库驱动
在调用Class.forName(“XXXDriver”)时,完成了将具体的驱动程序向JDBC API中驱动管理器DriverManager
的注册,该 注册方法在类构造完成前完成,一般使用静态语句块,
通过查看MySQL的驱动实现com.mysql.jdbc.Driver类可以看到
static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}
}
在调用DriverManager的getConnection方法时,一般先在已注册的驱动中查找可以了解此URL的驱动,
然后调用该驱动的connect方法,从而建立连接,返回的连接都是一个实现java.sql.Connection接口的具体类。
JDBC标准中的Driver接口:
它是任何数据库提供商的驱动类必须实现的接口,驱动类必须实现该接口中的所有方法!
MySQL驱动类Driver源码:
package com.mysql.jdbc;import java.sql.SQLException;/*** The Java SQL framework allows for multiple database drivers. Each driver* should supply a class that implements the Driver interface* * <p>* The DriverManager will try to load as many drivers as it can find and then* for any given connection request, it will ask each driver in turn to try to* connect to the target URL.* * <p>* It is strongly recommended that each Driver class should be small and* standalone so that the Driver class can be loaded and queried without* bringing in vast quantities of supporting code.* * <p>* When a Driver class is loaded, it should create an instance of itself and* register it with the DriverManager. This means that a user can load and* register a driver by doing Class.forName("foo.bah.Driver")*/
public class Driver extends NonRegisteringDriver implements java.sql.Driver {// ~ Static fields/initializers// ---------------------------------------------//// Register ourselves with the DriverManager//static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}/*** Construct a new driver and register it with DriverManager*/public Driver() throws SQLException {// Required for Class.forName().newInstance()}
}
2、从DriverManager中的到一个DBMS连接,DriverManager类是整个JDBC的起点!利用它可以创建连接,
从而完成后续的操作。调用DriverManager类的getConnection(String url, String user, String pwd)建立到
数据库的连接,返回一个连接对象。
常见的url:
SQL Server :jdbc:microsoft:sqlserver://localhost:1443;databasename=数据库名
Oracle :jdbc:oracle:thin:@localhost:1521:ORCL(数据库实例名)
MySQL :jdbc:mysql://localhost:3306:/databasename
Jdbc-odbc桥 :jdbc:odbc:test(test为odbc数据源名称)
public class DBUtil {private static String url = "jdbc:mysql://localhost:3306/spring";private static String user = "root";private static String pwd = "mysql5";private static Connection conn = null;static {try {//使用Class.forName()加载并注册JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() {try {//加载 Driver 类并在 DriverManager 类中注册后,它们即可用来与数据库建立连接。//当调用 DriverManager.getConnection 方法发出连接请求时,//DriverManager 将检查每个驱动程序,查看它是否可以建立连接。conn = DriverManager.getConnection(url, user, pwd);} catch (SQLException e) {e.printStackTrace();} return conn;}public static void closeConn() {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}
3、访问数据库进行CRUD操作,对数据库操作的接口类一般都位于java.sql包和javax.sql包下。
数据库连接被用于向数据库服务器发送命令和SQL语句。
常用的数据库操作接口类:
DriverManager:
public class DriverManager extends Object
管理一组 JDBC 驱动程序的基本服务。
在调用getConnection
方法时,DriverManager
会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。
Connection:
public interface Connection extends Wrapper
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
注:在配置Connection
时,JDBC 应用程序应该使用适当的Connection
方法,比如setAutoCommit
或setTransactionIsolation
。在有可用的 JDBC 方法时,应用程序不能直接调用 SQL 命令更改连接的配置。默认情况下,Connection
对象处于自动提交模式下,这意味着它在执行每个语句后都会自动提交更改。如果禁用了自动提交模式,那么要提交更改就必须显式调用commit
方法;否则无法保存数据库更改。
Statement:
public interface Statement extends Wrapper
用于执行静态 SQL 语句并返回它所生成结果的对象。
Statement
对象用来将 SQL 语句发送到数据库。不带参数的 SQL 语句通常使用Statement
对象执行。如果多次执行相同的 SQL 语句,使用PreparedStatement
对象可能更有效。PreparedStatement:
public interface PreparedStatement extends Statement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。因此多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
resultset rs = pstmt.executequery();ResultSet:
public interface ResultSet extends Wrapper
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet
对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next
方法将光标移动到下一行;因为该方法在ResultSet
对象没有下一行时返回false
,所以可以在while
循环中使用它来迭代结果集。
转载于:https://my.oschina.net/xiaomaoandhong/blog/60795
JDBC(Java Data Base Connectivity,java数据库连接)相关推荐
- JDBC(Java Data Base Connectivity)基本用法
一.什么是JDBC JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl ...
- JDBC(Java Data Base Connectivity)高级用法
一.批处理 Batch 对于大量的批处理,建议使用statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常. 示例 package com.lgd.jd ...
- Java Data Base Connection(JDBC)
用于执行SQL语句的Java API,可为多种关系数据库提供统一访问. 它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范. JDBC需连接驱动. 驱动:两个设备要进行通信时需满 ...
- 【java学习之路】数据库连接JDBC
JDBC JDBC介绍 ▪ JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术. ▪ JDBC(Java Data Base Connectivit ...
- jdbc 生成建表语句_JDBC数据库连接怎么操作?
之前一直听说过JDBC,但从来不知道它是何物的小伙伴们看过来啦! 一.概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java A ...
- 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统
基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+CS的图书销售管理系统GUI设计与实现,文章末尾附有本毕业设计的 ...
- JDO(Java Data Object )
JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要 ...
- Java小白修炼手册--第四阶段--JDBC(Java Database Connectivity : Java访问数据库的解决方案 )
目录 JDBC原理 JDBC标准 JDBC是什么 使用JDBC优点 JDBC接 口及数据库厂商实现 JDBC工作原理 Driver ( 驱动程序)接口及驱动类加载 Connection( 连接,关 ...
- JDBC连接数据库(Java DataBase Connectivity,java)
通过JDBC操作数据库(以mysql为例) 1.官网下载JDBC的相关JAR包 [https://dev.mysql.com/downloads/connector/j/] 2.解压后,导入jar包 ...
最新文章
- python 类实例化理解
- 前端JS: 通过代码-看函数作用域this对象
- MATLAB对函数做评估
- 【C语言】字符串函数strtok 按照指定字符串分割
- 计算机的好处英语,跪求一篇英语作文 题目:论计算机的优缺点
- Node — 第九天 (大事件项目接口实现三)
- Docker 方式安装 Nginx 、阿里云服务器上装 Ngnix
- BZOJ2683 简单题(CDQ分治)
- 【idea基础知识】常用快捷键整理
- python multiprocessing遇到Can’t pickle instancemethod问题
- symbolicatecrash App Bug 分析工具
- SketchUp最适用新手的二十多款SU插件
- Windows上使用 OpenOCD 给 STM32 下载程序
- [浅析]UE4关卡流
- 网络存储服务器接显示器,Unraid下,单核显IGPU实现win10外接显示屏,显卡成功驱动...
- 聚焦传统网络,学习SDN基础和案例
- PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源
- 什么软件可以搜python题_Python答题神器下载-Python百万答题软件 _5577安卓网
- 日本最大的120家医用物资供应商列表
- 一文带你了解电感的5大损耗
热门文章
- 北斗导航 | 北斗伪距定位、测速与授时——PNT:最小二乘法、加权最小二乘:伪距单点定位
- nginx mysql设置远程连接超时_nginx中的超时设置
- Win32字符串处理函数
- oracle 得到一个树,Related to Oracle SQL 关于树形数据的遍历
- java switch小程序,小程序自定义switch组件
- FPGA笔录(2)-触发器与锁存器原理
- 【效率】几个免费的富文本编辑器,这不完胜付费?
- 【机器学习】支持向量机(SVM)代码练习
- 【NLP】NLP文本风格迁移,秒变金庸风
- 高额奖金+实习机会+官方证书 丨微众银行第二届金融科技高校技术大赛正式启动...