java开发sql更新数据_JTOpen jdbcClient –简化Java SQL开发

从7.6版开始,JTOpen(7.6版和更高版本)包括一个简单的JDBC客户端程序jdbcClient ,以简化JDBC和SQL开发人员的工作。 jdbcClient是仅使用Java实现的命令行客户端,可以从具有Java虚拟机(JVM)的任何平台上运行。 使用jdbcClient程序,您可以轻松连接到数据库并运行SQL语句。 对于大多数Java开发人员而言,这比启动另一个程序(例如System i Navigator的Run SQL脚本)要容易。 使用此客户端,您可以快速查看运行特定SQL语句的结果,并可以尝试复杂的JDBC方法,而无需编写和编译Java程序。

要使用jdbcClient ,您只需将JDBC驱动程序的.jar文件添加到类路径中,并为要连接的数据库服务器指定JDBC URL。 连接到数据库服务器后,您可以对该服务器执行SQL命令。 jdbcClient还允许使用JDBC PreparedStatements将各种参数类型传递给数据库。 作为增强的开发人员工具, jdbcClient还允许使用反射来涉及Java和JDBC对象上的方法。

连接到数据库

jdbcClient包含在JTOpen的jt400.jar文件中,名为com.ibm.as400.access.jdbcClient.Main。 要使用客户端,请启动Main程序并将3个参数传递给该程序:JDBC URL,用户ID和密码。 JDBC URL是Java的DriverManager.getConnection方法接受的JDBC URL。 因为测试程序接受JDBC URL,所以它可以使用JTOpen JDBC驱动程序以外的其他JDBC驱动程序,只要它们包含在类路径中即可。

要在Microsoft®Windows®或Linux®平台上使用JTOpen驱动程序连接到i®的IBM®DB2® ,只需在类路径上使用jt400.jar启动jdbcClient ,然后添加JDBC URL,用户ID和密码。

java –cp jt400.jar com.ibm.as400.access.jdbcClient.Main jdbc:as400:SYSTEM USERID PASSWORD

您还可以通过从Qshell解释器(qsh)启动客户机来使用本机JDBC驱动程序连接到i2。 在这种情况下,您再次需要将jt400.jar添加到类路径,但是在这种情况下,可以从系统的出厂位置加载它。 您不需要为本地JDBC驱动程序添加.jar文件,因为它已在Java扩展类路径中找到。 使用本地JDBC驱动程序连接到本地系统时,无需在连接请求上指定用户ID和密码。 如果未指定用户ID,则本机JDBC驱动程序将使用当前用户ID进行连接。

java –cp /QIBM/ProdData/OS400/JT400/lib/jt400.jar com.ibm.as400.access.jdbcClient.Main jdbc:db2:localhost

您还可以使用来自IBMAIX®,Windows或Linux系统的IBM DB2 Connect™JDBC驱动程序连接到i for DB2。 在这种情况下,您的类路径必须包含jt400.jar以及驱动程序的JAR文件:db2jcc4.jar和db2jcc_license_cisuz.jar。 在这种情况下,JDBC URL的格式为jdbc:db2:// SYSTEM:446 / * LOCAL,其中SYSTEM是系统名称 ,446是IBM i上服务器端口 ,而* LOCAL表示本地数据库是要使用的。

java –cp jt400.jar:db2jcc4.jar:db2jcc_license_cisuz.jar 
com.ibm.as400.access.jdbcClient.Main jdbc:db2://SYSTEM:446/*LOCAL USERID PASSWORD

您也可以连接到DB2 for i以外的数据库。 在Linux上运行时,可以通过在类路径中包括mysql.jar并使用jdbc:mysql JDBC URL连接到MySQL数据库。

java –cp jt400.jar: mysql.jar com.ibm.as400.access.jdbcClient.Main
jdbc:mysql://localhost/DATABASE USERID PASSWORD

jdbcClient是有用的工具,可用于使用各种JDBC驱动程序连接到各种数据库系统。

运行简单的语句

