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
相關文章
相關標籤/搜索