我正在使用PHP将JDBC sql语句转换为ODBC / DB2。我遇到了令我困惑的以下条款。
WHERE phid = ??id
我的第一直觉是它是为准备好的陈述,但现在我不太确定。这是一个JSP / JDBC的东西吗?谷歌/堆栈没有出现任何问题。
答案 0 :(得分:1)
哇! Mabye它只是一个普通的绑定变量,但连续2个! java.sql.Conneciton(快速阅读)的文档中没有任何内容表明它们必须用空格分隔。请发布更多代码,以便我们查看是否有任何setString
次调用来添加绑定变量。
例如,像这样:
pstmt = conn.prepareStatement("select blah from blah WHERE phid = ??id and blah blah");
pstmt.setString(1, "customer_");
pstmt.setString(2, "order_");
我从来没有见过这样的东西,但也许这就是他们在做什么?
编辑:我试过了!它给了我一个错误!我想知道你是否找到了一些死密码?这就是我试过的:
sql.append("SELECT A.ID, A.GROUP_NUMBER, A.GROUP_NAME ");
sql.append("FROM " + tab1 + " A ");
sql.append("INNER JOIN " + tab2 + " B ");
sql.append("ON (A.ID = B.GROUP_ID) ");
sql.append("WHERE B.THREAD_ID = ? ");
sql.append("AND B.THREAD_ID = ??ID ");
sql.append("ORDER BY A.ID ");
// ...
conn = getConn();
pstmt = conn.prepareStatement(sql.toString());
pstmt.setInt(1, threadId);
pstmt.setString(2, "B.");
pstmt.setString(3, "THREAD_");
我收到了这个错误:
ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MINUTE HOURS. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.57.82
答案 1 :(得分:0)
正如其他人所评论的那样(抱歉,还没有足够的回复评论),这可能是命名参数处理的某种方式。在JDBC和我知道的任何ORM框架中都找不到任何对它的引用,因此它可能是为该特定应用程序创建的自定义JDBC / ORM框架。看到更多示例代码肯定会有所帮助。