import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConDB
{
private static Connection getConnection() {
Connection conn = null;
try {
  String url = "jdbc:db2://192.168.1.2:50000/db_test"; 
  String driver = "com.ibm.db2.jcc.DB2Driver"; 
  String uid = "db2admin";
  String pwd = "123456"; 
  Class.forName(driver);
conn = DriverManager.getConnection(url, uid, pwd);
return conn;
} catch (ClassNotFoundException e) {
System.out.println("driver wrong Problem~");
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
    public static void main(String[] args) {
        try {
            // create data source
         Connection conn = null;
         conn = getConnection();
         String sql = null;
         Statement stmt = conn.createStatement();
         sql = "create trigger DB2ADMIN.TEST_TR_"
+ " AFTER  INSERT"
+ " ON DB2ADMIN.TEST" 
+" REFERENCING  NEW AS OLD  NEW_TABLE AS NEW"
+ " FOR EACH ROW"
+ " MODE DB2SQL"
+ " BEGIN ATOMIC"
+ " declare v_cbd_db_waite INTEGER;"
+ " set v_cbd_db_waite =(select count(*) from aaa where NAME='TEST');"
+ " if (v_cbd_db_waite = 0 ) then "
+ " insert into bbb(NAME,WAITE) VALUES('TEST',1);"
+ " else"
+ " update bbb set cbd_db_waite = 1 where name='TEST';"
+ " end if;"
+ "END;";
         System.out.println(sql);
         stmt.execute(sql);  
           stmt.close();
           conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
如果直接执行sql语句没有任何问题,但使用这段程序就不行。请大家如何解决。
环境:db2 9.5 java使用的是jcc驱动。谢谢各位

解决方案 »

  1.   

    有这样用的?
    在数据库时面写好个存储过程用java调呗
      

  2.   

    我觉得执行不成功是分隔符的问题,sql把';'看成是一句的完结了。
    改了数据库的分隔符试试吧~`
      

  3.   

    不是那个问题。我修改测试还是不行。老是报
    com.ibm.db2.jcc.b.nm: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=set;cbd_db_waite INTEGER;<SQL_variable_declarations>, DRIVER=3.50.152
      

  4.   

    这个错误就是说你的sql语句拼接时候发生了错误 ~`
    分隔符换了没改彻底吧