免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1882 | 回复: 0
打印 上一主题 下一主题

JDBC连接AS400的一个bug [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-11 20:15 |只看该作者 |倒序浏览
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)


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP