- 论坛徽章:
- 0
|
BUG描述:
通过JDBC连接AS400,执行DatabaseMetaData类的getTables方法时,当连接初始化的库列表超过35个时将抛出“[SQL0804] SQLDA无效。”异常,小于等于35个时能正常执行。
测试环境:
OS系统:V5R3
驱动包版本(jt400.jar):所有的网上能下载到的版本。
JDK版本:1.5
测试代码:
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Properties;
/**
*
* JDBC测试程序
* 运行环境:JDK1.5及以上环境
* 需要有jt400.jar包
*
*/
public class JdbcTest {
private String ip;
private String user;
private String password;
private String initLibl ;
public JdbcTest(String ip, String user, String password, String initLibl) {
super();
this.ip = ip;
this.user = user;
this.password = password;
this.initLibl = initLibl;
}
public boolean isExistTable(String tableName) throws Exception{
Properties p = new Properties();
p.put("naming", "SYSTEM");
p.put("libraries", this.initLibl);
p.put("user", this.user);
p.put("password", this.password);
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
Connection con = DriverManager.getConnection("jdbc:as400://"+this.ip,p);
DatabaseMetaData metadata = con.getMetaData();
String[] types = new String[1];
types[0] = "TABLE";
ResultSet results = metadata.getTables(null, null,tableName,types);
if(results!=null && results.next()){
return true;
}else{
return false;
}
}
/**
* 测试情况:
* 1)当初始化的库列表中库的个数超过35个时即抛出“[SQL0804] SQLDA无效。”异常
* 2)当小于等于35个时,正常运行。
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
if(args!=null && args.length >=5){
//获取命令行参数
String ip = args[0];
String user = args[1];
String password = args[2];
String initLibl = args[3];
String tableName = args[4];
JdbcTest jt = new JdbcTest(ip,user,password,initLibl);
if(jt.isExistTable(tableName)){
System.out.println(tableName+"在当前系统存在。");
}else{
System.out.println(tableName+"在当前系统不存在。");
}
}else{
System.out.println("参数错误,参数格式为:");
System.out.println("IP USER PASSWORD \"LIBL\" TABLENAME");
System.out.println("其中IP格式为:192.168.0.1");
System.out.println("USER和PASSWORD为登录系统的用户和密码");
System.out.println("LIBL格式为:\"LIB1 LIB2 LIB3 LIB4\"");
System.out.println("TABLENAME为表名");
}
}
}
编译命令:
javac -classpath .;./jt400.jar JdbcTest.java
执行命令
java -classpath .;./jt400.jar; JdbcTest 后面跟所需要的参数
麻烦有其他版本的OS系统的AS400er帮忙在其他版本上测试下是否也有该问题,比如V5R4、V6R1、V7R1
附上完整的测试环境:
JdbcTest.rar
(3.75 MB, 下载次数: 15)
|
|