JDBC思考感悟(上)

很多人在学习java的时候很容易忽略JDBC这一块,本篇就来详细深入的了解什么是JDBC。

1.什么是JDBC?

最直观的的回答是JDBC是java封装好的api,用来连接数据库服务。你可以通过调用接口来实现获取数据库的内容。

2.JDBC的组成部分?

**·**JDBC驱动程序管理器
**·**JDBC驱动程序测试工具包
**·**JDBC-ODBC桥

a.JDBC驱动程序管理器的主要作用是把java应用程序连接到正确的JDBC驱动程序上。

b.驱动程序测试工具包为JDBC驱动程序的运行提供一定的可信度,只有通过JDBC驱动程序测试包的驱动程序才被认为是符合JDBC标准的。

c.JDBC-ODBC桥的使ODBC驱动程序可以被用作JDBC驱动程序,其目标是为了方便实现访问某些不常见的数据库管理系统。

3.JDBC驱动的过程?

JDBC驱动程序实现JDBC API中定义的接口,用于与数据库服务器进行交互。JDBC驱动程序可以打开数据库连接,并通过发送SQL或数据库命令,然后再收到结果与java进行交互。

4.JDBC连接数据库的步骤?

1.导入JDBC驱动:只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤。

2.注册JDBC驱动程序:这一步会导致JVM加载所需的驱动程序实现到内存中,因此他可以实现JDBC请求。

方法1—-Class.forName():这个是最常用的方法来动态加载驱动程序的类文件到内存中,它会自动将其注册。

方法2—-DriverManager.registerDriver():

Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);

3.数据库URL制定:创建具有正确格式的地址,指向到要连接的数据库。

4.创建连接对象:最后,代码调用DriverManager对象的getConnection()方法来建立世纪的数据库连接。

#一般使用的方法为getConnection(),该方法有三个带参数的重载方法。

4.JDBC接口

在 JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送 SQL 或 PL/SQL 命令和从数据库接收数据。

4.1三个主要接口

a.Statement

我们要使用 Statement 接口,第一步肯定是创建一个 Statement 对象了。我们需要使用 Connection 对象的 createStatement() 方法进行创建。

boolean execute(String SQL):如果 ResultSet 对象可以被检索返回布尔值 true,否则返回 false。使用这个方法来执行 SQL DDL 语句,或当需要使用真正的动态 SQL

int executeUpdate(String SQL):用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQLDDL(数据定义语言)语句。返回值是一个整数,指示受影响的行数(即更新计数)

ResultSet executeQuery(String SQL):返回 ResultSet 对象。用于产生单个结果集的语句,例如 SELECT 语句

b. PreparedStatement

PreparedStatement 接口扩展了 Statement 接口,有利于高效地执行多次使用的 SQL 语句。我们先来创建一个 PreparedStatement 对象。 Statement 为一条 SQL 语句生成执行计划。如果要执行两条 SQL 语句,会生成两个执行计划。一万个查询就生成一万个执行计划!  

c.CallableStatement

CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用存储过程的方法。存储过程储存在数据库中。对储存过程的调用是 CallableStatement 对象所含的内容。三种类型的参数有:IN,OUT和INOUT。PreparedStatement对象只使用IN参数。 CallableStatement对象可以使用所有三个

IN:它的值是在创建 SQL 语句时未知的参数,将 IN 参数传给 CallableStatement 对象是通过 setXXX() 方法完成的

OUT:其值由它返回的 SQL 语句提供的参数。从 OUT 参数的 getXXX() 方法检索值

INOUT:同时提供输入和输出值的参数,绑定的 setXXX() 方法的变量,并使用 getXXX() 方法检索值

CallableStatement cstmt = null;
try {
String SQL = "{call getEXAMPLEName (?, ?)}";
cstmt = conn.prepareCall (SQL);
. . .
}
catch (SQLException e) {
. . .
}
finally {
cstmt.close();
}

5.JDBC结果集

结果集通常是通过执行查询数据库的语句生成,表示数据库查询结果的数据表。ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。光标可以方便我们对结果集进行遍历。默认的 ResultSet 对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

ResultSet接口的方法可分为三类:

·导航方法:用于移动光标
·获取方法:用于查看当前行的光标所指向的列中的数据
·更新方法:用于更新当前行的列中的数据

createStatement(int RSType, int RSConcurrency);//RSType 表示 ResultSet 对象的类型,RSConcurrency 是 ResultSet 常量,用于指定一个结果集是否为只读或可更新。如果不指定 ResultSet 类型,将自动获得一个是 TYPE_FORWARD_ONLY。

prepareStatement(String SQL, int RSType, int RSConcurrency);

prepareCall(String sql, int RSType, int RSConcurrency);

如初始化一个 Statement 对象来创建一个双向、可更新的ResultSet对象:`try {

Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}
catch(Exception ex) {
….
}
finally {
….
}`

结果集中有很多方法,可自行查看API

你可能感兴趣的:(数据库)