和 Statement一样,PreparedStatement也是用来执行sql语句的
与创建Statement不同的是,需要根据sql语句创建PreparedStatement
除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.SQLException;
  5.  
  6. public class TestJDBC {
  7. public static void main(String[] args) {
  8. try {
  9. Class.forName("com.mysql.jdbc.Driver");
  10. } catch (ClassNotFoundException e) {
  11. e.printStackTrace();
  12. }
  13.  
  14. String sql = "insert into hero values(null,?,?,?)";
  15. try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
  16. // 根据sql语句创建PreparedStatement
  17. PreparedStatement ps = c.prepareStatement(sql);
  18. ) {
  19.  
  20. // 设置参数
  21. ps.setString(1, "提莫");
  22. ps.setFloat(2, 313.0f);
  23. ps.setInt(3, 50);
  24. // 执行
  25. ps.execute();
  26.  
  27. } catch (SQLException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31.  
  32. }
  33. }

Statement 需要进行字符串拼接,可读性和维护性比较差

  1. String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";

PreparedStatement 使用参数设置,可读性好,不易犯错

  1. String sql = "insert into hero values(null,?,?,?)";
  1. public class TestJDBC {
  2. public static void main(String[] args) {
  3.  
  4. try {
  5. Class.forName("com.mysql.jdbc.Driver");
  6. } catch (ClassNotFoundException e) {
  7. e.printStackTrace();
  8. }
  9.  
  10. String sql = "insert into hero values(null,?,?,?)";
  11. try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
  12. Statement s = c.createStatement();
  13. PreparedStatement ps = c.prepareStatement(sql);
  14. ) {
  15. // Statement需要进行字符串拼接,可读性和维修性比较差
  16. String sql0 = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
  17. s.execute(sql0);
  18.  
  19. // PreparedStatement 使用参数设置,可读性好,不易犯错
  20. // "insert into hero values(null,?,?,?)";
  21. ps.setString(1, "提莫");
  22. ps.setFloat(2, 313.0f);
  23. ps.setInt(3, 50);
  24. ps.execute();
  25. } catch (SQLException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. }
  29.  
  30. }
  31. }

原文地址:http://how2j.cn/k/jdbc/jdbc-preparedstatement/388.html#nowhere

execute与executeUpdate的相同点:都可以执行增加,删除,修改

  1. public class TestJDBC {
  2. public static void main(String[] args) {
  3. try {
  4. Class.forName("com.mysql.jdbc.Driver");
  5. } catch (ClassNotFoundException e) {
  6. e.printStackTrace();
  7. }
  8.  
  9. try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
  10. Statement s = c.createStatement();) {
  11.  
  12. String sqlInsert = "insert into Hero values (null,'盖伦',616,100)";
  13. String sqlDelete = "delete from Hero where id = 100";
  14. String sqlUpdate = "update Hero set hp = 300 where id = 100";
  15.  
  16. // 相同点:都可以执行增加,删除,修改
  17.  
  18. s.execute(sqlInsert);
  19. s.execute(sqlDelete);
  20. s.execute(sqlUpdate);
  21. s.executeUpdate(sqlInsert);
  22. s.executeUpdate(sqlDelete);
  23. s.executeUpdate(sqlUpdate);
  24.  
  25. } catch (SQLException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. }
  29.  
  30. }
  31. }

不同点:

