JDBC的两种sql命令发送器比较【Statement:PreparedStatement】

2021年09月15日 阅读数:1
这篇文章主要向大家介绍JDBC的两种sql命令发送器比较【Statement:PreparedStatement】,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

PreparedStatement 接口继承 Statement接口
若是须要屡次执行一个SQL语句,可使用PreparedStatement对象。在建立PreparedStatement对象时,经过传递不一样参数值屡次执行PreparedStatement对象,能够获得多个不一样的结果。
优点:执行效率高、代码可读性强、安全性高
Statement:复用性低,添加n条SQL就要写多条进行添加,浪费内存。
java

PreparedStatement接口中的主要方法
void setString (int parameterIndex, String x)
void setFloat (int parameterIndex, float x)
void setInt (int parameterIndex, int x)
void setDate (int parameterIndex, java.sql.Date x)
void setDouble (int parameterIndex, double x)sql

ResultSet executeQuery () //返回单结果集,一般用于SELECT语句
boolean execute () //返回布尔值,一般用于insert,update,delete语句
int executeUpdate () //返回操做影响的行数,一般用于insert,update,delete语句安全

举栗子:【Statement】
贴上核心代码:oracle

// 4:发SQL语句
String add01 = "insert into Tencent values('杰西','abc')";
String add02 = "insert into Tencent values('麦克','123')";
int n1 = statement.executeUpdate(add01); int n2 = statement.executeUpdate(add02); // 判断 if(n1>0) { System.out.println("JDBC_test05.main(01测试成功)"); } if(n2>0) { System.out.println("JDBC_test05.main(02测试成功)"); }

效果图:

总结:Statement在进行多条语句添加时候,须要建立多条SQL语句来完成。这样代码的冗余度高,若添加几百条数据,就得建立几百条SQL发送器命令去添加,即麻烦也耗内存。还不安全,具备SQL注入的风险。
举栗子:【PreparedStatement 】
贴上核心代码:ide

/**
* prepareStatement进行添加SQL,先写SQL语句,在建立prepareStatement发送器
*/
// 建立SQL发送语句
//values(?,?)?表明占位符。对应的表字段
String psql = "insert into Tencent values(?,?)";
// 建立prepareStatement发送器
ps = connection.prepareStatement(psql);
//添加多条测试
//第一条
// 接收占位符,对应的表字段顺序[帐号,密码]
ps.setString(1,"游戏解说柚子");
ps.setString(2,"abcd");
int ps01 = ps.executeUpdate();
//第二条
ps.setString(1,"吃鸡小分队");
ps.setString(2,"kkkk");
int ps02 = ps.executeUpdate();
//第三条
ps.setString(1,"陈一发");
ps.setString(2,"cccc");
int ps03 = ps.executeUpdate();

// 判断
if(ps01>0) {
	System.out.println("JDBC_test05.main(ps01测试成功)");
}
if(ps02>0) {
	System.out.println("JDBC_test05.main(ps02测试成功)");
}
if(ps03>0) {
	System.out.println("JDBC_test05.main(ps03测试成功)");
}

效果图:
测试

总结:优点:执行效率高、代码可读性强、安全性高。【通常都是使用:PreparedStatement 】
总的代码贴上:【比较乱,关注核心改动代码便可】url

  1 package boom;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.sql.Statement;
  9 
 10 import oracle.net.aso.s;
 11 
 12 /**
 13  * Statement和
 14  * @author Administrator
 15  *
 16  */
 17 public class JDBC_test05 {
 18     public static void main(String[] args) {
 19         // 声明参数
 20         String driver = "oracle.jdbc.driver.OracleDriver";
 21         String url = "jdbc:oracle:thin:@localhost:1521:XE";
 22         String username = "scott";
 23         String userpwd = "tiger"; 
 24         
 25         // 声明链接
 26         Connection connection = null;
 27         //Statement statement = null;
 28         PreparedStatement ps = null;
 29         ResultSet resultSet = null;
 30         
 31         try {
 32             // 1:加载驱动
 33             Class.forName(driver);
 34             // 2:建立链接
 35             connection = DriverManager.getConnection(url, username, userpwd);
 36             // 3:建立SQL命令发送器
 37             //statement = connection.createStatement();
 38             /**
 39              * prepareStatement进行添加SQL,先写SQL语句,在建立prepareStatement发送器
 40              */
 41             String psql = "insert into Tencent values(?,?)";
 42             ps = connection.prepareStatement(psql);
 43             //添加多条
 44             //第一条
 45             ps.setString(1,"游戏解说柚子");
 46             ps.setString(2,"abcd");
 47             int ps01 = ps.executeUpdate();
 48             //第二条
 49             ps.setString(1,"吃鸡小分队");
 50             ps.setString(2,"kkkk");
 51             int ps02 = ps.executeUpdate();
 52             //第三条
 53             ps.setString(1,"陈一发");
 54             ps.setString(2,"cccc");
 55             int ps03 = ps.executeUpdate();
 56             
 57             // 判断
 58             if(ps01>0){
 59                 System.out.println("JDBC_test05.main(ps01测试成功)");
 60             }
 61             if(ps02>0){
 62                 System.out.println("JDBC_test05.main(ps02测试成功)");
 63             }
 64             if(ps03>0){
 65                 System.out.println("JDBC_test05.main(ps03测试成功)");
 66             }
 67             
 68             
 69             // 4:发SQL语句
 70             /**
 71              * Statement进行添加:缺:复用性低,添加n条SQL就要写多条进行添加,浪费内存。
 72              */
 73             
 74             /*String add01 = "insert into Tencent values('杰西','abc')";
 75             String add02 = "insert into Tencent values('麦克','123')";
 76             
 77             int n1 = statement.executeUpdate(add01);
 78             int n2 = statement.executeUpdate(add02);
 79             
 80             // 判断
 81             if(n1>0){
 82                 System.out.println("JDBC_test05.main(01测试成功)");
 83             }
 84             if(n2>0){
 85                 System.out.println("JDBC_test05.main(02测试成功)");
 86             }*/
 87             
 88         } catch (ClassNotFoundException | SQLException e) {
 89             // TODO Auto-generated catch block
 90             e.printStackTrace();
 91         }finally{
 92             try {
 93                 if(resultSet != null)
 94                 resultSet.close();
 95             } catch (SQLException e) {
 96                 // TODO Auto-generated catch block
 97                 e.printStackTrace();
 98             }
 99             try {
100                 if(ps != null)
101                 ps.close();
102             } catch (SQLException e) {
103                 // TODO Auto-generated catch block
104                 e.printStackTrace();
105             }
106             try {
107                 if(connection != null)
108                     connection.close();
109             } catch (SQLException e) {
110                 // TODO Auto-generated catch block
111                 e.printStackTrace();
112             }
113         }
114     }
115 }
View Code