Utiliser PreparedStatement en Java
Pour les lots et les applications qui nécessitent une connexion à la base de données, les classes suivantes sont généralement utilisées pour implémenter le processus de connexion.
--java.sql.Connection classe
--java.sql.Statement classe
--java.sql.ResultSet classe
Mais dernièrement, il semble être populaire d'utiliser la classe java.sql.PreparedStatement au lieu de la classe Statement.
J'écrirai la raison.
Raison
- Mesures contre l'injection SQL
- Comme son nom l'indique, SQL est mis en cache dans la base de données, donc si vous émettez à plusieurs reprises la même instruction SQL, la vitesse de traitement sera plus rapide.
Comment utiliser
Comment l'utiliser par rapport à la classe Statement.
Pour la classe Statement
- Obtenez un objet de la classe Statement.
Il peut être obtenu avec l'objet .createStatement () de la classe Connection.
- Exécutez une instruction SQL à l'aide d'un objet de la classe Statement.
Il peut être exécuté avec l'objet de classe Statement .execute ().
Connection con = DriverManager(hoge,hoge,hoge);
String sql = "select name from hogeData where id = '1'";
Statement st = con.createStatement(sql);
st.execute();
Pour la classe PreparedStatement
- Remplacez la valeur de l'instruction SQL que vous souhaitez exécuter par ?. À ce moment-là, il n'est pas nécessaire de le placer dans un guillemet simple.
- Obtenez un objet de la classe PreparedStaetment.
Il peut être obtenu avec l'objet .preparedStatement () de la classe Connection. Passez l'instruction SQL comme argument.
- Dans l'objet .setHoge () de la classe PreparedStatement, insérez une valeur dans ?. À ce moment-là, setInt () pour le type entier et setString () pour la valeur de type chaîne.
Dans l'argument, spécifiez la position de ?. S'il s'agit du premier? De? Sur le côté gauche de l'instruction SQL, passez 1 dans le premier argument et la valeur que vous souhaitez insérer dans le deuxième argument.
- Il peut être exécuté par l'objet .executeQuery () ou .executeUpdate () de la classe PreparedStatement.
La méthode utilisée dépend de la présence ou de l'absence du ResultSet renvoyé.
Connection con = DriverManager(hoge,hoge,hoge);
String sql = "select name from hogeData where id = ?";
Statement st = con.preparedStatement(sql);
st.setInt(1, 1);
ResultSet rs = st.executeQuery();
Si vous souhaitez en savoir plus sur les raisons pour lesquelles vous devriez l'utiliser, lisez ci-dessous.
(Je l'ajouterai plus tard)