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
转换为 String
。 really 糟透了,它没有警告你或任何不能以这种方式返回该数据类型的东西。我认为它应该抛出异常,或者在 jdbc 驱动程序中实现。
感谢大家的帮助!
如果他们是同一用户,那么这些程序 运行 来自不同的机器吗?是否有任何 ip 块?
在 java 侧为相同的 table 编写一个简单的 select 查询,不带参数
"SELECT CD_DIST from TWMMILESTONERQMT" 看看这是否有效
所以我在 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
转换为 String
。 really 糟透了,它没有警告你或任何不能以这种方式返回该数据类型的东西。我认为它应该抛出异常,或者在 jdbc 驱动程序中实现。
感谢大家的帮助!
如果他们是同一用户,那么这些程序 运行 来自不同的机器吗?是否有任何 ip 块? 在 java 侧为相同的 table 编写一个简单的 select 查询,不带参数 "SELECT CD_DIST from TWMMILESTONERQMT" 看看这是否有效