使用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. Visual Studio Xamarin提示Bonjour backend初始化失败

    Visual Studio Xamarin提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic ...

  2. A/B Problem(大数)

    描述 做了A+B Problem,A/B Problem不是什么问题了吧! 输入 每组测试样例一行,首先一个号码A,中间一个或多个空格,然后一个符号( / 或者 % ),然后又是空格,后面又是一个号码 ...

  3. Spring中与Spring相关的注解

    # 一.Spring的常用组件类注解 ## @Component     被该注解所修饰的类是一个普通的spring bean类,该注解可以替代@Controller.@Service.@Reposi ...

  4. Train Problem I(模拟栈)

    题意:模拟栈,试问使用2个栈,能否使得串1变为串2 思路:模拟,经典问题,注意只要相同的元素放到栈顶后就不会再移动了,只需要考虑剩下的元素,因此每次只考虑一个元素的进入方式. #include< ...

  5. Node.js+MySQL管理工作的详细信息所遇到的问题

    问题陈述: Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xE8\xB4\xAD\xE7\x89\xA9' ...

  6. html5上传图片php特殊处理一下

    $file=$_POST['file']; if($file) { preg_match('|data:image/([a-zA-Z]+);base64,|s',$file,$match); $fil ...

  7. python使用sqlite示例

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用. 操作关系数据库,首先需要连接到数据库 ...

  8. 未能加载文件或程序集“System.Web.Razor 2.0.0 or system.web.webpages.razor 2.0.0

    出现这种问题,有两种情况: 一.bin目录下没有相应的dll,可以将相应dll拷贝至bin目录或者设置相关dll的属性“复制到本地”:true 二.如果是高于Visual Studio2013版本的开 ...

  9. JavaScript基础入门教程(二)

    说明 前一篇博客介绍了js以及一些关于js基本类型的简单知识,本篇博客将详细介绍js的基础类型,捎带介绍对象类型,更详细的对象类型的说明将后续再讲. js中类型的说明 js中的类型分为基本类型和对象类 ...

  10. 使用SQL_TRACE进行数据库诊断

    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法.本文就SQL_TRACE的使用作简单探讨,并 ...