当前位置: 首页 > 知识库问答 >
问题:

通过JDBC连接到远程db2数据库失败

束阳旭
2023-03-14
 public static void main(String[] args) {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
        System.out.println("Driver loaded");

        try {
            Connection dbConn =     DriverManager.getConnection("jdbc:db2://192.168.0.103:50000/ABC", "****", "*****");
        } catch (SQLException e) {
            e.printStackTrace();
        }

}

连接失败,出现此异常。我无法追踪到底发生了什么?

 com.ibm.db2.jcc.am.SqlException: [jcc][t4][10262][11223][4.19.26] Unexpected Throwable caught: null. ERRORCODE=-4228, SQLSTATE=null
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.am.kd.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.b(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
at com.ibm.db2.jcc.t4.b.<init>(Unknown Source)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source)
at com.ibm.db2.jcc.DB2Driver.connect(Unknown Source)
at com.ibm.db2.jcc.DB2Driver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.connect.db2.ConnectToServer.main(ConnectToServer.java:22)


 Caused by: java.lang.NullPointerException
at com.ibm.db2.jcc.am.Connection.completeSqlca(Unknown Source)
at com.ibm.db2.jcc.t4.z.q(Unknown Source)
at com.ibm.db2.jcc.t4.z.p(Unknown Source)
at com.ibm.db2.jcc.t4.z.l(Unknown Source)
at com.ibm.db2.jcc.t4.z.d(Unknown Source)
at com.ibm.db2.jcc.t4.b.k(Unknown Source)
at com.ibm.db2.jcc.t4.b.b(Unknown Source)
at com.ibm.db2.jcc.t4.b.a(Unknown Source)
... 12 more

另外,getconnection之后的db2diag.log是:

 PID     : 5110                 TID : 140245920114432 PROC : db2sysc 0
 INSTANCE: sachindb             NODE : 000            DB   : ABC
 APPHDL  : 0-46                 APPID: 192.168.0.101.64054.151230182945
 AUTHID  : SACHINDB             HOSTNAME: Sachin
 EDUID   : 22                   EDUNAME: db2agent (ABC) 0
 FUNCTION: DB2 UDB, base sys utilities, sqleIsDatabaseDirectoryConnectable, probe:6835
 MESSAGE : ZRC=0x8005006D=-2147155859=SQLE_CA_BUILT
      "SQLCA has been built and saved in component specific control   block."
 DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
 sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -1035   sqlerrml: 0
 sqlerrmc: 
 sqlerrp : SQLE534 
 sqlerrd : (1) 0x00000000      (2) 0x00000000      (3) 0x00000000
       (4) 0x00000000      (5) 0x00000000      (6) 0x00000000
 sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)    
       (7)      (8)      (9)      (10)        (11)     
 sqlstate:      

共有1个答案

程鸿煊
2023-03-14

您是否在Java7中使用AES加密机制?如果是这样,我在ibm.com通过Googull找到了这个解决方案

否则,尝试直接创建DB2SimpleDataSource对象。

private DB2SimpleDataSource db2;
private void configureDataSource() {

     db2 = new DB2SimpleDataSource();
     db2.setServerName("192.168.0.103");
     db2.setPortNumber(50000);
     db2.setDatabaseName("ABC");
     db2.setUser("****");
     db2.setPassword("*****");
     db2.setReadOnly(true);          
}

然后像这个连接c=db2.getConnection()或这个连接c=db2.getConnection("****“,”*****“)那样连接

 类似资料:
  • 我正在尝试通过JDBC连接到使用Eclipse(版本Juno)的IBMDB2数据库。我已经将驱动程序(外部jar文件)添加到我的项目中,并且驱动程序已正确加载… 我还知道连接数据(数据库路径、用户名、密码)是正确的。但我得到一个java.lang.NoClassDefFoundError: 项目属性肯定有问题但是我真的不知道去哪里找。

  • 我使用以下java应用程序连接db2数据库for localhost,代码是: 问题是,当应用程序和db2运行在同一台机器上时,它是工作的,但如果db2数据库在另一台机器上,它就不工作了。我在我的url中使用的ip是: 如何远程连接数据库?

  • 我在连接到公共托管的静态IP mysql服务器时遇到了一个奇怪的问题。 我能够使用MySQL Workbench成功连接到服务器,也可以通过SSH连接到本地远程服务器。但是从jdbc连接器连接到mysql服务器的尝试(通过NetBeans和本地部署的代码都失败)。在查看日志时,代码正在尝试与远程服务器连接,考虑到用户凭据是本地用户而不是远程用户的。因此用户存在于远程,但java在尝试连接时会考虑u

  • 创建数据库后,必须连接或启动数据库才能正常使用。 语法: 示例: 假设要连接 数据库,参考以下代码: 执行上面命令,得到以下结果:

  • 我试图连接到我的mongo数据库在我的远程服务器: 但我有一个错误: MongoDB外壳版本:2.6.10连接到:xxx。xxx。xxx。xx:27017/测试2016-11-07T05:18:39.140 0000警告:无法连接到xxx。xxx。xxx。xx:27017,原因:错误号:111连接被拒绝2016-11-07T05:18:39.142 0000错误:无法连接到服务器xxx。xxx。x

  • 问题内容: 如何从Java应用程序通过SSH连接到远程MySQL数据库?小代码示例对我有所帮助,对此我将不胜感激。 问题答案: 我的理解是,您想访问在远程计算机上运行的mysql服务器,并通过SSH隧道侦听端口3306。 要使用命令行ssh客户端从本地计算机上的端口1234到远程计算机上的端口3306的隧道,您可以从本地计算机上键入以下命令: 要从Java执行相同的操作,可以使用JSch(SSH2