`

sql中Statement与PreparedStatement的区别

 
阅读更多
package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * sql中Statement与PreparedStatement的区别
 * 1.Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句,也就是说sql语句是静态的。
   2.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中。
             被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。

   3.使用PrepareStatement对象执行sqll时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。
            在缓冲区可以发现预编译的命令,并且可以重用。所以PrepareStatement可以减少编译次数提高数据库性能。
   4.Statement可以被sql注入,而PrepareStatement不能被sql注入
 * @author yangjianzhou
 *
 */
public class TestJDBC {
	
	public static void main(String[] args) {
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String str = "yangjianzhou";
		try{
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncode=utf-8","root","admin");
			stmt = conn.createStatement();
			rs = stmt.executeQuery("SELECT * FROM students where name ='"+str+"'");
			while(rs.next()){
				System.out.println(rs.getString("name"));
				System.out.println(rs.getString("sex"));
			}
			
			PreparedStatement ps = conn.prepareStatement("SELECT * FROM students where name = ? ");
			ps.setString(1, "yangjianzhou");
			rs = ps.executeQuery();
			System.out.println(rs.next());
			
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(rs != null){
				try{
					rs.close();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
			if(stmt != null){
				try{
					stmt.close();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
			if(conn != null){
				try{
					conn.close();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}




运行结果:
yangjianzhou
male
true
分享到:
评论

相关推荐

    Statement和PreparedStatement之间的区别

    5. Statement对象和PreparedStatement对象在执行SQL语句时的区别 结论:在 JDBC 应用中,建议使用PreparedStatement对象来代替Statement对象,以提高执行速度、避免SQL注入攻击和提高代码可读性和可维护性。

    如何获得PreparedStatement最终执行的sql语句

    在Java的JDBC编程中,`PreparedStatement`是一个非常重要的接口,它用于预编译SQL语句,提高了数据库操作的效率和安全性。当我们处理大量重复的SQL操作时,使用`PreparedStatement`可以避免SQL注入等问题,同时提升...

    java中PreparedStatement和Statement的区别

    Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...

    详解Java的JDBC中Statement与PreparedStatement对象

    在Java的JDBC(Java Database Connectivity)中,与数据库交互的核心接口是Statement和PreparedStatement。这两个接口都是用于执行SQL语句的,但它们在特性和效率上有所不同。 Statement接口是最基本的SQL执行方式...

    statement和prepared区别

    而Statement和PreparedStatement就是JDBC中执行SQL语句的两种主要方式。 Statement对象是JDBC提供的一个接口,它被用来执行不带参数的静态SQL语句。每次执行Statement时,数据库都会对SQL语句进行编译,然后执行。...

    Java-JDBC【源码】JDBC概述、获取连接、SQL注入问题与解决、查询解析

    Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询...3.SQL注入问题与解决(Statement 、PreparedStatement) 3.1.模拟SQL注入 3.2.PreparedStatement解决 3.3.Statement 与 PreparedStatement 4.完整源码

    PreparedStatement和Statement

    在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...

    prepareStatement和Statement的区别

    prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement...

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...

    java与SQL Server2000的连接

    Java与SQL Server 2000的连接是Java编程中常见的任务,特别是在开发企业级应用程序时,数据库交互是必不可少的一部分。本篇文章将详细介绍如何在Java中建立与SQL Server 2000的连接,以及一些相关的知识点。 首先,...

    关于PreparedStatement插入Date类型值的方法.txt

    `setTimestamp()`方法与`setDate()`类似,但用于设置SQL语句中的`TIMESTAMP`类型的参数。同样地,它也接受三个参数:第一个参数为索引位置,第二个参数为要设置的`java.sql.Timestamp`对象,第三个参数为`Calendar`...

    sqljdbc_6.0

    4. 执行SQL:调用Statement或PreparedStatement对象的execute方法执行查询或更新操作。 5. 处理结果:如果执行的是查询,可以获取ResultSet对象并遍历结果集。 6. 关闭资源:完成操作后,务必关闭Connection、...

    connection 和 preparedstatement 的关闭问题

    - **作用**:提供了与数据库交互的基本手段,如创建`Statement`、`PreparedStatement`或`CallableStatement`等对象。 - **生命周期管理**: - **获取连接**:通常通过`DataSource`或直接使用`DriverManager`来获取...

    适用SQL Server 2016版本的数据库加载驱动包——sqljdbc42.jar

    在Java应用程序中与SQL Server 2016交互,通常需要依赖特定的数据库驱动程序,这就是`sqljdbc42.jar`的角色。 `sqljdbc42.jar`是一个Java数据库连接(JDBC)驱动包,专为与SQL Server 2016配合使用而设计。JDBC是...

    【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入 - 副本.zip

    在IT领域,尤其是在Java编程中,SQL注入是一个重要的安全问题,而PreparedStatement是解决这一问题的有效手段之一。批量插入则是提高数据库操作效率的关键技术。今天我们将深入探讨这两个知识点。 首先,让我们来...

    PreparedStatement详细用法

    ### PreparedStatement的详细...综上所述,无论从性能、安全性还是数据库无关性的角度,`PreparedStatement`都是比`Statement`更为优秀的选择,因此,在实际开发中,应尽可能地采用`PreparedStatement`来执行SQL语句。

    练习3:使用PreparedStatement插入宠物信息.zip

    在Java编程中,PreparedStatement是Java SQL API中的一个接口,它是Statement接口的子接口。这个练习主要涉及如何使用PreparedStatement来插入宠物信息到数据库中。PreparedStatement的主要优势在于它的预编译能力和...

    分别使用JDBC、SQL Developer访问Oracle的一点区别

    标题 "分别使用JDBC、SQL Developer访问Oracle的一点区别" 提到的是两种不同的方式与Oracle数据库进行交互,即Java的JDBC(Java Database Connectivity)和SQL Developer,这是一款Oracle公司提供的数据库管理工具。...

    sql servler驱动包

    描述中的"jdbc驱动"进一步明确了这是关于Java Database Connectivity (JDBC) 驱动,允许Java程序通过JDBC API与SQL Server进行交互。 SQL Server 2000是微软公司推出的一款关系型数据库管理系统,虽然现在已经被...

Global site tag (gtag.js) - Google Analytics