7

我正在使用 PHP 将 JDBC sql 语句转换为 ODBC/DB2。我遇到了以下让我感到困惑的条款。

WHERE phid = ??id

我的第一个直觉是它是用于准备好的陈述,但现在我不太确定。这是 JSP/JDBC 的事情吗?谷歌/堆栈没有出现任何东西。

4

2 回答 2

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

于 2013-03-14T14:08:00.440 回答
0

正如其他人评论的那样(抱歉,还没有足够的代表发表评论),这可能是命名参数处理的某种方式。我在 JDBC 和我知道的任何 ORM 框架中都找不到对它的任何引用,因此它可能是为该特定应用程序创建的自定义 JDBC/ORM 框架。查看更多示例代码肯定会有所帮助。

于 2013-03-14T13:43:07.747 回答