JDBC - preparedStatement - 我该如何使用它?

时间:2009-10-03 22:39:10

标签: prepared-statement

我在某处看到了这个例子:

 rs = connection.prepareStatement("select * from table").executeQuery();

我是否可以使用这种格式,如果我想执行这样的查询“从表中选择*,其中column =”hello“”?

我通常使用prepareStatement对象的方式是这样的:

        String sql = "select * from adresa where column = ?";
        PreparedStatement pre = con.prepareStatement(sql);
        pre.setString(1, i);
        rs = pre.executeQuery();

稍后编辑:

我不明白。 Pascal Thivent写道,我可以使用In参数的短版本,但刘告诉我这是不可能的。 :) Anw,使用Pascal的版本,我收到此错误: void无法解除引用

4 个答案:

答案 0 :(得分:1)

如果查询中没有绑定变量(问号),则只能使用第一个表单。它只是您发布的缩短版本。

此外,如果您使用缩短的表单,您将无法重用PreparedStatement对象。

答案 1 :(得分:1)

以下是如何使用此界面的部分示例:

static final String USER = "root";
            static final String PASS = "newpass";

            Connection conn = DriverManager.getConnection(myUrl, USER, PASS);

            // create a sql date object so we can use it in our INSERT statement
            Calendar calendar = Calendar.getInstance();
            java.sql.Date startDate = new java.sql.Date(calendar.getTime().getTime());

            // the mysql insert statement
            String query = " insert into students (ID, last_name, first_name, birthday, hometown)"
                    + " values (?, ?, ?, ?, ?)";

            // create the mysql insert preparedstatement
            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setInt(1, 808027);
            preparedStmt.setString(2, "Davis");
            preparedStmt.setString(3, "Felicita");
            preparedStmt.setDate(4, startDate);
            preparedStmt.setString(5, "Venice");

            // execute the preparedstatement
            preparedStmt.execute();

            conn.close();

答案 2 :(得分:0)

当然你可以使用字符串变量来查询你输入你的动态数据并运行它。

rs = connection.prepareStatement(variable).executeQuery();

答案 3 :(得分:0)

长格式通常是,但是预编译语句可以由db预编译,如果正确使用将有助于防止sql注入。

Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
 conn = getConn();
 ps = conn.prepareStatement("select * from x where y = ? "); //note no sb.append()'s or +'s, to helps prevent sql injection
 ps.setLong(1, 12l);
 rs = ps.executeQuery();

 while (rs.next()) {
 ... act ...
 }
} catch ( Exception e) {
} finally {
 if (rs != null) rs.close(); 
 if (ps != null) ps.close();
 if (conn != null) conn.close();
}

谁说java很冗长。 :)