已编辑 - 在重新审核后添加了更多代码(仍无效)
我想用一个使用变量的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 起作用?
答案 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