2009-10-03 83 views
2

我看到某处这个例子:JDBC - prepareStatement - 我应该如何使用它?

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

我可以用这个格式,如果我想“从表,其中列= SELECT *‘你好’”执行这样的查询?

中,我通常我用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的版本,我收到这个错误:无法取消无效

+0

我已经删除了我的答案,这只是错误的... – 2009-10-05 20:14:52

回答

1

如果查询中没有绑定变量(问号),则只能使用第一种形式。这只是你发布内容的缩短版本。

此外,如果使用缩短的表单,则不会有机会重用PreparedStatement对象。

+0

我不明白。 Pascal Thivent写道,我可以在In参数中使用短版本,但是你告诉我这是不可能的。 :) Anw,使用Pascal的版本,我收到此错误:void无法解除引用 – 2009-10-03 23:21:40

0

当然你可以使用一个字符串变量的查询在你把你的动态数据并运行它。

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

+0

也如果u想要做动态更换urself为什么不使用'语句'和executeUpdate() – 2009-10-03 22:56:55

+0

语句具有不同于预准备语句的性能特征。 – 2009-10-03 22:57:35

+0

@ken ..是的,我总是忘记一个..谢谢你指出:) – 2009-10-03 23:04:24

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是详细的。 :)

0

这里的部分示例如何使用这个接口:

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