最近使用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搜索(国际版);当然如果有外网能搜索就更好了。



