您所在的位置: 懿橙集客 > 网络 > 正文
  • jdbc直接执行SQL(JDBC实现直接操作SQL语句)

  • 网络
  • 懿橙集客用户
  • 2023-08-27T09:25:07
JDBC实现直接操作SQL语句

什么是JDBC直接执行SQL

JDBC直接执行SQL语句是指在Java程序中,通过JDBC API直接执行SQL语句,而不是通过预编译或调用存储过程来操作数据库。

这种方式可以更加灵活地操作数据库,对于一些简单的数据操作,特别是对于数据量不大的场合,使用JDBC直接执行SQL语句非常方便,效率也相对较高。

JDBC直接执行SQL语句需要至少具备以下三个条件:

1.已经连接到数据库,并且保证当前连接在非自动提交状态下;

2.已经创建了一个Statement对象;

3.已经准备好了要执行的SQL语句。

如下是JDBC直接执行SQL语句的示例代码:

```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcDirectSqlDemo { public static void main(String[] args) { // 数据库连接参数 String url = \"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8\"; String username = \"root\"; String password = \"root\"; // SQL语句 String sql = \"INSERT INTO user(name,age) VALUES('张三',18)\"; // 创建连接 Connection conn = null; try { // 加载数据库驱动 Class.forName(\"com.mysql.jdbc.Driver\"); // 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 设置事务手动提交 conn.setAutoCommit(false); // 创建Statement对象 Statement stmt = conn.createStatement(); // 执行SQL语句 int result = stmt.executeUpdate(sql); // 提交事务 conn.commit(); System.out.println(\"成功插入\" + result + \"条数据\"); } catch (Exception e) { e.printStackTrace(); try { // 出现异常回滚事务 conn.rollback(); } catch (Exception e1) { e1.printStackTrace(); } } finally { // 关闭数据库连接 try { if (conn != null) { conn.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } } ```

该示例代码通过JDBC直接执行SQL语句向数据库中插入一条数据,可以看到程序执行效果如下:

```java 成功插入1条数据 ```

通过该示例代码可以发现,JDBC直接执行SQL语句非常简单,只需要调用Statement对象的executeUpdate()方法即可执行SQL语句。

对于一些数据量较大或者需要进行复杂数据操作的场合,使用JDBC直接执行SQL语句就显得不太灵活和方便了,这时候我们就需要使用预编译和存储过程等技术来操作数据库。

什么是预编译操作

预编译操作是指在Java程序中将SQL语句编译成具有特定格式的语句,并且保留占位符,然后通过设置占位符的参数来执行SQL语句。

与JDBC直接执行SQL语句相比,预编译操作可以更加安全、方便、高效地操作数据库。

SQL语句预编译的过程分为以下几个步骤:

1.通过Connection对象的prepareStatement()方法创建PreparedStatement对象;

2.设置SQL语句,以占位符的形式指定参数;

3.为占位符设置参数值;

4.使用PreparedStatement对象的execute()方法执行SQL语句。

如下是预编译操作的示例代码:

```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcPrepareStatementDemo { public static void main(String[] args) { // 数据库连接参数 String url = \"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8\"; String username = \"root\"; String password = \"root\"; // SQL语句 String sql = \"SELECT * FROM user WHERE id = ?\"; // 创建连接 Connection conn = null; try { // 加载数据库驱动 Class.forName(\"com.mysql.jdbc.Driver\"); // 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 创建PreparedStatement对象 PreparedStatement pstmt = conn.prepareStatement(sql); // 设置占位符的参数 pstmt.setInt(1, 1); // 执行SQL语句 ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(\"id:\" + rs.getInt(\"id\") + \",name:\" + rs.getString(\"name\") + \",age:\" + rs.getInt(\"age\")); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭数据库连接 try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ```

该示例代码通过预编译操作查询数据库中id=1的数据,可以看到程序执行效果如下:

```java id: 1, name: 张三, age: 18 ```

