Java 为什么JDBC代码中有两个问号

Java 为什么JDBC代码中有两个问号,java,sql,jdbc,Java,Sql,Jdbc,我正在使用PHP将JDBCSQL语句转换为ODBC/DB2。我遇到了下面的条款,这使我很困惑 WHERE phid = ??id 我的第一直觉是,这是为准备好的声明,但现在我不太确定。这是JSP/JDBC吗?Google/stack没有显示任何内容。正如其他人所评论的那样(抱歉,还没有足够的代表发表评论),这可能是命名参数处理的某种方式。我在JDBC和我所知道的任何ORM框架中都找不到对它的任何引用,因此它可能是为特定应用程序创建的自定义JDBC/ORM框架。看到更多的示例代码肯定会有所帮助。

我正在使用PHP将JDBCSQL语句转换为ODBC/DB2。我遇到了下面的条款,这使我很困惑

WHERE phid = ??id

我的第一直觉是,这是为准备好的声明,但现在我不太确定。这是JSP/JDBC吗?Google/stack没有显示任何内容。

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

哇!也许它只是一个普通的绑定变量,但一行中有2个!(快速阅读)的文档中没有说明它们必须用空格分隔。请发布更多代码,以便我们查看是否有任何
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_");
我得到了这个错误:


非法符号“?”。一些可能合法的符号是:微秒、微秒、秒、分、时。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.57.82

您能在找到它的地方发布代码块吗?这不是标准的JDBC,可能是特定于供应商的扩展。或者可能是特定于应用程序(命名)的参数处理。您能发布更多java代码吗?完整的sql准备语句和任何
setString
调用它。