0

已编辑 - 在reposnse之后添加了更多代码(仍然无法正常工作)

我想用使用变量的 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

4 回答 4

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
}
于 2013-06-16T22:18:33.953 回答
1

尝试使用这样的东西:

String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setInt(1, 1001);
于 2013-06-16T22:20:20.727 回答
1

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

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

    preparedStatement.setString(1, "Penut");
    preparedStatement.executeUpdate();
于 2013-06-16T22:21:19.883 回答
0

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

于 2013-06-16T22:26:36.953 回答