使用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. Python开发基础-Day9-生成器、三元表达式、列表生成式、生成器表达式

    生成器 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器. def foo(): print('first------>') yield 1 pri ...

  2. Flip Game II -- LeetCode

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  3. 插头dp练习

    最近学了插头dp,准备陆续更新插头dp类练习. 学习论文还是cdq那篇<基于连通性状态压缩的动态规划问题>. 基本的想法都讲得很通透了,接下来就靠自己yy了. 还有感谢kuangbin大大 ...

  4. BZOJ 1202 [HNOI2005]狡猾的商人(并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1202 [题目大意] 给出一些区间和的数值,问是否存在矛盾 [题解] 用并查集维护前缀和 ...

  5. 【欧拉函数】BZOJ2818-GCD

    怎么漏了这一道……本来想要水一水,结果忘记了φ[1]=1,果然要滚一遍前面的知识…… #include<iostream> #include<cstdio> #include& ...

  6. 【贪心+优先队列】POJ3190-Stall Reservations

    [题目大意] 给出每个奶牛挤奶的时间,同一时间同一畜栏内不会有两头奶牛挤奶,问至少要多少个畜栏. [思路] 将奶牛按照挤奶开始的时间进行升序排序,再用一个小顶堆维护每一个畜栏当前的挤奶结束时间.对于当 ...

  7. 操作系统介绍、python基础

    操作系统 什么是操作系统? 操作系统位于计算机硬件与应用软件之间,是一个协调.管理.控制计算机硬件资源与软件资源的控制程序.  2.为何要操作系统 ①  .控制硬件 ②  .把对硬件的复杂的操作封装成 ...

  8. mysql-mmm故障整理

    Auth: JinDate: 20140414 1.master-slave同步问题1)故障描述和错误代码:监控报警slave故障登录slave服务器查看mysql> show slave st ...

  9. IIS配置Asp.net时,出现“未能加载文件或程序集“System.Web.Extensions.Design, Version=1.0.61025.0”

    如果出现未能加载文件或程序集“System.Web.Extensions.Design, Version=1.0.61025.0, 主要是没有安装.net framwork 3.5,安装一下就行了. ...

  10. meteor学习-- #一 安装meteor快速使用

    下载安装 curl https://install.meteor.com/ | sh meteor会自动下载mongodb和其他需要依赖的库,不需要手动安装. 如果是Windows 的用户,请使用 m ...