jdbc 不 运行 什么 SQL 开发者 运行

jdbc doesn't run what SQL Developer runs

所以我在 Java 应用程序中使用 jdbc 来查询几个不同的数据库。我让用户为每个人输入他们的凭据。

一个数据库工作正常,但另一个数据库有两个问题。

对于其中一个查询:

select 语句 运行 很好,returns 一整行来自 SQL 开发人员的 5 项(SQL IDE来自 Oracle),但是当从 Java 应用程序执行时,只有第二和第三列将数据放入我的变量中,其余为空字符串。这是 SELECT 语句:

SELECT CD_DIST, CD_RQMT, TS_OPER_LAST_UPDTD, ID_OPER_LAST_UPDTD, ST_RQMT
    FROM TWMMILESTONERQMT
    WHERE CD_WR = '219033'
    and CD_RQMT = '555';

这里是 Java 代码:

        String wrNumber = ((Integer)(p.myWRNumber)).toString();
        String selectStatement =
        "SELECT CD_DIST, CD_RQMT, TS_OPER_LAST_UPDTD, ID_OPER_LAST_UPDTD, ST_RQMT " + 
            "FROM TWMMILESTONERQMT " + 
            "WHERE CD_WR = '" + wrNumber + "' " + 
            "and CD_RQMT = '555' ";
        System.out.println(selectStatement);

        PreparedStatement sel1 = stormsConn.prepareStatement(selectStatement);
        ResultSet res = sel1.executeQuery();
        while(res.next())
        {
            String district = res.getString("CD_DIST");
            String requirement = res.getString("CD_RQMT");
            String lastUpdatedTimestamp = res.getString("TS_OPER_LAST_UPDTD");
            String lastUpdatedPerson = res.getString("ID_OPER_LAST_UPDTD");
            String requirementState = res.getString("ST_RQMT");
            if(district != null)
            {
                p.myRequirementDistrict = district;
            }
            if(requirement != null)
            {
                p.myRequirementNumber = requirement;
            }
            if(lastUpdatedTimestamp != null)
            {
                p.myRequirementLastUpdatedTimestamp = lastUpdatedTimestamp;
            }
            if(lastUpdatedPerson != null)
            {
                p.myRequirementLastUpdatedPerson = lastUpdatedPerson;
            }
            if(requirementState != null)
            {
                p.myRequirementState = requirementState;
            }
        }

        res.close();
        sel1.close();

对于其他查询,它在 SQL Developer 中再次 运行 没问题,但是当我在 Java 应用程序中 运行 它时抛出此异常:

java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

对于这两个查询,我使用的凭据与我在 SQL 开发人员中使用的凭据相同,否则我会怀疑这是一个权限问题。几个小时以来,我一直在为此苦思冥想,但没有成功。

更新(已解决):

对于异常,我使用了错误的 Connection 到 运行 我的查询,所以我在错误的数据库中寻找 Table。难怪找不到。

至于空白结果列的奥秘,显然Oracle DB中的varchar2类型列不能使用jdbc驱动程序的.getString(...)功能。相反,必须使用 .getAsciiStream(..) 函数,然后可以将 InputStream 转换为 Stringreally 糟透了,它没有警告你或任何不能以这种方式返回该数据类型的东西。我认为它应该抛出异常,或者在 jdbc 驱动程序中实现。

感谢大家的帮助!

如果他们是同一用户,那么这些程序 运行 来自不同的机器吗?是否有任何 ip 块? 在 java 侧为相同的 table 编写一个简单的 select 查询,不带参数 "SELECT CD_DIST from TWMMILESTONERQMT" 看看这是否有效