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

 package boom;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import oracle.net.aso.s; /**
* Statement和
* @author Administrator
*
*/
public class JDBC_test05 {
public static void main(String[] args) {
// 声明参数
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String username = "scott";
String userpwd = "tiger"; // 声明连接
Connection connection = null;
//Statement statement = null;
PreparedStatement ps = null;
ResultSet resultSet = null; try {
// 1:加载驱动
Class.forName(driver);
// 2:创建连接
connection = DriverManager.getConnection(url, username, userpwd);
// 3:创建SQL命令发送器
//statement = connection.createStatement();
/**
* prepareStatement进行添加SQL,先写SQL语句,在创建prepareStatement发送器
*/
String psql = "insert into Tencent values(?,?)";
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测试成功)");
} // 4:发SQL语句
/**
* Statement进行添加:缺:复用性低,添加n条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测试成功)");
}*/ } catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(resultSet != null)
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(connection != null)
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

JDBC的两种sql命令发送器比较【Statement:PreparedStatement】的更多相关文章

  1. java:comp/env/jdbc/ 的两种配置方法

    1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  2. Sql server 事务的两种用法

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

  3. 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式

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

  4. 【转】shell 教程——01 Shell简介:什么是Shell,Shell命令的两种执行方式

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

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

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

  6. shell教程-001:shell简介 什么是shell,shell命令的两种执行方式

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

  7. JDBC模拟登陆及SQL语句防注入问题

    实现模拟登陆效果:基于表Tencent package boom; import java.sql.Connection; import java.sql.DriverManager; import ...

  8. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  9. JSP连接数据库的两种方式:Jdbc-Odbc桥和Jdbc直连(转)

    学JSP的同学都要知道怎么连数据库,网上的示例各有各的做法,弄得都不知道用谁的好.其实方法千变万化,本质上就两种:Jdbc-Odbc桥和Jdbc直连. 下面先以MySQL为例说说这两种方式各是怎么连的 ...

随机推荐

  1. React Native的ListView的布局使用

    1> ListView组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. ListView更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,ListView ...

  2. HBuilder X 中使用模拟器进行App开发

    第一步:下载HBuilder X(建议下载开发版) 第二步:下载个模拟器,我这里使用的是(MuMu模拟器) 第三步:在HBuilder X 中新建一个项目 然后,打开模拟器 如果 HBuilder x ...

  3. sql server 备份语句

    1.BACKUP DATABASE your_database TO DISK = 'diff.bak'with DIFFERENTIAL #差异备份,仅备份数据2.BACKUP DATABASE y ...

  4. sql绕过转义符注入

    宽字节绕过总结 1.  重点:转义符反斜杠\,ASCII码0x5C 2.  在双字节字符集中, 在\前面增加高字节,0x5C被当做低字节,组合为“汉字”,导致\符号被“吃掉”,后续字符逃出限制,从而绕 ...

  5. IT架构的本质

    老僧三十年前未参禅时,见山是山,见水是水. 及至后来,亲见知识,有个入出,见山不是山,见水不是水. 而今得个休歇处,依前见山只是山,见水只是水. 参禅的三重境界在IT技术圈同样适用,初学者感叹每个产品 ...

  6. [转帖]如何在Linux上使用命令行查看硬件信息

    如何在Linux上使用命令行查看硬件信息 时间:2016-01-13   作者:admin 分类:新手入门 阅读:126次 http://embeddedlinux.org.cn/emb-linux/ ...

  7. [转帖]为何 linux 要用 tar.gz,而不用 7z 或 zip?

    为何 linux 要用 tar.gz,而不用 7z 或 zip? http://embeddedlinux.org.cn/emb-linux/entry-level/201908/13-8776.ht ...

  8. [转帖]字符编码笔记:ASCII,Unicode 和 UTF-8

    字符编码笔记:ASCII,Unicode 和 UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 转帖 ...

  9. Hadoop集群搭建-05安装配置YARN

    Hadoop集群搭建-04安装配置HDFS  Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hadoop集群搭建-01前期准备 先保证集群5台虚 ...

  10. BOF和EOF的详细解释 ADO的三个核心对象

    使用ADO连接数据库进行查一个列表询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果.这个内存中的列表就是数据集.在你的程序里面rs就是标识的这个数据 ...