Java 使用“搜索oracle数据库”;包括「;查询,而不是“查询”;精确匹配“;查询

Java 使用“搜索oracle数据库”;包括「;查询,而不是“查询”;精确匹配“;查询,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我需要搜索包含用户信息表的数据库。我知道通过如下查询来搜索结果 String query; StringBuilder sb=new StringBuilder(1024); sb.append("select * from userinfo where uname=").append(key); query=sb.toString(); 但我需要做的是 如果该键是abc 然后我需要在数据库中搜索所有值为abc的数据 比如说 我的数据库包含数据abc,aba,gjabc,abcxyz,hjj

我需要搜索包含用户信息表的数据库。我知道通过如下查询来搜索结果

String query;
StringBuilder sb=new StringBuilder(1024);
sb.append("select * from userinfo where uname=").append(key);
query=sb.toString();
但我需要做的是

  • 如果该键是
    abc
  • 然后我需要在数据库中搜索所有值为abc的数据
  • 比如说
  • 我的数据库包含数据
    abc
    aba
    gjabc
    abcxyz
    hjjabcxyz
  • 然后我需要检索值
    abc
    gjabc
    abcxyz
    hjjabcxyz
  • 因为以上所有值都包含共同的
    abc

如何实现这一点?

如果您使用的是纯SQL,那么应该使用带“%”的like。然后,查询将返回uname包含“abc”的所有行。您的查询需要如下所示:

select * from userinfo where uname like '%key%'

正确的实现将使用PreparedStatement。

PreparedStatement ps = conn.prepareStatement("select * from userinfo where uname like ?");
ps.setString(1, key);
ResultSet rs = ps.executeQuery();

当然,这忽略了所有错误检查和管道代码:)

为什么您认为这是一个servlet问题而不是JPQL/SQL问题?servlet只是一个HTTP请求/响应控制器,而不是一些DB交互框架/语言。当您试图使用带有
main()
方法的普通Java类来实现这一点时,基本上会遇到完全相同的问题。@BalusC当然是对的。然而,正如我所理解的,他实际上可以与数据库通信。这个问题需要一些编辑。我还是删除了不相关的标签。请注意,您的原始代码有一个漏洞。@BalusC,我知道。但是为什么我用servlet执行这个任务,对我来说,它很容易维护。。。我很高兴接受你和我所有学生的建议。。。谢谢…最后只需要Java/JDBC代码。执行它的类/上下文与具体问题/问题无关。它在任何地方都可以导入/重用,一个servlet、一个Web服务、一个swing应用程序等等。问题是它不会使用索引,不像自由文本索引。@Ben,但也许它对james来说已经足够好了?:)不过,很高兴看到您的解决方案,我绝不是数据库专家。@Magnus Tendahl它对我不起作用,因为我使用的是Oracle数据库。它产生错误
无效字符
告诉我如何在
Oracle
数据库中存档此错误..它与Oracle一起工作。我建议您仔细阅读错误消息,找出哪个字符无效。我正在工作Magnus,时间不多,但全文索引的文档是@詹姆斯,这是正确的甲骨文语法;您一定是在Java中错误地实现了它……它还缺少
%
s,它应该围绕
值。