Derby SELECT语句无法找到特定字符串

时间:2017-01-19 08:09:24

标签: sql jdbc derby

我有一个名为ATEST的列,在一个名为TESTSCHEMA的模式中,在一个名为SESSION的数据库中。

我正在尝试查找其ATEST列有一个名为" MyTest"的字符串的记录。

我正在使用以下SQL:

  final String query = "SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST = 'MyTest'";

现在我已经放置了几个记录,其ATEST列包含" MyTest"。我以通常的方式使用JDBC:

     device = aConnect.prepareCall(query);

     ResultSet result = device.executeQuery();

请注意,为简洁起见,try和catch代码被忽略,因为我没有抛出任何异常。

出于某种原因,我不断得到数量为空的结果集。尽管我在数据库中有几条ATEST =' MyTest'!

,但我无法通过此声明找到任何记录。

我在Derby中发现了一个错误吗?没有WHERE子句或WHERE子句查找数字的搜索似乎没有问题。为什么没有查找字符串的WHERE子句找到字符串,尽管字符串实际上在数据库中的fct ???

有人请指教。

3 个答案:

答案 0 :(得分:0)

尝试发送

  final String query = "SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST = '''MyTest'''";

应该点击DB

SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST = 'MyTest' 

而不是

SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST =MyTest 

答案 1 :(得分:0)

我不认识德比。但是你的查询看起来很奇怪:

  • 您说数据库名为SESSION。所以这就是你连接的地方。我不希望在查询中找到它的名字。
  • 您的架构名为TESTSCHEMA。所以这就是表所在的位置。ATEST是一列。所以,您是否错过了TESTSCHEMA.ATEST中的架构和列之间的表名?
  • 您从SESSIONDATA.SESSIONS中选择。什么是SESSIONDATA突然?这不是你提到的名字。什么是SESSIONS?这是表名吗?

我希望这样的查询:

SELECT * FROM testschema.sessions WHERE atest = 'MyTest'

(如果模式名称是您的连接的默认模式,那么模式名称甚至可能是多余的。)

答案 2 :(得分:0)

尝试使用数值代替“Mytest”进行引用

替换

SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST = 'MyTest'

SELECT * FROM SESSIONDATA.SESSIONS WHERE SESSION.TESTSCHEMA.ATEST = 123