jdbc连接db2

尝试使用jdbc连接sample数据库

public class Db2Test {
    public static void main(String[] args) throws Exception {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
        Connection conn = DriverManager.getConnection("jdbc:db2://localhost:50000/sample", "db2admin", "db2admin");
        ResultSet rs = conn.createStatement().executeQuery("select count(*) from STAFF");
        rs.next();
        int count = rs.getInt(1);
        System.out.println(count);
        rs.close();
        conn.close();
    }
}

 

出现如下错误:

Exception in thread "main" com.ibm.db2.jcc.am.io: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.STAFF, DRIVER=3.57.82
	at com.ibm.db2.jcc.am.bd.a(bd.java:676)
	at com.ibm.db2.jcc.am.bd.a(bd.java:60)
	at com.ibm.db2.jcc.am.bd.a(bd.java:127)
	at com.ibm.db2.jcc.am.km.c(km.java:2506)
	at com.ibm.db2.jcc.am.km.d(km.java:2483)
	at com.ibm.db2.jcc.am.km.a(km.java:1963)
	at com.ibm.db2.jcc.t4.db.g(db.java:139)
	at com.ibm.db2.jcc.t4.db.a(db.java:39)
	at com.ibm.db2.jcc.t4.t.a(t.java:32)
	at com.ibm.db2.jcc.t4.sb.h(sb.java:135)
	at com.ibm.db2.jcc.am.km.eb(km.java:1934)
	at com.ibm.db2.jcc.am.km.a(km.java:2863)
	at com.ibm.db2.jcc.am.km.a(km.java:628)
	at com.ibm.db2.jcc.am.km.executeQuery(km.java:612)
	at hello.Db2Test.main(Db2Test.java:11)

 

将jdbc url改成"jdbc:db2://localhost:50000/sample:retrieveMessagesFromServerOnGetMessage=true;"

 

这时会提示比较详细的错误信息:

Exception in thread "main" com.ibm.db2.jcc.am.io: "DB2ADMIN.STAFF" is an undefined name..

 

我们启动db2数据库然后对数据库进行各种操作。比如建sample数据库,默认的schema难道不db2admin吗???不是的,通过以下sql查看当前的schema


 

原来是开机用户名。。。于是在jdbc连接中使用开机用户名和密码,这次就连接成功了。

 

如果非要想使用db2admin用户怎么办?那么就显示的指定schema

 Class.forName("com.ibm.db2.jcc.DB2Driver");
        Connection conn = DriverManager.getConnection("jdbc:db2://localhost:50000/sample:retrieveMessagesFromServerOnGetMessage=true;", "db2admin", "db2admin");
        ResultSet rs = conn.createStatement().executeQuery("select count(*) from \"CYPER.YIN\".staff");
        rs.next();
 

或者这样

        Class.forName("com.ibm.db2.jcc.DB2Driver");
        Connection conn = DriverManager.getConnection("jdbc:db2://localhost:50000/sample:retrieveMessagesFromServerOnGetMessage=true;currentSchema=CYPER.YIN;", "db2admin", "db2admin");
        ResultSet rs = conn.createStatement().executeQuery("select count(*) from staff");

 按理说,schema是不区分大小写的。可能是我的用户名中有点号的原因。必须大写才可以。

 

 

可以在建表前切换到其它的schema

使用命令set current schema <schema_name>

(如果schema不存在也可以,会隐式的创建)

 

然后这个表的schema就不再是开机用户了。

 

可以使用select * from foo.test1来访问创建的新表。

 

 

难用!

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值