使用PreparedStatement进行数据库的更新及查询操作。

PreparedStatement

PreparedStatement是statement子接口。属于预处理。

使用statement操作时候肯定要执行一条完整的sql语句。执行之前是使用connection直接创建的。

好比占座,证明此坐已经有人,但是等待人的到来。

常用方法:

connection接口:

 PreparedStatement prepareStatement(String sql)
创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

通过以上方法可以得到PreparedStatement 接口实例。

之后通过一系列的setXXX方法设置内容,根据位置设置。

如果更新的话,就会返回更新数据的记录数(更新了几条数据)。

注意点:

关于日期输入问题:正常情况都是使用java.utill.Date表示日期,但是preparedStatement中,如果要想使用日期,必须使用java.sql.Data类型。

java.lang.Object
继承者 java.util.Date
继承者 java.sql.Date

要想将一个java.utill.Data转换成java.sql.Data,应该使用如下形式:

  通过SimpleDateFormat类将一个字符串编程java.utill.Data类型。

  通过java.utill.Data取出具体日期数(通过getTime()方法),将其变为java.sql.Data类型。

范例:PreparedStatement执行数据库的插入操作。

package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
import java.text.SimpleDateFormat ;
public class PreparedStatementDemo01 {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库操作
String name = "李兴华" ; // 姓名
int age = 30 ; // 年龄
String birthday = "2007-08-27" ; // 生日      日期类型转换
java.util.Date temp = null ;
temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ;
java.sql.Date bir = new
java.sql.Date(temp.getTime()) ;
String sql = "INSERT INTO user(name,age,birthday) VALUES (?,?,?) " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 实例化PreapredStatement对象
pstmt.setString(1,name) ;  设置列的内容。
pstmt.setInt(2
,age) ;
pstmt.setDate(3,bir) ;
int t = pstmt.executeUpdate() ; // 执行更新
System.out.println(t);
pstmt.close() ;
conn.close() ; // 数据库关闭
}
};

输出结果:

Sun Apr 09 21:58:04 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
1

表示,更新一条数据。

查询结果:

既然可以通过此接口完成更新操作,

那么通过此接口执行查询操作。

package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet;
import java.text.SimpleDateFormat ;
public class PreparedStatementDemo01 {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库操作
String keyWord = "李" ; // 设置查询关键字
ResultSet rs = null ; // 接收查询结果
String sql = "SELECT name,age,birthday " +
" FROM user WHERE name LIKE ? " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 实例化PreapredStatement对象
pstmt.setString(1,"%"+keyWord+"%") ;
rs = pstmt.executeQuery() ; // 执行查询
while(rs.next()){
String name = rs.getString(1) ;
int age = rs.getInt(2) ;
java.util.Date d = rs.getDate(3) ;
System.out.print("姓名:" + name + ";") ;
System.out.print("年龄:" + age + ";") ;
System.out.println("生日:" + d + ";") ;
System.out.println("-------------------------") ;
}
rs.close() ;
pstmt.close() ;

conn.close() ; // 数据库关闭
}
};

输出结果:

Sun Apr 09 22:04:30 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
姓名:李兴华;年龄:30;生日:2007-08-27;
-------------------------

如果现在假设查询的是全部记录,不需要设置任何内容,只需要创建完PreparedStatement对象后直接查询即可。

package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet;
import java.text.SimpleDateFormat ;
public class PreparedStatementDemo01 {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库操作
ResultSet rs = null ; // 接收查询结果
String sql = "SELECT name,age,birthday FROM user" ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 实例化PreapredStatement对象
rs = pstmt.executeQuery() ; // 执行查询

while(rs.next()){
String name = rs.getString(1) ;
int age = rs.getInt(2) ;
java.util.Date d = rs.getDate(3) ;
System.out.print("姓名:" + name + ";") ;
System.out.print("年龄:" + age + ";") ;
System.out.println("生日:" + d + ";") ;
System.out.println("-------------------------") ;
}
rs.close() ;
pstmt.close() ;
conn.close() ; // 数据库关闭
}
};

与之前相比,删除了设置查询条件语句。

在开发中到底使用preparedStatement还是使用statement接口操作中呢?

实际上开发中是不会有人使用statement接口的,因为他是采用拼凑的SQL语句,这样就可能会造成SQL注入漏洞

举例,最早的网站只要输入“,”,那么网站基本完蛋了。

总结:

