Java使用db2jcc4.jar连接db2数据库完整方法(附idea打jar包依赖路径配置方法)

本文讲述了作者在将Kettle导数据到MySQL失败后,转向使用Java代码连接DB2数据库的过程。通过代码示例和分析,重点在于解决-1060,08004错误,即权限问题,以及jar包管理和数据库连接设置的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

最近使用kettle从db2导出数据到mysql,测试好好的,结果生产上报错-1060,08004;于是就想写个java试试行不行,会不会是账号密码、数据库错误、或者是数据库连接jar包不兼容的问题。

以下是java使用db2jcc4-9.7.0.6.jar连接db2数据库、执行sql的代码样例。(普通java程序,只用到这1个jar包)

二、代码样例

import com.ibm.db2.jcc.DB2ConnectionPoolDataSource;
import javax.sql.PooledConnection;
import java.sql.Connection;
import java.sql.PrepareStatement;
import java.sql.ResultSet;

public class Main{
  private static final String ip = "10.123.123.123";
  private static final int port = 50000;
  private static final String username = "abc";
  private static final String password = "mypass";
  private static final String dbname = "mydb";
  private static final String sql = "select * from company where id = '001'";

  public static void main(String[] args){
    System.out.println("begin");
    try{
      DB2ConnectionPoolDataSource db2 = new DB2ConnectionPoolDataSource();
      //重要,有这句就不报错了
      //好像有这句就不用写Class.forName(“COM.ibm.db2.jcc.DB2Driver”);了
      db2.setDriverType(4);
      db2.setServerName(ip);
      db2.setLoginTimeout(10000);
      
      db2.setDataSourceName(ip);
      db2.setPortNumber(port);
      db2.setUser(username);
      db2.setPassword(password);
      db2.setDatabaseName(dbname);
      
      PooledConnection pooledConnection = db2.getPooledConnection();
      Connection connection = pooledConnection.getConnection();
      PreparedStatement ps = connection.prepareStatement(sql);
      ResultSet rs = ps.exectueQuery();
      
      while(resultSet.next()){
        System.out.println(resultSet.getString(1));
      }

      System.out.println("success");
      
    }catch(Exception e){
      System.out.println("error");
      System.out.println(e);
    }
    System.out.println("end");
  }

}

三、总结

1.上面的代码是一个简单的java连接db2的代码,当时主要用来测试是否是用户名密码、数据库名称、或数据库连接jar包有问题,导致了kettle执行失败。
2.使用db2.setDriverType(4)之后,就不需要Class.forName("COM.ibm.db2.jcc.DB2Driver")这句话加载驱动类了。

四、其它笔记

1.sqlcode=-1060 sqlstate=08004错误表示用户没有权限。

2.打jar包前,注意在MANIFEST.MF文件中配置Class-Path,然后执行jar包时才能找到依赖,否则会报错。

(1)例如,MANIFEST.MF如下:

Manifest-Version: 1.0
Class-Path: ./db2jcc4-9.7.0.6.jar 
Main-Class: Main

(2)主类是Main.java,打完包生成main.jar(依赖db2jcc4-9.7.0.6.jar)

(3)把main.jar放到C:\下,把db2jcc4-9.7.0.6.jar也放到C:\下。

(4)使用java -jar C:\main.jar启动main.jar;由于配置了Class-Path,并且db2jcc4-9.7.0.6.jar在对应路径,因此可以成功启动。

3.百度搜不到的问题,可以试试bing搜索(国际版);当然如果有外网能搜索就更好了。

4.db2参数schema与database与user的区别
Oracle中,schema与user是同一个概念;
Mysql中,schema与database是同一个概念;
db2中,schema与database与user都不是同一个概念。

背景原因
●Oracle数据库是数据库本身管理用户的,即每一个要访问Oracle的用户都必须先在Oracle数据库里创建用户;而DB2并没有自己的用户帐号,DB2使用的是操作系统的帐号,DB2只需要对相应的操作系统账户进行授权,则该操作系统账户就可以访问DB2数据库。

●MySql中,下方sql:

select * from a.usertable;

其中,a是schema(纲要),也是database的名称;意思是查询a库的usertable表。

●DB2中,下方sql:

select * from a.usertable;

其中,a是schema(纲要),但不是database的名称,也不是用户;意思是查询某个库里的纲要为a里的usertable表;数据库连接url中配置的才是数据库名。

●DB2需要的参数样例:

数据库ip: 10.123.123.123
数据库名: dbname
用户名: user1
密码: user1
schema(纲要名): sname
表名: usertable

与mysql相比,多了schema;注意schema与database不是一个概念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐梦想永不停

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值