连接后, jdbcClient将提供一个命令提示符,用于输入SQL语句和其他命令。 此提示假定所有内容都是SQL命令,但以'!'开头的jdbcClient命令除外。

这是对DB2 i服务器运行各种SQL语句以创建表,将数据插入表中,从表中检索数据以及调用存储过程的示例。

>java -cp jt400.jar com.ibm.as400.access.jdbcClient.Main jdbc:as400:SYSTEM UID PWD 
>create table sample(c1 int, c2 varchar(80)) 
>insert into sample values(1,'abc')
>select * from sample
C1,C2
1,abc
>call sysibm.sqltables(null,null,'SAMPLE',null,null)

*** Warning *** 

SQLState: 0100C 
Message: [SQL0466] 1 result sets are available from procedure SQLTABLES in SYSIBM. 
Vendor: 466

TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
SYSTEM,UID,SAMPLE,TABLE,null

从上面可以看出, jdbcClient的查询输出非常简单,仅使用逗号分隔输出列。 输出的第一行包含列名,其余的行包含输出数据。 jdbcClient还显示遇到的警告,如上面的SQL0466警告所示。

可以在call语句后使用—INPARM将参数传递给存储过程调用。 这是使用此语法调用过程的示例。

>call sysibm.sqltables(null,null,?,null,null) -- INPARM SAMPLE 

*** Warning ***
SQLState: 0100C 
Message: [SQL0466] 1 result sets are available from procedure SQLTABLES in SYSIBM. 
Vendor: 466 

TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
SYSTEM,UID,SAMPLE,TABLE,null

jdbcClient识别到存储过程返回了一个结果集,并显示了该结果集的内容。

使用准备好的语句

使用jdbcClient客户端命令,您还可以运行Java应用程序中常用的准备好的语句。 准备好的语句通常与参数标记一起使用,参数标记允许每次运行语句时更改参数。 使用准备好的语句通常包括三个部分:准备语句,设置参数和运行语句。

!PREPARE命令用于准备语句。 !SETPARM命令用于设置参数。 !EXECUTEUPDATE!EXECUTEQUERY命令用于运行准备好的语句。 这是一个使用准备好的语句将数据插入表中的示例。

>!PREPARE insert into sample values(?,?) 
>!SETPARM 1,10 
>!SETPARM 2,insert1 
>!EXECUTEUPDATE 
>!SETPARM 1,10 
>!SETPARM 2,insert2 
>!EXECUTEUPDATE 
>select * from sample where c1=10
C1,C2
10,insert1
10,insert2

在此示例中,将两行添加到表中,然后运行查询以说明实际上已插入数据。

对于!SETPARM命令,支持多种数据类型。 下表显示了各种类型。

表1.!SETPARM命令支持的数据类型
句法 描述
UX'....' Unicode字符串(十六进制)
X'....' 字节数组(十六进制)
FILEBLOB = <文件名> 从命名文件中检索到的二进制大对象(BLOB)
FILECLOB = <文件名> 从命名文件中检索的字符大对象(CLOB)
SAVEDPARM = <编号> 来自上一个CALL语句的参数
SQLARRAY [TYPE:e1:e2:...] JAVA.SQL.ARRAY类型:支持的类型有:
String:BigDecimal:Time:Blob:Clob:int:short:
long:float:double:byteArray

这是使用某些各种类型的示例。

>!PREPARE select cast(? AS VARGRAPHIC(40) CCSID 1200) from sysibm.sysdummy1
>!SETPARM 1,UX'0233' 
>!EXECUTEQUERY 
00001 
U'0233'

>!PREPARE select cast(? AS VARBINARY(10)) from sysibm.sysdummy1 
>!SETPARM 1,X'aa' 
>!EXECUTEQUERY
00001 
aa 

>!PREPARE select cast(? AS BLOB),cast(? AS CLOB) from sysibm.sysdummy1
>!PREPARE select cast(? AS BLOB),cast(? AS CLOB) from sysibm.sysdummy1 
>!SETPARM 1,FILEBLOB=file.txt 
>!SETPARM 2,FILECLOB=file.txt 
>!EXECUTEQUERY 
00001,00002
5468697320697320612066696c650a, This is a file

