一:JDBC概述
1:jdbc简介
jdbc—Java Database Connectivity即Java数据库连接,它由一组使用Java语言编写的类与接口组成。JDBC提供了执行sql语句标准的JavaAPI,可以方便地实现多种关系数据库的统一操作。
第一层为Java应用程序,它使用JDBC API连接和操作数据库,而使用JDBC API连接不同的数据库时,需使用不同的JDBC驱动程序。
1)JDBC API:提供了Java应用程序与各种不同数据库交互的标准接口,包括Connection、Statement、PreparedStatement、ResultSet。开发人员使用JDBC接口进行各种数据库的操作。
2)JDBC Driver Manager:能够管理各种不同JDBC驱动。
3)JDBC驱动:JDBC驱动由不同的数据库厂商提供,用于连接不同的数据库。例如Oracle公司提供专用于连接Oracle的JDBC驱动,微软提供专门连接SqlServer的JDBC驱动。JDBC驱动又实现了JDBC API的各种接口,加载JDBC驱动后才可以使用JDBC API中的接口操作数据库。
2.JDBC API
JDBC的核心是提供Java API类库,帮助用户建立与数据库的连接。执行Sql语句、检索结果集等。Java开发人员可以利用这些类库开发数据库应用程序。
JDBC API中主要类和接口
类及接口 |
功能描述 |
java.sql.DriverManager |
管理JDBC驱动程序 |
java.sql.connection |
建立特定数据库的连接(会话),建立连接后执行sql语句 |
java.sql.statement |
用于执行sql语句 |
java.sql.PreparedStatement |
创建可以编辑的sql语句对象,是Statement的子接口 |
java.sql.ResultSet |
创建检索sql语句的结果集 |
java.sqlCallableStatement |
执行sql存储过程 |
java.sql,types |
表示sql类型的常量 |
java.sql.sqlException |
数据库访问过程中产生的错误描述信息 |
注:使用JDBC操作数据库需熟练掌握JDBC API,JDBC API主要包括建立数据库的连接、发送SQL语句、处理结果三个方面,也就是操作数据库的步骤。而对于数据库进行增、删、改、查前提都是建立在数据库的连接上。
3.JDBC驱动分类
JDBC本身提供了一套数据库操作标准,并针对每个数据库厂商提供专有的驱动程序接口。
1)JDBC-ODBC桥驱动:
2)纯Java驱动:
3)JDBC网络驱动:
4)本地协议纯JDBC驱动:
JDBC驱动4种分类详解
二:JDBC连接数据库
1)JDBC操作步骤
(1)加载并注册驱动程序
使用class.forName()方法将指定的类加载到Java虚拟机中,若指定类不存在时则产生异常。(前提要手动把驱动包加入到项目中)
class.forName("JDBC驱动名称");
(2)与数据库建立连接
DriverManager类跟踪已注册的驱动程序,调用getConnection()方法时将查找整个驱动程序列表,加载数据连接字符串指定的数据库驱动程序,并建立与数据库的连接。该方法提供三个参数分别表示url、用户名和密码。
Connection con=DriverManager.getConnection("数据连接字符串","用户名","密码");
(3)创建操作对象,发送sql语句
使用Connection创建Statement操作对象,并将sql语句传送给所需要连接的数据库,若sql语句为查询,则返回类型为Resultset对象
Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery("select * from tab_");
(4)处理结果
使用ResultSet对象的next()方法将结果集光标只想下一行。ResultSet光标默认位于结果集第一行之前,因此首次调用next()方法时光标将被定为在结果集的第一行。光标位于结果集的最后一行也就是末尾时,ResultSet的next()方法将返回false。getxxx()方法可以获取当前行的某列数据。
while(rst.next()){
int id=rst.getInt("id");
String name=rst.getString("name");
}
(5)关闭连接
con.close();
2)JDBC连接数据库步骤
1)配置数据库驱动程序
实际应用中一般采用纯Java驱动的方式连接数据库,首先需要导入你需要用到的驱动包。
2)加载驱动程序
比如你导入了sqlserver的驱动包那么你的驱动程序路径就应该如下:
com.microsoft.sqlserver.jdbc.SQLServerDriver
若加载后的驱动程序出现java.lang.classnotfoundexception异常,说明此驱动程序的路径位置不正确。
3)连接及关闭数据库
数据库驱动程序正确加载后,接下来要做的就是使用DriverManager类连接数据库。
DriverManager类常用的方法
public static Conncetion getConnection(String urk,String user,String ppassword)throws SQLexecption |
根据提供的数据库地址、用户名、密码建立与数据库的连接 |
加载完成驱动后就需要提供数据库的具体连接地址,不同的数据库有不同的连接地址。
连接地址格式:
jdbc:sqlserver://ip地址:端口号;Databasename=“数据库名称”;
若果是连接本地:ip可改为localhost:端口号;
Connection接口的常用方法
返回类型 |
方法名称 |
描述 |
Statement |
createStatement() |
创建Statement对象 |
PreparedStatement |
prepareStatement(String sql) |
创建preparedStatement对象 |
CallableStatement |
prepareCall(String sql) |
执行存储过程 |
vid |
setAutoCommit(boolean flag) |
设置数据库是否自动提交 |
void |
rollback() |
回滚数据库操作 |
void |
commit() |
提交事务 |
void |
close() |
关闭数据库连接 |
boolean |
isClosed() |
判断连接是否已关闭 |
三:Statement接口
数据库连接后可以使用Statement接口进行具体操作,该接口引用指向Connection接口提供的createStatement()方法获得。
createStatement()的常用方法
返回类型 |
方法名称 |
描述 |
int |
executeUpdate(String sql) |
执行数据库更新sql语句:insert、update、delte。并返回更新的记录数 |
ResultSet |
executeQuery(String sql) |
执行数据库查询操作,返回结果集对象 |
boolean |
execute(String sql) |
执行sql语句,返回执行结果true、false |
void |
close() |
关闭statement操作 |
package com.Connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Test {
private static final String DRIVER="com.mysql.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost/mytest";
public static void main(String[] args) {
Connection con=null;
Statement sta=null;
try {
Class.forName(DRIVER);
con=DriverManager.getConnection(URL, "root", "123456");
sta=con.createStatement();
sta.execute("insert into test values('4','tom')");
sta.close();
String tname="mack";
sta=con.createStatement();
String sql="update test set tname='"+tname+"'where tid="+2;
sta.execute(sql);
sta.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:操作中分别先关闭了statement和Connection。一般连接关闭后其他所有操作均将被关闭,但实际开发中,建议先关闭所有对象且采用先打开后关闭的方式。所以先关闭statement,之后再关闭Connction。
四:ResultSet接口
1)resultSet简介:数据库的更新操作insert、update、delete均可以直接使用statement接口中的executeUpdate()方法完成。而数据库的查询操作,则使用statement接口中的executeQuery()方法,该方法返回类型为ResuletSet。JDBC中数据库的所有查询记录使用ResultSet接收并显示内容。
ResultSet常用方法
返回类型 |
方法名称 |
描述 |
boolean |
next() |
将指针指到下一行 |
int |
getInt(int columnIdex) |
以整数形式按列的编号取得指定列的内容 |
int |
getInt(String columnname) |
以整数形式取得指定列的内容 |
string |
getString(int columnIndex) |
以字符串形式按列的编号取得指定列的内容 |
string |
getString(String columnName) |
以字符串形式取得指定列的内容 |
2)ResulSet应用
package com.Connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test {
private static final String DRIVER="com.mysql.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost/mytest";
public static void main(String[] args) {
Connection con=null;
Statement sta=null;
ResultSet rst=null;
try {
Class.forName(DRIVER);
con=DriverManager.getConnection(URL, "root", "123456");
sta=con.createStatement();
rst=sta.executeQuery("select * from test");
while(rst.next()){
System.out.println(rst.getInt(1));//获取的tid是int类型。1表示第一列
System.out.println(rst.getString(2));//获取的tname是String类型。2表示第二列的数据类型
//可以将以上的获取方式该为通过列名获取
System.out.println(rst.getString("tid"));//通过列名获取数据
System.out.println(rst.getString("tname"));//通过列名获取数据
}
rst.close();
sta.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
五:PreparedStatemnt接口
1)PreparedStatement简介:
PreparedStatement接口继承自Statement接口,其使用更为灵活高效。该接口实例包含已编译的、具有输入参数的sql语句。Sql语句中输入参数的值,创建时未被指定,而是保留?作为占位符。
try {
Class.forName(DRIVER);
con=DriverManager.getConnection(URL, "root", "123456");
String sql="insert into test values(?,?)";
pst=con.prepareStatement(sql);
pst.setInt(1, 5);
pst.setString(2, "xxx");
pst.execute();
pst.close();
con.close();
System.out.println("添加成功!");
} catch (Exception e) {
// TODO: handle exception
}
PreparedStatement和Statement都可以对数据库进行操作。但PreparedStatement语句可以进行预编译,再次执行相同的sql语句时数据库端不在进行编译,故其性能较高,在开发中建议使用PreparedStatement。