sqlite - 如何在Where子句中使用变量?

时间:2013-06-16 22:08:09

标签: java sqlite where

已编辑 - 在重新审核后添加了更多代码(仍无效)

我想用一个使用变量的Where子句查询sqlite,但是我无法使它工作。

我设置了一个变量并传递它,但只有硬编码才有效......

这有效:

Penut是docName列中的记录之一。

rs = stat.executeQuery("SELECT * FROM " + TABLE_NAME + " WHERE docName = 'Penut'");

但是,这不起作用:

Connection conn = DriverManager.getConnection("jdbc:sqlite:dufuss.db");
Statement stat = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
myInput ="Penut";
String sql = "SELECT * FROM " + TABLE_NAME + " WHERE docName = ?";
conn.prepareStatement(sql).setString(1, myInput);
rs = stat.executeQuery(sql);

那么,我如何让变量 myInput 起作用?

4 个答案:

答案 0 :(得分:5)

试试这个

String sql = "SELECT * FROM " + TABLE_NAME + " WHERE docName = ?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, myInput);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
  // iterate through results
}

答案 1 :(得分:1)

尝试使用这样的东西:

String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setInt(1, 1001);

答案 2 :(得分:1)

为此,您可以使用PreparedStatement。代码应如下所示:

    String sqlStatement = "SELECT * FROM " + TABLE_NAME + " WHERE docName = ?"              
    PreparedStatement preparedStatement = dbConnection.prepareStatement(sqlStatement);

    preparedStatement.setString(1, "Penut");
    preparedStatement.executeUpdate();

答案 3 :(得分:0)

如果要使用绑定变量,则需要使用预准备语句并显式绑定变量的值。作为变量的占位符,您必须使用?而不是变量的名称。在您的代码中,myInput将被视为列名。看看Specifying a variable name in QUERY WHERE clause in JDBC