NO.4 Statement和PreparedStatement的区别

1.什么是Statement

Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。

 

2.操作数据库具体步骤

  1. 加载(注册)数据库驱动(到JVM)。
  2. 建立(获取)数据库连接。
  3. 创建(获取)数据库操作对象。
  4. 定义操作的SQL语句。
  5. 执行数据库操作。
  6. 获取并操作结果集。
  7. 关闭对象,回收数据库资源(关闭结果集-->关闭数据库操作对象-->关闭连接)。

示例代码:

package com.yangshengjie.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCTest {
	/**
	 * 使用JDBC连接并操作mysql数据库
	 */
	public static void main(String[] args) {
		// 数据库驱动类名的字符串
		String driver = "com.mysql.jdbc.Driver";
		// 数据库连接串
		String url = "jdbc:mysql://127.0.0.1:3306/jdbctest";
		// 用户名
		String username = "root";
		// 密码
		String password = "mysqladmin";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			// 1、加载数据库驱动( 成功加载后,会将Driver类的实例注册到DriverManager类中)
			Class.forName(driver );
			// 2、获取数据库连接
			conn = DriverManager.getConnection(url, username, password);
			// 3、获取数据库操作对象
			stmt = conn.createStatement();
			// 4、定义操作的SQL语句
			String sql = "select * from user where id = 100";
			// 5、执行数据库操作
			rs = stmt.executeQuery(sql);
			// 6、获取并操作结果集
			while (rs.next()) {
				System.out.println(rs.getInt("id"));
				System.out.println(rs.getString("name"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 7、关闭对象,回收数据库资源
			if (rs != null) { //关闭结果集对象
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (stmt != null) { // 关闭数据库操作对象
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) { // 关闭数据库连接对象
				try {
					if (!conn.isClosed()) {
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

3.三种Statement对象

  1. Statement:Statement 对象用于执行不带参数的简单 SQL 语句。
  2. PreparedStatement:它从 Statement 继承而来。PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句。
  3. CallableStatement:它从 PreparedStatement 继承而来。CallableStatement 对象用于执行对数据库已存储过程的调用。

它们都专用于发送特定类型的 SQL 语句。

4.总结

Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement,但存在sql注入风险

PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题

对于多次重复执行的语句,使用PreparedStatement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值