在java中用一个或多个单词搜索整个数据库
为了防止sql注入,我试图避免使用在java中用一个或多个单词搜索整个数据库,java,c++,sql,swing,search,Java,C++,Sql,Swing,Search,为了防止sql注入,我试图避免使用WHERE姓氏,如“search_txt.getText()”。。。但是,使用preparedStatement是否会离开?空白,换句话说,即使在文本字段中输入了正确的搜索值,sql语句也无法执行…行pst1.setString(1,search_txt.getText()+“%”中有什么问题 对于像这样的全文搜索引擎来说,这是一个很好的用例。使用MySQL最简单的方法是使用全文搜索。正如您所说,它不搜索“整个sql数据库”,但它可以搜索很多列。这很有效 语法与
WHERE姓氏,如“search_txt.getText()”
。。。但是,使用preparedStatement
是否会离开?空白,换句话说,即使在文本字段中输入了正确的搜索值,sql语句也无法执行…行pst1.setString(1,search_txt.getText()+“%”中有什么问题代码>
对于像这样的全文搜索引擎来说,这是一个很好的用例。使用MySQL最简单的方法是使用全文
搜索。正如您所说,它不搜索“整个sql数据库”,但它可以搜索很多列。这很有效
语法与您习惯的有点不同。这可能对你有用
SELECT Title, Forename, Surname, Role
FROM AcademicInfo
WHERE MATCH(Surname, Forename) AGAINST('searchterm' IN BOOLEAN MODE)
我将让您将SQL语句调整为Java
这是文件
欢迎SQL注入攻击。使用预先准备好的语句,而不是自己搞乱字符串@我知道,这只是一个想法。其他人可能会偶然发现这个问题,然后认为这是正确的做法。最好避免在任何地方发布的每个代码片段中出现此类错误,这样人们就不会看到不好的代码,而不解释它为什么不好以及如何做得更好。@Anony Mousse编辑过但新的问题我在布尔模式下使用了,
,因为全文搜索在小数据集上工作异常。实际上,您可能需要自然语言搜索。阅读documentation.java不喜欢与sql=“从AcademicInfo中选择标题、名字、姓氏、角色,其中匹配(名字、姓氏、角色、房间、电子邮件)与(?在布尔模式下)”;PreparedStatement pst1=conn.prepareStatement(sql);ResultSet rs2=pst1.executeQuery();如果(rs2.next()){pst.setString(1,search_txt.getText());
SQlite是否支持全文?全文仅是MySQL功能。
SELECT Title, Forename, Surname, Role
FROM AcademicInfo
WHERE MATCH(Surname, Forename) AGAINST('searchterm' IN BOOLEAN MODE)