通过该示例代码可以发现,预编译操作可以避免SQL注入等安全问题,而且能够提高SQL语句的执行效率,特别是对于需要反复执行的SQL语句,预编译可以大大提高数据库操作的效率。

什么是存储过程

存储过程是指在数据库中创建的一种事先定义好的SQL语句集合,并且该SQL语句集合可以通过特定的名称供程序重复调用。

存储过程与JDBC直接执行SQL语句和预编译操作的区别在于,存储过程将不会返回数据给程序,而是直接在数据库中执行所需的操作,并且在当前会话结束时返回结果。

存储过程可以带有参数,也可以不带参数,可以执行任意复杂的数据操作,特别是对于需要执行多个SQL语句的场合,存储过程的效率比JDBC直接执行SQL语句和预编译操作要高。

如下是存储过程的示例代码:

```sql DELIMITER $$ DROP PROCEDURE IF EXISTS test_procedure; CREATE PROCEDURE test_procedure(IN arg1 VARCHAR(255), IN arg2 INT) BEGIN INSERT INTO user(name, age) VALUES(arg1,arg2); END $$ DELIMITER ; ```

该存储过程可以向user表中插入一条数据,1个字符串类型的参数和1个整数型参数是必须加上的。

如下是通过Java程序调用存储过程的示例代码:

```java import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Types; public class JdbcCallableStatementDemo { public static void main(String[] args) { // 数据库连接参数 String url = \"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8\"; String username = \"root\"; String password = \"root\"; // SQL语句 String sql = \"{CALL test_procedure(?,?)}\"; // 创建连接 Connection conn = null; try { // 加载数据库驱动 Class.forName(\"com.mysql.jdbc.Driver\"); // 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 创建CallableStatement对象 CallableStatement cst = conn.prepareCall(sql); // 设置参数 cst.setString(1, \"李四\"); cst.setInt(2, 20); // 执行存储过程 cst.execute(); System.out.println(\"存储过程执行成功\"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } } ```

通过该示例代码可以发现,存储过程可以通过CallableStatement对象来执行,将参数设置在CallableStatement对象的对应位置,然后通过execute()方法执行存储过程。

同时,存储过程还支持返回参数,例如在调用存储过程时,可以通过CallableStatement对象的registerOutParameter()方法注册返回参数,并且可以通过getXXX()方法获取返回参数值。

综上所述,JDBC直接执行SQL语句、预编译操作和存储过程都是Java程序操作数据库的重要方式,针对不同的数据操作场景选择合适的方式是非常必要的。

相关资讯

jdownloader(JDownloader 2:免费下载神器)

JDownloader 2:免费下载神器 JDownloader 2是一款免费的下载管理软件,拥有极为强大的下载功能和用户友好的界面,深受广大用户的喜爱

网络| 2023-08-27

jdbc直接执行SQL(JDBC实现直接操作SQL语句)

JDBC实现直接操作SQL语句 什么是JDBC直接执行SQL JDBC直接执行SQL语句是指在Java程序中,通过JDBC API直接执行SQL语句,而不是通过预

网络| 2023-08-27

jamiedimon(Jamie Dimon Leading JPMorgan Chase into the Future)

Jamie Dimon: Leading JPMorgan Chase into the Future Since his appointment as CEO of JPMorgan Chase in 2005, Jamie Dimon

网络| 2023-08-27

jackwalk(Jack's Journey A Story of Adventure and Self-Discovery)

Jack's Journey: A Story of Adventure and Self-Discovery As I set out on my journey, I had no idea what was in store for

网络| 2023-08-27

i排版编辑器app(i排版神器——让排版更简单易行)

i排版神器——让排版更简单易行 排版是每个编辑者都必不可少的任务之一,不管是写文章还是发表论文,整洁的排版都是加分的必要条件。

网络| 2023-08-27

ix25报价及图片(Hyundai ix25 - The Perfect Combination of Style and Performance)

Hyundai ix25 - The Perfect Combination of Style and Performance The Hyundai ix25, also known as the Creta in some market

网络| 2023-08-27