论坛首页 入门技术论坛

DB2的jdbc不支持在sql的函数中包含"?"吗?

浏览 2853 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-03-09  
DAO
我做了很久还第一次发现,以前没这样用过
比如:

try {
            String sql = "UPDATE tableName T SET T.CODE= ? || SUBSTR(T.CODE,LENGTH(?)+1 ,LENGTH(T.CODE)) WHERE T.CODE LIKE ?";
            Class.forName("com.ibm.db2.jcc.DB2Driver");
            Connection con = DriverManager.getConnection(
                    "jdbc:db2://192.168.30.211:50000/test", "test",
                    "test");
            
            PreparedStatement stmt = con.prepareStatement(sql);
            
            stmt.setString(1,"1");
            stmt.setString(2,"123");
            stmt.setString(3,"23434535635");
            stmt.executeUpdate();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

这段会出现错误:
com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -418, SQLSTATE: 42610, SQLERRMC: null
	at com.ibm.db2.jcc.c.cl.e(cl.java:1213)
	at com.ibm.db2.jcc.c.cl.a(cl.java:931)
	at com.ibm.db2.jcc.a.bd.g(bd.java:121)
	at com.ibm.db2.jcc.a.bd.a(bd.java:42)
	at com.ibm.db2.jcc.a.r.a(r.java:31)
	at com.ibm.db2.jcc.a.bp.g(bp.java:103)
	at com.ibm.db2.jcc.c.cl.g(cl.java:915)
	at com.ibm.db2.jcc.c.cm.J(cm.java:1285)
	at com.ibm.db2.jcc.c.cm.c(cm.java:1632)
	at com.ibm.db2.jcc.c.cm.C(cm.java:328)
	at com.ibm.db2.jcc.c.cm.executeUpdate(cm.java:311)


原因就是用了length(?),后来发现只要是有函数里面带"?"的都是这样.oracle没有这样的问题
我发现这样的问题是因为数据库的移植,本来打算不改程序的,看来是不行了?请问有人也遇到过这样的事情吗?虽然简单,但是问题棘手
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics