• 功能:使用PreparedStatement操作数据表,其功能与Statement一致,但为何要使用PreparedStatement呢。

    • 一、原因:
    • 1.使用sql语句进行操作数据表时,需要拼写sql语句,在拼写时容易出错,且不易排查,所以使用PreparedStatement

      *操作数据表时,降低sql语句的拼写难度,简化拼写sql语句的步骤,提高代码的可维护性和可读性。
    • 2.同时还可以有效的防SQL注入。

      *SQL注入:利用某些系统没有对用户输入的数据进行充分的检查,而而在用户中注入非法的SQL语句段或命令从而利用系统的SQL引擎

      *完成恶意操作。

      例如:select from user where username = ‘a’ OR PASSWORD = ’ and password = ’ OR ‘1’ = ‘1’

      *即使不知道账号密码,却可以登录成功。
    • 3.PerparedStatement能够最大可能的提高性能
    • 二、 介绍:PreparedStatement是Statement的子接口,可以传入带占位符的sql语句,也提供了补充占位符变量的方法。
    • 三、操作:向数据表中插入一条Student记录
  • 步骤:

    • 1.sql = “insert into examStudent values (?,?,?,?,?,?)”;其中?表示:占位符
    • 2.获取连接Connection
    • 3.创建PreparedStatement ps = conn.preparedStatement(sql);
    • 4.调用PreparedStatement的setXxx(int index,Object value);设置占位符的值

      *其中索引值index从1开始。
    • 5.执行sql语句,使用executeQuery()方法进行查询和executeUpdate()方法进行更新,执行时也不需要传入sql语句。
    • 6.关闭连接
  • 实例

//插入一条记录
@Test
public void test(){
//1.sql语句
String sql = "insert into customers(name,age,birth,address) values(?,?,?,?)";
Connection conn = null;
PreparedStatement ps = null;
try {
//2.连接
conn = TestTools.getConnection();
//3.获取PerparedStatement对象
ps = conn.prepareStatement(sql);
//4.PreparedStatement对象调用setXxx()方法,设置占位符的值
ps.setString(1, "张强");
ps.setString(2, "32");
ps.setDate(3, new Date(new java.util.Date().getTime()));
ps.setString(4, "河南省");
//5.执行sql语句
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
//6.关闭连接
TestTools.release(ps, conn);
}
}

JDBC(4)—Preparedstatement的更多相关文章

  1. JDBC(4)PreparedStatement

    PreparedStatement: 是一个预编译对象 是Statement的子接口 允许数据库预编译SQL 执行SQL的时候,无需重新传入SQL语句,它们已经编译SQL语句 执行SQL语句 :exe ...

  2. Java基础(三十二)JDBC(2)连接数据库

    一.连接数据库的过程 连接数据库的过程:加载数据库驱动程序,不过只需在第一次访问数据库时加载一次,然后在每次访问数据库时创建一个Connection实例,然后执行操作数据库的SQL语句,并返回执行结果 ...

  3. 跟着刚哥学习Spring框架--JDBC(六)

    Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要提供JDBC模板方式.关系数据库对象化方式.SimpleJdbc方式.事务管理来简 ...

  4. JDBC 学习笔记(六)—— PreparedStatement

    1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...

  5. 浅谈JDBC(一)

    一.JDBC技术引言 1.什么是JDBC技术 提供了一套接口规范,利用java代码进行数据库操作. 2.JDBC技术的核心思想 对于程序员来说,代码访问数据库分为三个步骤:1.通过数据库的账号密码.2 ...

  6. JDBC(一)之细说JDBC

    Properties info = new Properties();//要参考数据库文档 info.setProperty("user", "root"); ...

  7. JDBC(三)数据库连接池(DBCP、C3P0)

    前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...

  8. JAVA基础-JDBC(一)

    一.JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据库都有着一套自己的规范,JAVA对其操 ...

  9. JDBC(四)

    1 Apache DBUtils框架 1.1 DBUtils简介 commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本非常低,并且使用db ...

随机推荐

  1. composer 安装依赖缓慢,查看 composer 的详细执行日志

    在 windows WSL 上安装 composer 依赖 composer install 发现执行异常缓慢,怀疑没有走国内的镜像,而是直接访问的 github. 需要能看到 composer 的执 ...

  2. PHP 中解析 url 并得到 url 参数

    这里介绍两种对url操作的方法: 1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($ ...

  3. django----Form扩展

    用第二种方式需要加上下面的这个: 三.判断用户民是不存在,存在就不添加了 from django.core.exceptions import ValidationError initial  修改时 ...

  4. python3笔记(二)Python语言基础

    缩进 要求严格的代码缩进是python语法的一大特色,就像C语言家族(C.C++.Java等等)中的花括号一样重要,在大多数场合还非常有必要.在很多代码规范里面也都有要求代码书写按照一定的规则进行换行 ...

  5. python + slenium自动化测试设置元素等待

    WebDriver 提供了两种类型的等待:显式等待和隐式等待. 显式等待 显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常 (TimeoutExcepti ...

  6. python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)

    昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...

  7. python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)

    js总结 js: 1.ECMAScript5 ES5语法 2.DOM CRUD 获取 3种方式 id tag className //面向对象 对象 : 属性和方法 某个对象中 function $( ...

  8. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

  9. SpringBank 开发日志 一种简单的拦截器设计实现

    当交易由Action进入Service之前,需要根据不同的Service实际负责业务的不同,真正执行Service的业务逻辑之前,做一些检查工作.这样的拦截器应该是基于配置的,与Service关联起来 ...

  10. python全栈开发day50-jquery之ajax、XmlHttpRquest

    一.昨日内容回顾 1.jquery位置信息 width() ..,innetWidth() .outWidth() offset().top left scrollTop 2.事件流 DOM2级 (1 ...