在sqlite数据库查询(JAVA)中无法使用输入作为参数

时间:2016-04-13 09:22:35

标签: java sqlite jdbc intellij-idea

我会尝试更好地解释我的头衔,但首先要了解我在这里尝试做的事情。我正在开发一款游戏,我需要在本地数据库中搜索用户提供该程序的单词。这样做是为了能够验证用户是否实际使用了符合游戏规则的单词。在这段代码中,我想搜索一个国家的数据库,以验证用户实际上已经给游戏一个国家而不是一个随机的单词。

由于我对java很新,刚开始理解SQLite和JDBC,我在互联网上搜索了如何查询我的数据库,我发现了一些有用的代码,我根据自己的喜好进行了调整。现在的问题是,从一开始,main方法将建立与数据库的连接,并从数据库中挑选出每一件事。不是我的意图,所以我想我可以要求用户输入一些信息,将其存储在一个字符串中(下面称为'word')并使用SQL命令 SELECT * FROM [table] WHERE [column] LIKE [条件]

当我将新创建的字符串'word'作为条件并尝试搜索数据库时,程序似乎无法识别它是什么,甚至根本不使用它。 Intellij用灰色标记'单词',所以据说从未使用过。

为什么.executeQuery(SQL命令)不会识别它应该使用word作为参数?如何使这项工作能够让用户自己决定搜索什么而无需自己明确地输入SQL -command?

代码:

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();
    }
}

1 个答案:

答案 0 :(得分:2)

而不是使用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

希望它能够发挥作用。