A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大蓝鲸Java 中级黑马   /  2018-11-2 11:46  /  497 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JDBC详解


MySQL只能识别SQL语句,我们用Java代码不能直接操作,而JDBC的出现就解决了这一难题。而JDBC在开发中出现的身影是非常多的,比如我们目前最为常用的框架Mybatis,底层就是基于JDBC,所以我们必须要对JDBC有较深的了解。


一、JDBC的步骤:

1,加载驱动。



2,获得连接。



3,获得执行者对象。


4,执行sql语句。


5,处理结果集。


6,释放资源。

原生的JDBC上面的6步缺一不可。

只不过针对于增删改而言,结果集只是一个int值,表示受影响的行数。针对于查询来讲,结果集才有丰富的意义,表示我们查询到的所有的数据。




二、分步介绍:
Connection

Connection表示与特定数据库的连接,可以获取到数据库的一些信息,这些信息包括:其表信息,应该支持的SQL语法,数据库内有什么存储过程,此链接功能的信息等等。在这个地方我们要注意一点就是如果想要对数据库进行事务处理,那么是通过连接对象开启的。

Statement

Statement 的功能在于根据传入的sql语句,将传入sql经过整理组合成数据库能够识别的sql语句(对于静态的sql语句,不需要整理组合;而对于预编译sql语句和批量语句,则需要整理),然后传递sql请求,之后会得到返回的结果。对于查询sql,结果会以ResultSet的形式返回。

要注意的是,针对于sql语句不同,我们用Statement调用的方法也是不一样的。executeQuery(String sql):该方法只能用于查询,返回一个ResultSet的结果集。
executeUpdate(String sql):该方法可以用户增删改,返回一个int,表示受影响的行数。除此之外,如果需要处理多条语句,还有一个批处理的功能。addBatch(String sql)。但是要注意的是这个方法的sql语句顺序不能上下颠倒,sql语句先添加的先执行。

ResultSet

当Statement查询sql执行后,会得到ResultSet对象,ResultSet对象是sql语句查询的结果,作为数据库结果的映射,其映射关系如下图所示。ResultSet对从数据库返回的结果进行了封装,使用迭代器的模式逐条取出结果集中的记录。

三,具体实现案例:
DBConnection {
static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
static final String USER_NAME ="louluan";
static final String PASSWORD = "123456";
public static void main(String[] args) {
connectionTest();
}
public static void connectionTest(){
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//1.加载类,并注册驱动器(Driver会注册到DriverManager中)
//加载Oracle数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//2.根据特定的URL,返回可以接受此URL的数据库驱动对象
Driver driver = DriverManager.getDriver(URL);
Properties props = new Properties();
props.put("user", USER_NAME);
props.put("password", PASSWORD);
//3.使用数据库驱动创建数据库连接Connection会话
connection = driver.connect(URL, props);
//4.获得Statement对象
statement = connection.createStatement();
//5.执行 sql语句,返回结果
resultSet = statement.executeQuery("select * from hr.employees");
//6.处理结果,取出数据
while(resultSet.next())
{
System.out.println(resultSet.getString(2));
}
//7.关闭链接,释放资源
} catch (ClassNotFoundException e) {
System.out.println("加载Oracle类失败!");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto‐generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto‐generated catch block
e.printStackTrace();
}finally{
//使用完成后管理链接,释放资源,释放顺序应该是: ResultSet ‐>Statement ‐>Connection
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
四,JDBC思想。
JDBCJava提供的一个接口,在这些接口中规定了一些方法,但是这些方法中并没有给出具体的方法实现。
而这些方法的实现是由数据库生成厂商自己提供的。这样,我们在学习的时候,只要学习一套
Java提供的规范接
口,就可以任意操作
MySQLoracleSQLServer 等不同的数据库了,而不需要关心底层的实现细节。
e.printStackTrace();
}
}
}
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马