JDBC简介
- Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成。
- JDBC为数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。
- 使用JDBC编写的程序能够自动地将SQL语句传送给相应的数据库管理系统。
- JDBC扩展了Java的功能,由于Java语言本身的特点,使得JDBC具有简单、健壮、安全、可移植、获取方便等优势。
我们在没有JDBC之前,使用驱动程序在Java程序与MySQL、Oracle、SQLServer等数据库之间建立连接,驱动程序就是在该课程中将要学到的内容。那么就存在一个问题:在同一个Java程序与数据库之间建立连接时,驱动程序是否是共用的呢?如果一样,很显然就能节省代码量,但是实际上是不一样的。一定要注意是不一样的。那么就存在一个问题:当底层数据库发生改变之后,数据库的驱动程序也会随之发生变化,那么该怎么解决该问题呢?于是JDBC出现了,目的是为了减轻开发人员的工作量,以提高代码的复用。
JDBC API
接口/类 | 功能说明 |
---|---|
DriverManager | 数据库驱动管理类,用于加载和卸载各种驱动程序,并建立于数据库的连接 |
Connection | 此接口用于连接数据库 |
Statement | 此接口用于执行SQL语句并将数据检索到ResultSet中 |
ResultSet | 结果集接口,提供检索SQL语句返回数据的各种方法 |
PreparedStatement | 此接口用于执行预编译的SQL语句 |
CallableStatement | 此接口用于执行SQL存储过程的语句 |
JDBC结构
1.JDBC API是Java开发工具包(JDK)的组成部份:
- JDBC驱动程序管理器
- JDBC驱动程序测试工具包
- JDBC-ODBC桥
2.JDBC驱动程序管理器是JDBC体系结构的支柱,其主要作用是把Java应用程序连接到正确的JDBC驱动程序上。
3.JDBC驱动程序测试工具包为JDBC驱动程序的运行提供一定的可信度,只有通过JDBC驱动程序测试包的驱动程序才被认为是符合JDBC标准的。
4.JDBC-ODBC桥使ODBC驱动程序可被用作JDBC驱动程序。其目标是为方便实现访问某些不常见的DBMS,它的实现为JDBC的快速发展提供了一条途径。
在开始之前,我们先来实现一个简单的JDBC程序
步骤
1,注册驱动;(只需要注册一次)
2,建立连接;
3,创建执行的sql语句;
4,执行语句;
5,处理执行结果;
6,释放资源;
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package cn.ccnu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Statement;
public class Demo1 {
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws Exception {
//1,注册驱动
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// System.getProperty("jdbc.driver", "con.mysql.jdbc.Driver");
Class.forName( "com.mysql.jdbc.Driver" ); //这三种注册方式,推荐使用这种
//2,建立连接
//url格式
//JDBC:子协议:子名称//主机名:端口/数据库名称
String url = "jdbc:mysql://localhost:3306/test" ;//如果是本机,也可以将localhost: 3306 省掉
String user = "root" ;
String password = "123456" ;
Connection conn = (Connection)DriverManager.getConnection(url, user, password);
//3,创建slq执行语句
Statement st = (Statement) conn.createStatement();
//4,执行语句
ResultSet rs = st.executeQuery( "select * from a" );
//5,处理执行结果
while (rs.next()) {
System.out.println(rs.getObject( 1 ));
}
//6,关闭连接,释放资源
rs.close();
st.close();
conn.close();
}
}
|
分析JDBC开发步骤
使用JDBC访问数据库的基本步骤一般如下:
- 加载JDBC驱动程序
- 创建数据库连接
- 创建Statement对象
- 执行SQL语句
- 处理返回结果
- 关闭创建的对象
开发第一个JDBC程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.wfu.ch09;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test1 {
public static void main(String[] args) {
try {
Class.forName( "com.mysql.jdbc.Driver" ); //里面的名字一定不要写错,这个也是导入的
//forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
Connection conn=DriverManager.getConnection( "jdbc:mysql://localhost:3306/k-user" , "root" , "123456" );//试图建立到给定数据库 URL 的连接。
Statement stmt=conn.createStatement(); //创建一个 Statement 对象来将 SQL 语句发送到数据库。
// String insertsql="insert into k_user(userno,username,pwd) values('1002','张三','123')";
// int x=stmt.executeUpdate(insertsql); //executeUpdate 返回一个int 型的数据 括号里面是一个字符串数据类型,详细内容看文档
//(1) 对于 SQL 数据操作语言 (DML) 语句,返回行计数
//(2) 对于不返回任何内容的 SQL 语句,返回 0
// if(x>0){
// System.out.println("插入成功!");
// }
// String updateSql="update k_user set pwd='123456' where userno='1002'";
// int x=stmt.executeUpdate(updateSql);
// if(x>0){
// System.out.println("更新成功!");
// }
String deleteSql= "delete from k_user where userno='1002'" ;
int x=stmt.executeUpdate(deleteSql);
if (x> 0 ){
System.out.println( "删除成功!" );
}
String sql= "select * from k_user" ;
ResultSet rs=stmt.executeQuery(sql);
while (rs.next()){
for ( int i= 1 ;i<= 13 ;i++){
System.out.print(rs.getString(i)+ " " );
}
System.out.println();
}
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package com.wfu.ch09;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test2 {
public static void main(String[] args) {
try {
// step1:加载JDBC驱动程序
Class.forName( "com.mysql.jdbc.Driver" );
// step2:建立数据库的连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/stock11" , "root" , "123" );
// // step3:创建Statement对象
Statement st = conn.createStatement();
//step4:执行SQL语句
String selectSql= "select * from k_user" ;
//step5:处理结果集
ResultSet rs=st.executeQuery(selectSql);
while (rs.next()){
for ( int i= 1 ;i<= 13 ;i++){
System.out.print(rs.getString(i)+ " " );
}
System.out.println();
// String x=rs.getString("hometown");
// System.out.println(x);
}
//step6:关闭创建的对象
//关闭结果集
rs.close();
//关闭statement对象
st.close();
//关闭连接
conn.close();
// step4: 执行SQL语句
//// String insertSql = "insert into k_user(userno,username,pwd) values('1001','tom','123')";
// int x = st.executeUpdate(insertSql);
// if(x>0){
// System.out.println("插入成功!");
// }
// String updateSql="update k_user set pwd='123456' where userno='1001'";
// int x=st.executeUpdate(updateSql);
// if(x>0){
// System.out.println("更新成功!");
// }
// String deleteSql="delete from k_user where userno='1001'";
// int x=st.executeUpdate(deleteSql);
// if(x>0){
// System.out.println("删除成功!");
// }
//
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
各个语句说明
加载JDBC驱动程序
加载驱动程序的方法:
1
|
Class.forName( "DriverName" )
|
其中DriverName是要加载的JDBC驱动程序名称。驱动程序名称根据数据库厂商提供的JDBC驱动程序的种类来确定。
加载MySQL数据库驱动程序的方法为:
1
|
Class.forName( "com.mysql.jdbc.Driver" );
|
加载Oracle数据库驱动程序的方法为:
创建数据库连接-1
DriverManager类是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。该类负责加载、注册JDBC驱动程序,管理应用程序和已注册的驱动程序的连接。
DriverManager的常用方法:
方法名 | 功能说明 |
---|---|
Static connection getConnection(String url, String user, String password) | 用于建立到指定数据库 URL 的连接。其中url为 提供了一种标识数据库位置的方法,user为用户名,password为密码 |
static Driver getDriver(String url) | 用于返回能够打开url所指定的数据库的驱动程序 |
使用DriverManager类的getConnection()创建一个数据库连接:
1
|
Connection conn = DriverManager.getConnection(String url,String user,String password);
|
创建数据库连接-2
URL提供了一种标识数据库位置的方法,可以使相应的驱动程序能够识别该数据库并与它建立连接。
JDBC URL由三个部分组成:
1
|
jdbc : < subprotocol> : < subname>
|
可以根据子协议的改变而变化。
是子协议,指数据库连接的方式。
创建数据库连接-3
对于MySQL驱动的连结的URL是:
1
|
jdbc:mysql: //serverName:port/instance
|
- mysql为子协议名称
- serverName为MySQL数据库服务器名称,可以是一个域名,也可以是IP地址
- port为MySQL数据库的端口号,默认为3306
- instance是数据库的实例名
示例:
1
2
|
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/haier" , "root" , "123" );
|
创建SQL 语句
创建完连接之后,可以通过此连接向目标数据库发送SQL语句。在发送SQL语句之前,须创建一个Statement类的对象,该对象负责将SQL语句发送给数据库。如果SQL语句运行后产生结果集,Statement对象会将结果集封装成ResultSet对象并返回。
通过调用Connection接口的createStatement方法来创建Statement对象,如:
1
|
Statement smt = conn.createStatement();
|
执行SQL语句
在Statement接口中有两个非常重要的方法,分别是executeUpdate方法和executeQuery方法。使用executeUpdate方法可以执行插入、修改和删除等操作的SQL语句, executeUpdate方法的返回值是一个int类型数值,表示更新数据表的行数。使用 executeQuery方法可以执行数据库查询操作的SQL语句,他的返回值是实现ResultSet接口的对象,在其中保存从数据库中查询出来的数据。
例如:
1
|
int row=stmt.executeUpdate(sql);
|
写到这,对于sql命令的展开没有进行详细的说明,在上面的例子中的代码中有很多注释,都有了详细的说明,对于如何写一个jdbc 程序也有了步骤说明,而且都是一个接着一个的,包括声明的对象类型,还有一个注意的地方就是在最后关闭程序的时候,也是有顺序的,对于有依赖关系的语句都是依次关闭的,在程序的代码中也是有说明的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.cnblogs.com/yjlblog/p/7783381.html