论坛首页 入门讨论版 企业应用

jdbc连接DB2数据库并插入数据出错

浏览 882 次
该帖已经被评为新手帖
作者 正文
最后更新时间:2007-07-08 关键字: jdbc,db2
错误提示信息:
连接成功!
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: DB2ADMIN.CLIENTS
	at com.ibm.db2.jcc.b.ig.e(ig.java:1594)
	at com.ibm.db2.jcc.b.ig.a(ig.java:1204)
	at com.ibm.db2.jcc.c.gb.g(gb.java:140)
	at com.ibm.db2.jcc.c.gb.a(gb.java:39)
	at com.ibm.db2.jcc.c.w.a(w.java:34)
	at com.ibm.db2.jcc.c.vb.f(vb.java:139)
	at com.ibm.db2.jcc.b.ig.n(ig.java:1175)
	at com.ibm.db2.jcc.b.jg.eb(jg.java:1877)
	at com.ibm.db2.jcc.b.jg.d(jg.java:2319)
	at com.ibm.db2.jcc.b.jg.W(jg.java:463)
	at com.ibm.db2.jcc.b.jg.executeUpdate(jg.java:446)
	at org.xredleaf.InsertXmlFile.insertFile(InsertXmlFile.java:24)
	at org.xredleaf.Test.main(Test.java:10)


下面是我的原代码:
package org.xredleaf;

import java.sql.*;

public class Connect {
	  private static String user = "db2admin";
	  private static String pwd = "123456789";
	  private static String url = "jdbc:db2://localhost:50000/sample";

	  public static Connection getConn(){
	    Connection conn=null;
		
	    try {
	       Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
	       conn = DriverManager.getConnection(url, user, pwd);
	       System.out.println("\n连接成功!");
	    }
	    catch (Exception e) { System.out.println("\n连接失败!");e.printStackTrace();	}
	    return conn;
			 
	  }   // end getConn();
		

	  public static void closeConn(Connection conn){
	    try {
	      if(conn == null) { return; }
	      conn.close();
	    }
	    catch (Exception e) { e.printStackTrace(); }
	    finally { 
	      try { conn.close();  }
	      catch (Exception e) { } 
	    }
	  }  // end closeConn();

}


package org.xredleaf;

import java.sql.*;
import java.io.*;

public class InsertXmlFile {
	public static void insertFile(){
		  try {
		    int id = 1885;
		    String name = "Amy Liu";
		    String status = "Silver";
		    String fn = "d:/XMLFiles/Client1885.xml"; 

		    Connection conn = Connect.getConn();
            
		    String query = 
		    "insert into clients (id, name, status, contactinfo) values (?, ?, ? ,?)";
		    PreparedStatement insertStmt = conn.prepareStatement(query);
		    insertStmt.setInt(1, id);
		    insertStmt.setString(2, name);
		    insertStmt.setString(3, status);
		    File file = new File(fn);
		    insertStmt.setBinaryStream(4, new FileInputStream(file), (int)file.length());
          
		    if (insertStmt.executeUpdate() != 1) {
		        System.out.println("No record inserted.");
		    }else{
		    	System.out.println("插入成功!");
		    }

		    //conn.close();
		    Connect.closeConn(conn);
		  }
		  catch (Exception e) { e.printStackTrace();}
		}

}


package org.xredleaf;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		InsertXmlFile dao = new InsertXmlFile();
		dao.insertFile();
	}

}


大家帮我看看到底是哪里错了???
   
最后更新时间:2007-07-08
错误应该是在这里:

# Connection conn = Connect.getConn(); 
#              
#             String query =  
#             "insert into clients (id, name, status, contactinfo) values (?, ?, ? ,?)"; 
#             PreparedStatement insertStmt = conn.prepareStatement(query); 
#             insertStmt.setInt(1, id); 
#             insertStmt.setString(2, name); 
#             insertStmt.setString(3, status); 
#             File file = new File(fn); 
#             insertStmt.setBinaryStream(4, new FileInputStream(file), (int)file.length());
 
检查一下sql语句,和数据库表里的表是否对应。
   
0 请登录后投票
最后更新时间:2007-07-08
可以看出是你SQL的问题,错误已经显示了比较清楚的定位。
   
0 请登录后投票
最后更新时间:2007-07-08
ok,解决,原来db2 里的clients表是用administrator创建的,然后他的模式属于administrator,所以得用administrator连接数据库,或者是在表名用加上administrator.clients,谢谢各位了
   
0 请登录后投票
论坛首页 入门讨论版 企业应用

跳转论坛:
JavaEye推荐