日期:2014-05-16  浏览次数:20356 次

db2数据库安装及测试问题记录

由于平台测试需要,这两天在windows xp下搭建了db2(db2_9.1.3版本)服务器的环境,通过jdbc方式进行测试。出现了一些问题。

原始代码如下:

Connection conn = null;
		PreparedStatement prepStamt = null;
		ResultSet rs = null;
		try {
			Class.forName("com.ibm.db2.jdbc.net.DB2Driver");
			conn = DriverManager.getConnection(
					"jdbc:db2://172.16.3.189:50000/CBIFDB", "db2admin",
					"db2admin");
			prepStamt = conn.prepareStatement("select * from tanzs.testtable");
			rs = prepStamt.executeQuery();
			int i = 0;
			while (rs.next()) {
				System.out.println("record[" + (++i) + "]:");
				System.out.println("acctNo:" + rs.getObject("acctNo")
						+ "acctName:" + rs.getObject("acctName"));
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
					if (prepStamt != null) {
						prepStamt.close();
					}
					if (conn != null) {
						conn.close();
					}
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

??

1.问题:java.lang.ClassNotFoundException: com.ibm.db2.jdbc.net.DB2Driver

分析:引用的jar包有db2java.jar,db2jcc.jar,db2jcc_license_cisuz.jar,db2jcc_license_cu.jar

??????? 网上找到的驱动名称是:com.ibm.db2.jdbc.net.DB2Driver,

??????? 其他项目上的驱动名称是:com.ibm.db2.jcc.DB2Driver

解决:改用jcc的驱动名称就能正常建立连接。

note:网上资料显示,有4种与db2服务器建立连接的方式,具体区别可参考以下信息:http://www.sudu.cn/info/html/edu/20070101/283555.html。

备注:建立连接的url格式如下:jdbc:db2://ip:port/dbname,其中ip为db2服务器ip地址,port为连接端口号,一般默认50000,dbname为要操作的数据库名称。

2.问题:com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: ETPDEMO.TESTTABLE

分析:表操作权限不足。参考http://www.yihaomen.com/article/java/86.html的问题分析,再仔细检查发现:

??????? 默认是以系统管理员用户登录,所以创建的表也隶属于系统管理员。而程序中建立连接的用户名,密码是其他用户,非系统管理员用户,所以该用户无操作该表的权限。

解决:两种解决方式,

???????? 1)在要操作的表前加上所属表模式,

???????? eg:prepStamt = conn.prepareStatement("select * from Administrator.testtable");

???????? 2)修改用户名密码为该表隶属的用户:

???????? eg:conn = DriverManager.getConnection("jdbc:db2://172.16.3.189:50000/CBIFDB", "Administrator", "Administrator");

备注:每个数据库都只给当前登录用户分配管理员权限,所以如果新增了用户,或其他已有用户也要操作该数据库,需要先添加相关用户,分配相应权限。

新建用户:在db2的控制中心,右键点击某一数据库,选择"权限"功能,在弹出的对话框中即可新建用户,并分配相应权限。

note:db2的用户与操作系统的用户一一对应,密码即为操作系统用户的密码。

可在操作系统中新建一用户,再在db2的控制中心添加用户,并为其分配相应权限。