preparedStatement基本工作原理,插入时,先占位,之后再设置内容。

JDBC数据库编程:PreparedStatement接口的更多相关文章

  1. JDBC数据库编程常用接口(转)

    JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口(API),制定了统一的访问各种关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现.这东西能够 ...

  2. Java JDBC数据库编程

    课程  Java面向对象程序设计 一.实验目的 掌握数据库编程技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境,Microsoft SQL  ...

  3. JDBC数据库编程:ResultSet接口

    掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ...

  4. JDBC数据库编程:callableStatement接口

    了解MySQL存储过程建立, 了解存储过程中参数传递的三种方式 了解callablestatement调用存储过程操作. 因为在现在开发中,使用存储过程的地方越来越少,所以,对于存储过程使用,只需要了 ...

  5. JDBC数据库编程

    常识名词:ODBC ,JDBC,JDBC API ,JDBC Driver API  数据准备,续上节:   JDBC编程流程 最基本的JDBC操作 本段内容主要完成JDBC的增删查改操作 packa ...

  6. Java高级篇(三)——JDBC数据库编程

    JDBC是连接数据库和Java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.本篇将介绍一下如何使用JDBC操作数据库(以MySQL为例). 一.JDBC JDBC制定了统一访问 ...

  7. Java ——JDBC数据库编程

    数据库分类 关系型数据库:以表来存放数据的,数据与数据之间的关系通过表之间的连接体现 面向对象的数据库:保存的是对象本身 其它 数据库:数据库管理系统中创建一个个的保存数据的单位 数据是保存在数据库的 ...

  8. JDBC数据库编程(java实训报告)

    文章目录 一.实验要求: 二.实验环境: 三.实验内容: 1.建立数据库连接 2.查询数据 2.1 测试结果 3.添加数据 3.1.测试结果 4.删除数据 4.1.测试结果 5.修改数据 5.1 测试 ...

  9. JDBC数据库编程基本流程

    1.加载驱动类 Class.forName("");   2.创建数据库连接 Connection con = DriverManager.getConnection(url, u ...

随机推荐

  1. Hive 默认分区

    在hive里面表可以创建成分区表,但是当分区字段的值是'' 或者 null时 hive会自动将分区命名为默认分区名称. 默认情况下,默认分区的名称为__HIVE_DEFAULT_PARTITION__ ...

  2. 通过邮箱验证注册——.net代码

    在写一些面向用户的网站类的程序时,必不可少的一个就是注册,通常情况下,我们会选择邮箱验证后注册,或者手机发送验证码注册.上篇文章中已经简单的描述了手机验证注册,这篇主要介绍一下邮箱验证. 邮箱验证的步 ...

  3. response (响应对象)

    一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去 ...

  4. Codeforces Round #448(Div.2) Editorial ABC

    被B的0的情况从头卡到尾.导致没看C,心情炸裂又掉分了. A. Pizza Separation time limit per test 1 second memory limit per test ...

  5. 【分类讨论】【spfa】【BFS】Codeforces Round #416 (Div. 2) D. Vladik and Favorite Game

    那个人第一步肯定要么能向下走,要么能向右走.于是一定可以判断出上下是否对调,或者左右是否对调. 然后他往这个方向再走一走就能发现一定可以再往旁边走,此时就可以判断出另一个方向是否对调. 都判断出来以后 ...

  6. bzoj 4506: [Usaco2016 Jan]Fort Moo

    4506: [Usaco2016 Jan]Fort Moo Description Bessie is building a fort with her friend Elsie. Like any ...

  7. 都9102年了,还不会Docker?10分钟带你从入门操作到实战上手

    Docker简述 Docker是一种OS虚拟化技术,是一个开源的应用容器引擎.它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windows10目前也原生支 ...

  8. [转]mybatis 的简单使用

      需要用到的包:(这里只是其中一个版本,其他的百度) mysql-connector-java-5.1.6-bin mybatis-3.2.2 先看项目目录: 配置文件mybatisconfig.x ...

  9. [转]servlet配置中init-param

    需要初始化的参数比如你的servlet里面有个属性为int total=0默认是0,你想让他初始时50则用init-param 给他赋值 init-param面对应的参数名和值,是给servlet在初 ...

  10. Debian 7 源(32/64bit)好用的源

    deb http://mirrors.163.com/debian wheezy main non-free contrib deb http://mirrors.163.com/debian whe ...