2009-10-03 3 views
2

J'ai vu quelque part cet exemple:JDBC - prepareStatement - Comment l'utiliser?

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

Puis-je utiliser ce format, si je veux exécuter une requête comme celui-ci « Select * from table où la colonne = « bonjour » »?

La façon dont je d'habitude j'utiliser l'objet prepareStatement est quelque chose comme ceci:

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

plus tard Edit:

Je ne comprends pas. Pascal Thivent a écrit que je peux utiliser la version courte avec les paramètres In, mais Liu me dit que ce n'est pas possible. :) Anw, en utilisant la version de Pascal, je reçois cette erreur: void ne peut pas être déréférencé

+0

J'ai supprimé ma réponse, il était tout simplement faux ... –

Répondre

1

Vous ne pouvez utiliser le premier formulaire que s'il n'y a pas de variables de liaison (points d'interrogation) dans la requête. C'est juste une version abrégée de ce que vous avez posté. En outre, si vous utilisez le formulaire raccourci, vous ne pourrez pas réutiliser l'objet PreparedStatement.

+0

Je ne comprends pas. Pascal Thivent a écrit que je peux utiliser la version courte avec les paramètres In, mais vous me dites que ce n'est pas possible. :) Anw, en utilisant la version de Pascal, je reçois cette erreur: void ne peut pas être déréférencé –

0

bien sûr, vous pouvez utiliser une variable de chaîne pour la requête dans laquelle vous mettez dans vos données dynamiques et exécutez-le.

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

+0

aussi si tu veux faire la dynamique remplaçant urself pourquoi ne pas utiliser Les instructions 'statement' et executeUpdate() –

+0

ont des caractéristiques de performances différentes de celles de l'instruction préparée. –

+0

@ken .. oui j'oublie toujours celui-là .. merci de le signaler :) –

0

La forme longue est souvent, mais les instructions préparées peuvent être précompilées par la base de données et, si elles sont utilisées correctement, elles évitent l'injection 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(); 
} 

Qui a dit que java était verbeux. :)

0

Voici un exemple partiel comment utiliser cette interface:

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