JDBC常用的接口

本文详细阐述了Java SQL包中四个常用接口:Connection、Statement、PreparedStatement和CallableStatement的功能与使用方法,并强调了使用PreparedStatement接口的重要性以及存储过程的应用优势。

在 java.sql 这个包里面有几个常用的接口,在进行JDBC编程里面会经常用到。

Connection

Statement

PreparedStatement

CallableStatement

1、Connection接口,这个接口天天用,年年用,不用再说了。

2、Statement接口。

在各个论坛上的文章里面,经常看到别人写的代码,都是很不规范,甚至存在安全隐患。

如:他们会这样写:

Statement stat = con.createStatement();

ResultSet rs = stat.executeQuery("select * from TabName where userName='"+userName+"'");

有的甚至将这些代码写在JSP页面中,另偶实在困惑。

如果要这样回变量,怎么不用PreparedStatement这个接口呢。

用到此接口时,最好直接写出完整的SQL语句:

如:ResultSet rs = stat.executeQuery("select * from TableName");

如:ResultSet rs= stat.eecuteQuery("select count(*) from TableName");

3、PreparedStatement接口,非常常用的接口。

用法:

PreparedStatement ps = con.prepareStatement(strSql);

strSql中的问号代码所传的参数,有几个就传几个。而且要对应相应的类型。

如:

String strSql = "select * from TableName where userName=? and password=?";

PreparedStatement ps = con.prepareStatement(strSql);

ps.setString(1,"xxxxxxxx");

ps.setString(2,"yyyyyyyy");

ResultSet rs = ps.executeQuery();

这个接口所传的SQL命令是预编译的,所以速度方面比Statement这个接口要快得多。

4、CallableStatement接口。用来处理存储过程。

用法:

CallableStatement cs = con.prepareCall("{call 存储过程名(?,?,?...)}");

后面所还的括号是所传递的参数。如果没有则不用括号。

目前,大部份的JDBC编程都会用存储过程代替直接写SQL语句了。

如:

CallableStatement cs = con.prepareCall("{call prcSelectResult(?,?)}");

cs.setString(1,"TableName");

cs.setString(2,"*");

ResultSet rs = cs.executeQuery();

prcSelectResult的代码:

create proc prcSelectResult

@tabName varchar(50),

@colName varchar(50)

as

begin

declare @strSql varchar(600)

set @strSql = "select "+@colName+" from "+@tabName

exec (@strSql)

end

当然,这只是一个简单的例子。

可以看出,上面的几种数据库操作中,以存储过程方法最佳。因为存储过程在数据库中是预编译的,因此,他比PreparedStatement接口的预编译命令又高一筹。。

关于CallableStatement 接口和存储过程的介绍还会在以后的笔记中详细谈及。

JDBC(Java Database Connectivity)是 Java 提供的一种用于连接数据库并执行 SQL 操作的标准接口。它定义了一组 API,使应用程序能够与不同的数据库进行交互。以下是 JDBC 中的一些常用类和接口及其功能介绍。 ### 1. `java.sql.Driver` 接口接口是所有 JDBC 驱动程序必须实现的接口,提供给数据库厂商使用。不同数据库厂商提供各自的实现,例如: - Oracle:`oracle.jdbc.driver.OracleDriver` - MySQL:`com.mysql.jdbc.Driver` 在程序中不需要直接访问实现了 `Driver` 接口的类,而是由驱动程序管理器类 `java.sql.DriverManager` 负责调用[^1]。 ### 2. `java.sql.DriverManager` 类 这是 JDBC 的管理类,负责管理 JDBC 驱动程序,跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。如果要使用 JDBC 驱动程序,必须加载 JDBC 驱动程序并向 `DriverManager` 注册之后才能使用。加载和注册驱动程序通常使用 `Class.forName()` 方法完成[^3]。 ### 3. `java.sql.Connection` 接口 表示与数据库的连接。通过 `DriverManager.getConnection()` 方法获取连接对象。一个 `Connection` 对象代表一个物理连接会话,可以通过它创建 `Statement`、`PreparedStatement` 和 `CallableStatement` 对象来执行 SQL 语句。 ### 4. `java.sql.Statement` 接口 用于执行静态 SQL 语句并返回结果的对象。通过 `Connection.createStatement()` 方法获取。`Statement` 接口可以执行简单的 SQL 查询,但不支持参数化查询,容易受到 SQL 注入攻击。 ### 5. `java.sql.PreparedStatement` 接口 继承自 `Statement`,用于执行预编译的 SQL 语句。支持参数化查询,提高了安全性和性能。通过 `Connection.prepareStatement(String sql)` 方法获取。 ### 6. `java.sql.CallableStatement` 接口 继承自 `PreparedStatement`,用于调用数据库中的存储过程。通过 `Connection.prepareCall(String sql)` 方法获取。 ### 7. `java.sql.ResultSet` 接口 表示数据库查询的结果集。`ResultSet` 对象包含执行查询后返回的数据行,并提供方法用于遍历和读取这些数据。常见的操作包括 `next()`、`getString()`、`getInt()` 等。 ### 8. `java.sql.SQLException` 这是一个异常类,表示在数据库操作过程中发生的错误。所有 JDBC 方法都可能抛出 `SQLException`,因此需要在代码中进行捕获和处理。 ### 示例代码:JDBC 基本流程 ```java import java.sql.*; public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; try { // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接 Connection connection = DriverManager.getConnection(url, username, password); // 创建 Statement Statement statement = connection.createStatement(); // 执行查询 ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); // 处理结果集 while (resultSet.next()) { System.out.println("User ID: " + resultSet.getInt("id")); System.out.println("Username: " + resultSet.getString("username")); } // 关闭资源 resultSet.close(); statement.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值