JDBC prepareStatement 与Statement的区别

JDBC prepareStatement 与Statement的区别

目录

 

pstm构建动态sql

JDBC prepareStatement 与Statement的区别

         prepareStatement是Statement的一个子接口

          使用步骤分为3步:

1创建:通过连接获得prepareedStatement对象

2,给?赋值(也称参数绑定)

3.执行SQL


 

先来看看JDBC prepareStatement 与Statement的区别

JDBC prepareStatement 与Statement的区别

如上图,可以概括两点,

一、使用PreparedStatement更安全,解决了Sql注入的问题

二、效率更高,特别是调用次数较多的时候

相比较Statement而言,它是个半成品。

它是Statement的一个子接口,使用步骤分为3步:

1创建:通过连接获得prepareedStatement对象

String sql  = “Select * from users_luxw where username= ? And password = password=?  ” 

PreparedStatement pstm = conn.prepareStatemement(sql);

创建时,将Sql语句中取值发生变化的部分用占位符(?)代替、。

2,给?赋值(也称参数绑定)

   使用Set[type] 方法给?赋值、其中Type表示?位置的数据类型。第一个参数代表问号位置,从1开始;第二个参数是具体取值,比如:

     pstm.setString(1, username);

     pstm.setString(2, password);

3.执行SQL

Pstm.executeQuery();

Pstm.executeUpdate();//执行官更新时使用

此时JDBC将所有对应的参数发送至数据库服务器,调用池中有第一步创建的预编译的SQL并执行

 

代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class demoprearedStatementf {
	public static void main(String[] args) {
		//加载获取连接
		Connection conn = null;
		PreparedStatement psm = null;
		 ResultSet rs = null;
		
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//获取连接
			String url = "jdbc:mysql://localhost:3306/mybase";
			String user = "root";
			String password = "root123";
			
		    conn = DriverManager.getConnection(url, user, password);
		    //3、创建一个preparedStatement对象 预编译sql语句
		    //查询
		    String sql = "select * from test where deptno = ?";
		    psm  = conn.prepareStatement(sql); 
		    psm.setString(1,"10");
		    //删除
//		    String sql = "delete from test where ename=? ";
//		    psm = conn.prepareStatement(sql);
//		    psm.setString(1,"小弟");
//	    
		    //修改
//		    String sql = "update  test set job = ? where ename = ?";
//		    psm = conn.prepareStatement(sql);
//		    psm.setString(1, "manner");
//		    psm.setString(2, "白展堂");
		    
//		    //插入
//		    String sql = "insert into test(ename,job,deptno) values(?,?,?)";
//		    psm = conn.prepareStatement(sql);
//		    psm.setString(1, "大白");
//		    psm.setString(2, "leader");
//		    psm.setInt(3, 20);
			//4执行sql语句
//		    int line = psm.executeUpdate();//增删改都用 executeUpdate
//		    System.out.println("影响行数:  "+line);
		    rs = psm.executeQuery();
		    while(rs.next()){
		    int empno = rs.getInt(1); 
			String ename = rs.getString(2);
			String  job   = rs.getString(3);
			int	 mgr = rs.getInt(4);
			Date hiredata = rs.getDate(5);
			int	  sal  = rs.getInt(6);
			int	  commit  = rs.getInt(7);
			int   deptno = rs.getInt(8);			
			System.out.println(empno+" "+ename+" "+job+" "+mgr+" "+hiredata+" "+sal+" "+commit+" "+deptno);
		    }
		    
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally{	
			try {
				rs.close();
				psm.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}				
		}		
	}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114784.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一些常见的第三方UI库[通俗易懂]

    一些常见的第三方UI库[通俗易懂]第三方UI库1bootstrapBootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师MarkOtto和JacobThornton合作开发,是一个C

    2022年8月4日
    8
  • HP发布Jenkins最新UFT开源插件

    HP发布Jenkins最新UFT开源插件就在UFT11.5发布之时,HP同时也发布了针对UFT的Jenkins开源插件1)通过此插件可以运行来自HPALM/QC或本地存储的测试脚本2)你可以选择多个指定脚本甚至是文件夹3)此插件会运行文件夹下的所有测试脚本4)在build机上可以通过配置运行测试脚本5)当然也可在远程机器上指定6)如果你的测试脚本存储在HPALM/QC的测试集中,则可以通过配置jenkins运

    2022年5月28日
    55
  • datagrip-2022.01.4 激活码[最新免费获取]

    (datagrip-2022.01.4 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~747EFQ8BIF-eyJsaWNlbnNlSWQiOi…

    2022年3月31日
    853
  • 详细阐述基于时间的反向传播算法(Back-Propagation Through Time,BPTT)「建议收藏」

    详细阐述基于时间的反向传播算法(Back-Propagation Through Time,BPTT)「建议收藏」上一节我们说了详细展示RNN的网络结构以及前向传播,在了解RNN的结构之后,如何训练RNN就是一个重要问题,训练模型就是更新模型的参数,也就是如何进行反向传播,也就意味着如何对参数进行求导。本篇内容就是详细介绍RNN的反向传播算法,即BPTT。首先让我们来用动图来表示RNN的损失是如何产生的,以及如何进行反向传播,如下图所示。上面两幅图片,已经很详细的展示了损失是如何产生的,以及…

    2022年6月23日
    40
  • 使用zlib/gzip压缩和解压缩?(Flash和GALGAME使用的压缩格式)[通俗易懂]

    使用zlib/gzip压缩和解压缩?(Flash和GALGAME使用的压缩格式)[通俗易懂]c#下怎么使用zlib? zlib是开源的压缩格式 源代码和DLL可以去http://www.zlib.net/  bzip2是建立在libbzip2 激活成功教程GALGAME时候很多人发现许多游戏系统都采用这种压缩格式 甚至Flash格式版本6以后,增加了可压缩选项,用的是ZLib压缩(wxd:jrj.com.cn金融界flash数据就是这样,减少传输量) 我今天看过金山词霸2009毫无疑问的使用ZLib和bzip2 那么编写解压缩或者压缩程序显得很重要 对于C++程序员来说,很简单,把DLL导入

    2022年7月16日
    16
  • python之运算符

    运算符的定义运算符类型1.算数运算符2.比较运算符3.赋值运算符4.位运算符5.逻辑运算符6.成员运算符7身份运算符详情介绍1算数运算2比较运算3赋值运算4位运算:5逻辑运

    2022年3月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号