不同1:
execute可以执行查询语句
然后通过getResultSet,把结果集取出来
executeUpdate不能执行查询语句
不同2:
execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
executeUpdate返回的是int,表示有多少条数据受到了影响

  1. public class TestJDBC {
  2. public static void main(String[] args) {
  3.  
  4. try {
  5. Class.forName("com.mysql.jdbc.Driver");
  6. } catch (ClassNotFoundException e) {
  7. e.printStackTrace();
  8. }
  9.  
  10. try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
  11. Statement s = c.createStatement();) {
  12.  
  13. // 不同1:execute可以执行查询语句
  14. // 然后通过getResultSet,把结果集取出来
  15. String sqlSelect = "select * from hero";
  16.  
  17. s.execute(sqlSelect);
  18. ResultSet rs = s.getResultSet();
  19. while (rs.next()) {
  20. System.out.println(rs.getInt("id"));
  21. }
  22.  
  23. // executeUpdate不能执行查询语句
  24. // s.executeUpdate(sqlSelect);
  25.  
  26. // 不同2:
  27. // execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
  28. boolean isSelect = s.execute(sqlSelect);
  29. System.out.println(isSelect);
  30.  
  31. // executeUpdate返回的是int,表示有多少条数据受到了影响
  32. String sqlUpdate = "update Hero set hp = 300 where id < 100";
  33. int number = s.executeUpdate(sqlUpdate);
  34. System.out.println(number);
  35.  
  36. } catch (SQLException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40.  
  41. }
  42. }

原文地址:http://how2j.cn/k/jdbc/jdbc-execute/389.html#nowhere

JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别的更多相关文章

  1. jdbc预编译

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp20 JAVA_JDBC预编译 相关知识点 什么是预编译语句? 预编译语句P ...

  2. jdbc预编译实现方式

    jdbc预编译可以有两种方式: 方式一.jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了. public static void mai ...

  3. jdbc预编译插入数据操作

    package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...

  4. JDBC预编译语句表名占位异常

    有时候,我们有这样的需求,需要清空多个表的内容,这样我们有两种做法,可用delete from table 或 truncate table table,两种方法视情况而定,前者只是一条条的删除表数据 ...

  5. JDBC 预编译语句对象

    Statement的安全问题:Statement的执行其实是直接拼接SQL语句,看成一个整体,然后再一起执行的. String sql = "xxx"; // ? 预先对SQL语句 ...

  6. JDBC中 execute 与 executeUpdate的区别

    相同点 execute与executeUpdate的相同点:都可以执行增加,删除,修改 不同点 execute可以执行查询语句 然后通过getResultSet,把结果集取出来 executeUpda ...

  7. mybatis深入理解之 # 与 $ 区别以及 sql 预编译

    mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...

  8. mybatis之 # 与 $ 区别以及 sql 预编译

    mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...

  9. mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译

    mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...

随机推荐

  1. Java中判断数组是否为空

    一维数组// 一维数组: int[] arrayif(array == null || array.length == 0)    return true; 二维数组//二维数组: int[][] a ...

  2. JavaWeb之基础(2) —— HTTP协议

    1. 粗讲什么是HTTP协议 HTTP协议的全程是Hyper Text Transfer Protocol,超文本传输协议,见名知意,这是个用来控制传输超文本的协议.下面就来简单说说什么是HTTP协议 ...

  3. Kali Linux硬盘扩容

    传送门--->http://www.kali.org.cn/thread-27079-1-1.html.kali虚拟机扩容

  4. docker gitlab and gitlab api

    https://docs.gitlab.com/ee/api/repositories.html curl --header "PRIVATE-TOKEN: fxhDXPRJAowCouXE ...

  5. pyinstaller参数介绍以及总结

    最近利用tkinter+python+pyinstaller实现了小工具的项目,在此记录下pyinstaller相关参数以及爬过的坑. 一.pyinstaller相关参数 -F, –onefile 打 ...

  6. 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 ...

  7. 响应面分析 | response surface analysis | R代码

    先开题,慢慢补充. 参考: 什么是响应面(RSM)分析 Response-Surface Methods in R, Using rsm In-class Examples with R Code R ...

  8. flutter 数据存储 SP和sqlite

    添加插件: shared_preferences: ^0.4.2 path_provider: ^1.2.0 sqflite: ^0.12.0 import 'dart:async'; import ...

  9. MyBatis原理总结(前期准备)

    1.不同框架解决不用问题,框架封装了很多细节,开发者可以使用简单的方式实现功能. 2.三层架构: 1.表现层  2.业务层  3.持久层  都有相应的处理框架. 3.持久层的技术解决方案: JDBC技 ...

  10. 译文:A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation

    A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation 众所周知,将来自多个传感器的信息融合用于机器人导航 ...