尝试使用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
扫描二维码关注公众号,回复:
1396955 查看本文章
原来是开机用户名。。。于是在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来访问创建的新表。
难用!