DB2 9 运用斥地(733 检验)认证指南,第 7 部分: Java 编程(4)

developerWorks








用 JDBC 读取和更新数据

概述

在本末节中,将进修怎样运用 StatementPreparedStatement JDBC 东西,这些东西吐露体现 JDBC 中的 SQL 语句。还将进修怎样运用 JDBC ResultSet 东西,这个东西是由包孕 SQL 盘问的 StatementPreparedStatement 东西前往的。

Statement 东西

Statement 东西是运用 Connection.createStatement() 要领创立的。例如:

Statement stmt;
...
stmt = con.createStatement();


为了实施 Statement 东西中的 INSERTUPDATEDELETE 语句,要将一个带有语句的字符串传递给 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 东西
  • 实施 INSERTUPDATEDELETE 语句
  • 实施 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







回页首



提交事故

StatementPreparedStatement 示例代码中,运用了两种分比如的要领来提交事故:自动提交(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();





版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始情由 、作者信息和本声明。不然将深究司法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1972828.html