JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别
和 Statement一样,PreparedStatement也是用来执行sql语句的
与创建Statement不同的是,需要根据sql语句创建PreparedStatement
除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- public class TestJDBC {
- public static void main(String[] args) {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- String sql = "insert into hero values(null,?,?,?)";
- try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
- // 根据sql语句创建PreparedStatement
- PreparedStatement ps = c.prepareStatement(sql);
- ) {
- // 设置参数
- ps.setString(1, "提莫");
- ps.setFloat(2, 313.0f);
- ps.setInt(3, 50);
- // 执行
- ps.execute();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Statement 需要进行字符串拼接,可读性和维护性比较差
- String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";
PreparedStatement 使用参数设置,可读性好,不易犯错
- String sql = "insert into hero values(null,?,?,?)";
- public class TestJDBC {
- public static void main(String[] args) {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- String sql = "insert into hero values(null,?,?,?)";
- try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
- Statement s = c.createStatement();
- PreparedStatement ps = c.prepareStatement(sql);
- ) {
- // Statement需要进行字符串拼接,可读性和维修性比较差
- String sql0 = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
- s.execute(sql0);
- // PreparedStatement 使用参数设置,可读性好,不易犯错
- // "insert into hero values(null,?,?,?)";
- ps.setString(1, "提莫");
- ps.setFloat(2, 313.0f);
- ps.setInt(3, 50);
- ps.execute();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
原文地址:http://how2j.cn/k/jdbc/jdbc-preparedstatement/388.html#nowhere
execute与executeUpdate的相同点:都可以执行增加,删除,修改
- public class TestJDBC {
- public static void main(String[] args) {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
- Statement s = c.createStatement();) {
- String sqlInsert = "insert into Hero values (null,'盖伦',616,100)";
- String sqlDelete = "delete from Hero where id = 100";
- String sqlUpdate = "update Hero set hp = 300 where id = 100";
- // 相同点:都可以执行增加,删除,修改
- s.execute(sqlInsert);
- s.execute(sqlDelete);
- s.execute(sqlUpdate);
- s.executeUpdate(sqlInsert);
- s.executeUpdate(sqlDelete);
- s.executeUpdate(sqlUpdate);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
不同点:
不同1:
execute可以执行查询语句
然后通过getResultSet,把结果集取出来
executeUpdate不能执行查询语句
不同2:
execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
executeUpdate返回的是int,表示有多少条数据受到了影响
- public class TestJDBC {
- public static void main(String[] args) {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
- Statement s = c.createStatement();) {
- // 不同1:execute可以执行查询语句
- // 然后通过getResultSet,把结果集取出来
- String sqlSelect = "select * from hero";
- s.execute(sqlSelect);
- ResultSet rs = s.getResultSet();
- while (rs.next()) {
- System.out.println(rs.getInt("id"));
- }
- // executeUpdate不能执行查询语句
- // s.executeUpdate(sqlSelect);
- // 不同2:
- // execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
- boolean isSelect = s.execute(sqlSelect);
- System.out.println(isSelect);
- // executeUpdate返回的是int,表示有多少条数据受到了影响
- String sqlUpdate = "update Hero set hp = 300 where id < 100";
- int number = s.executeUpdate(sqlUpdate);
- System.out.println(number);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
原文地址:http://how2j.cn/k/jdbc/jdbc-execute/389.html#nowhere
JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别的更多相关文章
- jdbc预编译
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp20 JAVA_JDBC预编译 相关知识点 什么是预编译语句? 预编译语句P ...
- jdbc预编译实现方式
jdbc预编译可以有两种方式: 方式一.jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了. public static void mai ...
- jdbc预编译插入数据操作
package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
- JDBC预编译语句表名占位异常
有时候,我们有这样的需求,需要清空多个表的内容,这样我们有两种做法,可用delete from table 或 truncate table table,两种方法视情况而定,前者只是一条条的删除表数据 ...
- JDBC 预编译语句对象
Statement的安全问题:Statement的执行其实是直接拼接SQL语句,看成一个整体,然后再一起执行的. String sql = "xxx"; // ? 预先对SQL语句 ...
- JDBC中 execute 与 executeUpdate的区别
相同点 execute与executeUpdate的相同点:都可以执行增加,删除,修改 不同点 execute可以执行查询语句 然后通过getResultSet,把结果集取出来 executeUpda ...
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- mybatis之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
随机推荐
- Java中判断数组是否为空
一维数组// 一维数组: int[] arrayif(array == null || array.length == 0) return true; 二维数组//二维数组: int[][] a ...
- JavaWeb之基础(2) —— HTTP协议
1. 粗讲什么是HTTP协议 HTTP协议的全程是Hyper Text Transfer Protocol,超文本传输协议,见名知意,这是个用来控制传输超文本的协议.下面就来简单说说什么是HTTP协议 ...
- Kali Linux硬盘扩容
传送门--->http://www.kali.org.cn/thread-27079-1-1.html.kali虚拟机扩容
- docker gitlab and gitlab api
https://docs.gitlab.com/ee/api/repositories.html curl --header "PRIVATE-TOKEN: fxhDXPRJAowCouXE ...
- pyinstaller参数介绍以及总结
最近利用tkinter+python+pyinstaller实现了小工具的项目,在此记录下pyinstaller相关参数以及爬过的坑. 一.pyinstaller相关参数 -F, –onefile 打 ...
- NGUI: Next-Gen UI 2018.3.0f
https://assetstore.unity.com/packages/tools/gui/ngui-next-gen-ui-2413 NGUI is a very powerful UI sys ...
- 响应面分析 | response surface analysis | R代码
先开题,慢慢补充. 参考: 什么是响应面(RSM)分析 Response-Surface Methods in R, Using rsm In-class Examples with R Code R ...
- flutter 数据存储 SP和sqlite
添加插件: shared_preferences: ^0.4.2 path_provider: ^1.2.0 sqflite: ^0.12.0 import 'dart:async'; import ...
- MyBatis原理总结(前期准备)
1.不同框架解决不用问题,框架封装了很多细节,开发者可以使用简单的方式实现功能. 2.三层架构: 1.表现层 2.业务层 3.持久层 都有相应的处理框架. 3.持久层的技术解决方案: JDBC技 ...
- 译文:A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation
A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation 众所周知,将来自多个传感器的信息融合用于机器人导航 ...