使用LIKE关键字从Java中的oracle数据库进行搜索

使用LIKE关键字从Java中的oracle数据库进行搜索,java,oracle,jdbc,Java,Oracle,Jdbc,这是用于mysql服务器数据库的代码。 oracle会有什么变化?不要使用字符串连接构建SQL查询-应该使用绑定参数 您的查询字符串应为: query="select * from books where BookName LIKE \"%" +txt1.getText()+"%\""; 然后你可以做一些类似的事情: query="select * from books where BookName LIKE ?"; (您需要处理异常等) 以及: 您不需要将查询更改为在MySQL和Orac

这是用于mysql服务器数据库的代码。
oracle会有什么变化?

不要使用字符串连接构建SQL查询-应该使用绑定参数

您的查询字符串应为:

query="select * from books where BookName LIKE \"%" +txt1.getText()+"%\"";
然后你可以做一些类似的事情:

query="select * from books where BookName LIKE ?";
(您需要处理异常等)

以及:

  • 您不需要将查询更改为在MySQL和Oracle之间交换(只需更改驱动程序和连接字符串)
  • 您不需要在输入字符串中转义任何单引号或双引号
  • 您可以免受SQL注入攻击
  • Oracle可以使用bind参数缓存查询,并且在bind参数更改时不必重新解析/重新编译查询
如果要将查询编写为字符串,则在SQL中,字符串文字由单引号(而不是双引号)包围:


您需要确保字符串中的任何单引号都已正确转义(但只需使用bind参数即可)。

此问题已解决

query=“从书名为“%”+txt1.getText()+“%”的书籍中选择*


谢谢大家:)

可能重复的答案有多种,涵盖多种原因。另外,
pass
不在查询中,您确定这是一个吗?请学习如何使用,并阅读有关如何在SQLplease use preparedstatement中指定字符串文本的章节。您的sql存在sql注入的风险…普通sql方言中的字符串文字用单引号括起来,而不是双引号括起来。您的代码容易受到SQL注入的攻击。请学习如何使用准备好的语句。最好使用
try with resources
@MickMnemonic处理JDBC资源,并将其更新为与OP的问题相关的片段-这只是一个关于如何将参数传递到查询并将范围扩大到当前“适当”范围的答案异常处理技术会分散对问题答案的注意力。是的,现代的方法是使用
try with resources
,但这不是Java教程,因此我删除了所有无关的代码,以便将答案集中在所问的问题上(并在文本中添加注释以记住异常处理)。我同意解决方案,但答案是使用
,而不是
。这仅在要点中提到。这是在隐藏问题。OPs仍然可以使用常量
字符串编写查询,比如
“select*from persons where sex=”M\“
。没有参数,因此没有真正的理由使用
PreparedStatement
。我觉得这应该更明显一点;)@AxelH已更新。但是您仍然应该使用bind参数,因为它允许Oracle缓存查询,并且当
sex='M'
更改为
sex='F'
时,如果您只使用
sex=?
,则不需要重新解析查询。
Class.forName( "oracle.jdbc.OracleDriver" ); // If you are using the Oracle driver.

Connection con = DriverManager.getConnection(
  "jdbc:oracle:thin:@localhost:1521:XE",
  "username",
  "password"
);

final String query="select * from books where BookName LIKE ?";
PreparedStatement ps = conn.prepareStatement(query);            
ps.setString( 1, "%" + txt1.getText() + "%" );
ResultSet rs = ps.executeQuery();
// Loop through the result set.
// Close statement/connections
query="select * from books where BookName LIKE '%your_string%'";