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

转载于:https://www.cnblogs.com/cao-yin/p/9774768.html

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

  1. 标准 mysql 数据库 jdbc 的两种写法 懒汉式 和 饿汉式

    饿汉式写法如下:  建议使用 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcepti ...

  2. ff 15 调用函数与e8调用函数的区别 call的两种二进制命令

    ff 15 和e8都是用来调用函数的机器码,看一个例子: 218 f9ebc53a 6a00                  push    0 218 f9ebc53c ff1500c9ebf9  ...

  3. Sql server 事务的两种用法

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便 ...

  4. docker服务启动:service docker start和systemctl start docker两种命令有什么区别?

    一样的,systemctl 是cnetos7的方式 但是在ubuntu上两种方式都能跑 参考文章:systemctl start docker 和 service docker start 两种启动命 ...

  5. Shell简介:什么是Shell,Shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  6. Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表、修改表,以及增、删、改、查)之详细攻略

    Database之SQLSever:SQLSever数据表管理(GUI法/SQL语句命令法两种方法实现建立表.修改表,以及增.删.改.查)之详细攻略 目录 一.两种方法建立表.修改表,插入多条数据记录 ...

  7. Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份、差异备份、日志备份)、还原、删除、修改数据库等案例)之详细攻略

    Database之SQLSever:SQLSever数据库管理(GUI法/SQL语句命令法两种方法实现备份(完整备份.差异备份.日志备份).还原.删除.修改数据库等案例)之详细攻略 目录 数据库管理 ...

  8. SQL server(MSSQL)客户端工具登录数据库的两种命令行登录方式

    我们安装了sqlserver服务器和sqlserver客户端工具之后,可以使用两种命令行方式登录数据库: >sqlwb -S servername或IP -E     #使用当前windows系 ...

  9. java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

    用oracle数据库新建连接时遇到ora-12505,此问题解决后又出现ora-12519错误,郁闷的半天,经过一番折腾问题解决,下面小编把我的两种解决方案分享给大家,仅供参考. 解决方案一: 今天工 ...

最新文章

  1. cityhash 算法的使用
  2. 图像检测中的交并比IoU算法原理
  3. python newbie——PE No.5
  4. 【XSY3048 】Polynominal 数学
  5. 假期不能错过的音视频领域技术进展
  6. jedis watch Java_jedis操作redis的几种常见方式总结
  7. java基础--IO流之File类
  8. 有源rc电压放大器实验报告_为什么将放大器装在示波器探头前端?
  9. 第 19 次 CCF CSP 认证 202006-4 1246(digits)
  10. 算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)
  11. 快速掌握 深度学习(Deep Learning) 常用概念术语,常用模型
  12. python匿名函数表达式_在Python中使用lambda表达式进行赋值
  13. aiml php,基于 AIML 的 PHP 聊天机器人
  14. 1万条数据大概占多大空间_国漫丨2019年上半年漫画数据报告
  15. html背景音乐自动播放embed,HTML中添加音乐video embed audio
  16. 如何做网络投票的刷票外挂(一)
  17. CentOS7.5安裝配置多协议下载器Aria2
  18. Android 开源框架精选
  19. Ubuntu系统python3.6版本,networkx画关系图显示中文处理
  20. 如何在Ubuntu 14.04上安装轻量级的Budgie桌面

热门文章

  1. Linux升级as,Linux AS版 是什么意思?
  2. mysql 郝朝阳_秒级故障切换!用MHA轻松实现MySQL高可用(三)
  3. html 浮动脱离文档流,CSS标准文档流与脱离文档流
  4. java算法题常用到的一些api,含面试题+答案
  5. Android开发者值得深入思考的几个问题,大厂面经合集
  6. Keras【Deep Learning With Python】—使用keras-神经网络来做线性回归问题
  7. python2 队列的使用_使用2个队列创建堆栈
  8. opengl正方形绕点旋转_中考热点:再说旋转动点问题中的最值问题之提分攻略
  9. 网络推广策略之网站文章收录少的时候都是哪些因素导致的?
  10. 做网络推广浅析影响网站打开速度的因素,促进网站SEO优化效果提升!