我希望能够在mysql表的大多数列中搜索并返回结果。我考虑过使用myisam数据库和全文搜索,但我认为由于性能的提高,坚持使用innodb会更好。我还简要地考虑过像Solr这样的东西,但像我这样的解决方案在我的情况下似乎有些过分。
我只是想将搜索功能添加到联系信息数据库中。当用户输入说“Smith”时,我希望结果返回并显示所有表格行,其中名字,姓氏或偶数地址包含单词Smith等。
告诉我这是否是错误的方法,但我已经决定使用这样的标准SQL字符串设置:
SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?
当然,实际的查询字符串将比此示例长得多,因为它将包含表中的大多数列。
1)在查询数据库的安全性时,我更喜欢使用预准备语句,但是当我将sql字符串设置为高于它时,代码会为每个语句查找单独的语句。我怎么才能重复同样的“喜欢?”每列?或者有没有办法设置它类似于:
SELECT * FROM contacts WHERE firstName, lastName, email LIKE ?
当我最初将字符串传递给preparedstatement时,我用通配符(%)包围它。
2)我能搜索VARCHAR和INT列吗?
编辑:我最终使用了Spring框架的一小部分,因此我可以使用命名参数。不幸的是,JDBC没有这个功能。这意味着在我的构建路径中包含一小部分Spring框架,所以我可以使用jdbc jar。或者我可以在我的一个搜索字符串中传递查询字符串中的每个参数,但这会导致丑陋/难以阅读的代码,我不想破解使用相同的字符串,这就是为什么我选择使用命名参数。
答案 0 :(得分:1)
不,你不能那样做。您需要在第一个查询中执行此操作:
SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?