zoukankan      html  css  js  c++  java
  • JDBC的两种sql命令发送器比较【Statement:PreparedStatement】

    PreparedStatement 接口继承 Statement接口
    如果需要多次执行一个SQL语句,可以使用PreparedStatement对象。在创建PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement对象,可以得到多个不同的结果。
    优势:执行效率高、代码可读性强、安全性高
    Statement:复用性低,添加n条SQL就要写多条进行添加,浪费内存。

    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)

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

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

    // 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 】
    贴上核心代码:

    /**
    * 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 】
    总的代码贴上:【比较乱,关注核心改动代码即可】

      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
  • 相关阅读:
    『PyTorch』第二弹_张量
    大数据技术之_12_Sqoop学习_Sqoop 简介+Sqoop 原理+Sqoop 安装+Sqoop 的简单使用案例+Sqoop 一些常用命令及参数
    HBase 构建 Scanner 体系图解
    HBase 默认刷写文件 flush_compact.xml 注释解析
    Vim 命令、操作、快捷键全集
    10个在UNIX或Linux终端上快速工作的建议
    如何三招帮你排查Linux中的硬件问题
    介绍一些有趣的MySQL pager命令
    MySQL数据库select语句的使用方法
    能够在Linux系统中运行的5款大型耐玩游戏
  • 原文地址:https://www.cnblogs.com/cao-yin/p/9774768.html
Copyright © 2011-2022 走看看