无法在 sqlite 数据库查询(JAVA)中使用输入作为参数
Posted
技术标签:
【中文标题】无法在 sqlite 数据库查询(JAVA)中使用输入作为参数【英文标题】:Not able to use input as parameter in sqlite database query (JAVA) 【发布时间】:2016-04-13 09:22:35 【问题描述】:我将尝试更好地解释我的标题,但首先是我在这里尝试做的一些背景。我正在开发一个游戏,我需要在本地数据库中搜索用户给程序提供的单词。这样做是为了验证用户是否确实使用了符合游戏规则的单词。在这段代码中,我想搜索一个国家数据库,以验证用户实际上给了游戏一个国家而不是一个随机词。
由于我对 java 还很陌生,并且刚刚开始了解 SQLite 和 JDBC,所以我在互联网上搜索了如何查询我的数据库,我发现了一些有用的代码,我根据自己的喜好进行了调整。现在的问题是,从一开始,主方法就会建立到数据库的连接,然后从数据库中挑选出每一件事。不是我真正的意图,所以我想我可以向用户询问一些输入,将其存储在一个字符串中(下面称为“单词”)并使用 SQL 命令 SELECT * FROM [table] WHERE [column] LIKE [条件]。
当我将新创建的字符串“word”作为条件并尝试搜索数据库时,程序似乎无法识别单词的本质,甚至根本无法使用它。 Intellij 将“单词”标记为灰色,因此据说它从未使用过。
为什么 .executeQuery(SQL-command) 不会识别它应该使用 word 作为参数?我怎样才能使这项工作,以便用户可以决定搜索什么,而无需自己显式输入 SQL 命令?
代码:
package SQL;
//STEP 1. Import required packages
import javax.swing.*;
import java.sql.*;
public class SQLTests
public static void main(String[] args) throws Exception
String word = JOptionPane.showInputDialog(null, "Input Country name:",
"Country search", 1);
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection("jdbc:sqlite:countries.db");
Statement stat = connection.createStatement();
ResultSet rs = stat.executeQuery("select * from Country where name like word;");
while (rs.next())
System.out.println(rs.getString("name"));
rs.close();
connection.close();
【问题讨论】:
也许:ResultSet rs = stat.executeQuery("select * from Country where name like " + word + ";"); 首先,当您的查询应该搜索“word”时,您必须在其周围放置引号“,当您准确搜索孔词“word”时,您可以使用等于“=”参数. 如果你想在某个地方搜索字符串部分“word”,你必须使用“%”作为通配符。 如果你希望“word”是一个参数,你可以用其他东西替换它,然后用问号“?”替换它。并创建查询字符串的准备语句,然后您可以在其上将参数设置为包括问号 @ReneM。我注意到引号丢失了。我的错。由于我一直在搜索整个单词,因此我将尝试使用 equals,并且我假设您的意思是将其用作:SELECT * FROM table WHERE name = "word"。 是的,这将是精确字符串比较和区分大小写的正确查询。但正如我所说,学习如何使用准备好的语句。 docs.oracle.com/javase/7/docs/api/java/sql/… 【参考方案1】:不要使用Statement
,而是使用PreparedStatement
PreparedStatement stat = connection.prepareStatement("select * from Country
where name like ?");
stat.setString(1, word);
ResultSet rs = stat.executeQuery();
同时检查Difference Between Statement
and PreparedStatement
希望它会起作用。
【讨论】:
以上是关于无法在 sqlite 数据库查询(JAVA)中使用输入作为参数的主要内容,如果未能解决你的问题,请参考以下文章
尝试编写使用开关从 sqlite 数据库中选择数据的 java 代码
SQLite无法在频繁的“SELECT”查询中打开数据库文件(代码14)
无法使用 Entity Framework 5 在 SQLite 数据库中插入记录