用 JDBC 读取和更新数据
概述
在本末节中,将进修怎样运用 Statement
和 PreparedStatement
JDBC 东西,这些东西吐露体现 JDBC 中的 SQL 语句。还将进修怎样运用 JDBC ResultSet
东西,这个东西是由包孕 SQL 盘问的 Statement
和 PreparedStatement
东西前往的。
Statement 东西
Statement
东西是运用 Connection.createStatement()
要领创立的。例如:
Statement stmt; ... stmt = con.createStatement();
为了实施 Statement
东西中的 INSERT
、UPDATE
或 DELETE
语句,要将一个带有语句的字符串传递给 Statement.executeUpdate()
要领。例如:
stmt.executeUpdate("DELETE FROM EMPLOYEE WHERE EMPNO = '000099'");
为了运用 Statement
东西实施盘问,要将带有 SELECT
语句的字符串传递给 Statement.executeQuery()
要领,而且检索 ResultSet
东西。例如:
ResultSet rs; rs = stmt.executeQuery("SELECT EMPNO, LASTNAME FROM EMPLOYEE");
为体会析 ResultSet
东西,必须起首运用 ResultSet.next()
要领读取每一行。然后在每次读取之后,运用合适该数据典范的要领(例如 ResultSet.getInt()
)检索列值。
rs = stmt.executeQuery("SELECT LASTNAME, BIRTHDATE FROM EMPLOYEE"); while (rs.next()) { System.out.println(rs.getString(1) ", " rs.getDate(2)); }
回页首
Statement 东西:示例代码
下列运用程序演示在前一末节中联系的十足看法:
- 创立
Statement
东西 - 实施
INSERT
、UPDATE
或DELETE
语句 - 实施 SQL 盘问
- 分解
ResultSet
东西
这个运用程序向 Employee 表中拔出一条雇员记载,然后对这个表运转一个盘问,苦求得到每一条记载的雇员编号和雇员姓氏。
//StmtDb.java import java.sql.*; >
为了编译以上文件(名为 StmtDb.java),要实施下列命令:
javac StmtDb.java
为了运转已编译好的运用程序,要实施下列命令:
java StmtDb
这个运用程序的输出应该如下所示:
Employee # Employee surname 000010 HAAS 000020 THOMPSON 000030 KWAN 000050 GEYER 000060 STERN 000070 PULASKI 000090 HENDERSON 000100 SPENSER 000110 LUCCHESSI 000120 O'CONNELL 000130 QUINTANA 000140 NICHOLLS 000150 ADAMSON 000160 PIANKA 000170 YOSHIMURA 000180 SCOUTTEN 000190 WALKER 000200 BROWN 000210 JONES 000220 LUTZ 000230 JEFFERSON 000240 MARINO 000250 SMITH 000260 JOHNSON 000270 PEREZ 000280 SCHNEIDER 000290 PARKER 000300 SMITH 000310 SETRIGHT 000320 MEHTA 000330 LEE 000340 GOUNOT 200010 HEMMINGER 200120 ORLANDO 200140 NATZ 200170 YAMAMOTO 200220 JOHN 200240 MONTEVERDE 200280 SCHWARTZ 200310 SPRINGER 200330 WONG 200340 ALONZO 000099 DEROOS
回页首
PreparedStatement 东西
PreparedStatement
东西是运用Connection.prepareStatement()
要领创立的。例如:
PreparedStatement stmt; ... stmt = con.prepareStatement();
议决运用
PreparedStatement
东西,可以静态地准备和实施 SQL 语句。议决从新绑定 SQL 语句中参数标志的值,可以用分比如的值频频实施相反的语句。(参数标志是由?
吐露体现的,它充任一个在运转时截至赋值的值的占位符)。例如:
pStmt = con.prepareStatement("UPDATE STAFF SET COMM=? WHERE ID=?"); pStmt.setDouble(1,710.53); pStmt.setInt(2,350); pStmt.executeUpdate(); pStmt.setDouble(1,710.53); pStmt.setInt(2,350); pStmt.executeUpdate();
关于参数标志的更多信息,请阅读本系列中的第 8 篇文章(拜见 参考材料 一节)。
回页首
PreparedStatement 东西:示例代码
下列运用程序演示在前一末节中联系的十足看法:
- 创立
PreparedStatement
东西。 - 运用参数标志静态地指派 SQL 语句中的值。
这个运用程序分解一个由称号和义务头衔组成的数组。关于每个数组项,它向 staff 表中拔出一条记载。
//pStmtDb.java import java.sql.*; >
为了编译以上文件(名为 pStmtDb.java),要实施下列命令:
javac pStmtDb.java
为了运转已编译好的运用程序,要实施下列命令:
java pStmtDb
这个运用程序的输出应该如下所示:
Employee # Employee surname 401 Smyth 402 Hemsky 403 Horcoff
回页首
提交事故
在
Statement
和PreparedStatement
示例代码中,运用了两种分比如的要领来提交事故:自动提交(autocommit)和手工提交(manual commit)。
在
Statement
示例中所运用的要领是自动提交,即自动提交每个语句。自动提交是从Connection
东西启用的,命令如下:
con.setAutoCommit(true);
与从前的版天职比如,在启用自动提交的形态下,假如实施
Connection.Commit()
或Connection.Rollback()
,IBM DB2 通用 JDBC 和 SQLJ 驱动程序的 DB2 9 版本就会抛出非常。
PreparedStatement
示例中所运用的要领是手工提交。在这种要领中,要么手工提交每条语句,要么回滚每条语句。假如运用程序末端未提交语句,这些语句将自动回滚。手工提交或回滚操作是由Connection
东西来实施的,如下:
con.commit(); ... con.rollback();
回页首
实施分布式事故
为了从 Java 运用程序实施分布式事故,需求运用 Java Transaction API(JTA)。(分布式事故也称作两阶段提交事故,这些事故将更新多个数据库中的数据。)JTA 典范是 Java 2 Platform,Enterprise Edition(J2EE)标准的事故操持组件。
在 DB2 中,分布式事故是议决
DB2XADataSource
类操持的,该类完成javax.sql
包中的XADataSource
接口。
关于 DB2 9,在 IBM DB2 通用 JDBC 和 SQLJ 驱动程序和 DB2 JDBC Type 2 驱动程序中都供应了 JTA 支持。下列 Java 代码运用 IBM DB2 通用 JDBC 和 SQLJ 驱动程序创立
DB2XADataSource
类的一个实例:
DB2XADataSource db2ds = new com.ibm.db2.jcc.DB2XADataSource();
版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始情由 、作者信息和本声明。不然将深究司法责任。