如上所示,使用U '符号显示了不可打印的Unicode字符。 任何二进制数据均显示为十六进制值。

使用反射

jdbcClient的一个吸引JDBC开发人员的独特功能是能够使用反射调用Java方法。 通过使用反射,对Java方法的调用不需要来自已编译的代码,而是可以动态解决的。 jdbcClient有三个使用反射的主要命令。 !CALLMETHOD命令用于调用静态方法或实例方法。 !SETVAR命令用于通过方法调用的结果设置变量。 jdbcClient维护引用Java对象的变量列表。 !SETNEWVAR命令用于调用构造函数以创建新对象。 以下是如何使用这些调用的示例。

>!CALLMETHOD java.lang.System.getProperty(java.version)
Call returned 1.6.0
>!CALLMETHOD CON.getCatalog()
Call returned MYSYSTEM 
>!SETVAR DMD=CON.getMetaData()
DMD=MYSYSTEM 
>!SETVAR DRS=DMD.getTables(null,null,SAMPLE,null)
DRS=CRSR0008
>!CALLMETHOD com.ibm.as400.access.jdbcClient.Main.dispResultSet(DRS)
TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS,TYPE_CAT,TYPE_SCHEM,TYPE_NAME,
        SELF_REFERENCING_COL_NAME,REF_GENERATION
MYSYSTEM,EBERHARD,SAMPLE,TABLE,null,null,null,null,null,null Call returned null
>!SETNEWVAR MYINT=java.lang.Integer(10) 
MYINT=10

在第一次调用中,将调用System.getProperty静态方法来获取java.version属性。 在第二个调用中,将调用现有CON对象上的getCatalog()方法。 !SETVAR命令用于从CON对象获取DatabaseMetaData对象,然后使用对getTables()的调用获取ResultSet 。 要显示结果集,请使用jdbcClient.Main类的静态方法dispResultSet 。 最后一个调用显示了java.lang.Integer对象的创建。

为了帮助使用分配给变量的对象, jdbcClient提供了!SHOWVARMETHODS命令。 不带任何参数调用时,此命令将显示已定义的变量。 这是使用此命令的示例。

>!SHOWVARMETHODS
Could not find variable
Valid variables are the following
DMD
STMT
MAIN
DRS
CON

与变量结合使用时, !SHOWVARMETHODS命令显示可以在对象上调用的方法。 例如,这是可以在CON JDBC连接对象上调用的方法的示例。

>!SHOWVARMETHODS CON
boolean equals(java.lang.Object)
int hashCode()
java.lang.String toString()
void clearWarnings() 
void close()
void commit() 
java.sql.Statement createStatement() 
java.sql.Statement createStatement(int,int) 
java.sql.Statement createStatement(int,int,int) 
boolean getAutoCommit()

反射的使用不仅限于JDBC对象。 您可以使用jdbcClient尝试各种Java对象。 首次使用Java类时,这对于无需编写和编译Java程序即可试验Java类的行为很有用。

附加功能

jdbcClient具有多种其他功能。 要查看可以做什么,只需使用jdbcClient !HELP命令。 这些功能包括在单独的线程中运行命令的能力,将命令重复指定次数的能力,查看输入命令历史记录的命令以及控制输出数据格式的命令。

Summary

如您所见,JTOpen命令行jdbcClient允许连接到JDBC驱动程序支持的任何数据库。 更重要的是, jdbcClient提供了一种通过JDBC运行SQL语句的简便方法。 它还为各种数据类型的准备好的语句和参数提供支持。 最后,它通过反射公开Java对象,从而允许动态调用Java方法。 jdbcClient提供了一种快速简便的方法来使用JDBC驱动程序及其连接的数据库,从而成为Java JDBC开发人员不可替代的工具。

资源资源


翻译自: https://www.ibm.com/developerworks/ibmi/library/i-jtopen-jdbc-client/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值