文档章节

JDBC(Java Data Base Connectivity,java数据库连接)

冰雷卡尔
 冰雷卡尔
发布于 2012/06/03 21:00
字数 1766
阅读 387
收藏 8

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接口:
     JDBCDriverInterface

     它是任何数据库提供商的驱动类必须实现的接口,驱动类必须实现该接口中的所有方法!

     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 方法,比如 setAutoCommitsetTransactionIsolation。在有可用的 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 循环中使用它来迭代结果集。


© 著作权归作者所有

共有 人打赏支持
冰雷卡尔
粉丝 30
博文 116
码字总数 81854
作品 0
深圳
程序员
私信 提问
java使用原生jdbc连接数据库并操作

使用Java连接数据库需要使用JDBC驱动。JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的...

hasagei
01/23
0
0
Android———利用JDBC连接服务器数据库

1、Android平台下与服务器数据库通信的方法 在Android平台下,连接电脑服务器的MySQL、PostgreSQL、Oracle、Sybase、Microsoft SQLServer等数据库管理系统DBMS(database management system),...

xiahuawuyu
2012/10/10
0
1
spring hibernate 连接sqlserver 数据库的时候还需要jdbc包吗?

1、介绍-首先查看微软官方对jdbc的介绍。 https://msdn.microsoft.com/zh-cn/data/aa937724.aspx Microsoft JDBC Driver for SQL Server In our continued commitment to interoperability, ......

Oscarfff
2015/04/20
0
0
使用Spring 和 JDBC 来操作数据 (持续更新中)

说明,使用Spring4, 采用 Java Configuration. <一> 配置数据源 之五种方式 1. 使用 JNDI 的数据源(jndi data source) 代码如下: 说明,这是利用JndiObjectFactoryBean 从JNDI 中查找DataS...

平江夜弹
2015/05/26
0
0
JDBC连接MySQL数据库及示例

DBC是Sun公司制定的一个可以用Java语言连接数据库的技术。 一、JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提...

aminqiao
2014/06/10
0
1

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot入门系列HelloWorld

根据咱们程序员学习的惯例,学习一门新技术都是从HelloWorld开始的。 感觉编程是一件非常富有意义的事情,程序员也是一群可爱的人,渴望被关怀和关注,因为我们总在和世界say Hi. 好了进入正...

凌宇之蓝
32分钟前
0
0
Linux之《荒岛余生》(二)CPU篇

温馨提示,动图已压缩,流量党放心查看。CPU方面内容不多,我们顺便学点命令。本篇是《荒岛余生》系列第二篇,垂直观测CPU。其余参见: Linux之《荒岛余生》(一)准备篇 如何做一个CPU cpu...

mskk
36分钟前
0
0
Java基础教程,第十讲,继承

前面我们学习了类和对象的概念,学习了方法的重载,今天我们将学习面向对象另一个重要特性,继承(inheritance)。利用继承,我们可以基于一个已经存在的类狗仔一个新的类,继承已经存在的类...

程序员补给栈
39分钟前
0
0
nginx的日志

nginx的日志包括错误日志和访问日志,分别使用不同的指令来定义其输出位置和相应的级别。 下面介绍其各自的用途。 错误日志 nginx提供了error_log指令来指定错误日志的输出文件和级别。 指令...

xtof
今天
3
0
【转】ubuntu18.04系统安装完之后显示未发现WiFi适配器【拯救者y7000亲测可用】

解决过程如下: 标题要大才醒目。 第一,插网线: 确保能通过网线连上网,通过路由器连还是直接接口连都没事,因为我们需要联网去下载些驱动以及更新。 第二,更改软件源: 打开“设置”,选...

Aomo
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部