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();
			}				
		}		
	}
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • draggable的用法_draggable

    draggable的用法_draggable一、概述通过前面几节学习,大家应该都知道了,一个div对象是可以通过拖拉来改变大小,也可以通过拖动来改变其位置的。如何改变大小已经讲解过了,那么怎么实现拖动改变位置呢?现在就开始讲解如何实现拖动-

  • 子网掩码和通配符掩码的区别

    子网掩码和通配符掩码的区别子网掩码子网掩码,官方的定义是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。说白了子网掩码的工作原理就是,它拥有和主机IP地址一样的位数,每一位与对应的ip地址位进行“与”操作,得出的结果就是主机所在的子网,打个比方,…

  • pycahrm激活码【注册码】

    pycahrm激活码【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • new URI(zk_servers_1) 路径包含下划线无法获取host的问题

    new URI(zk_servers_1) 路径包含下划线无法获取host的问题

  • springboot面试大全

    springboot面试大全https://blog.csdn.net/Kevin_Gu6/article/details/885474241SpringBoot有哪些优点?起步依赖自动配置应用监控2springboot的核心配置文件,以及加载顺序?bootstrap(.properties/.yml)用来加载系统相关的配置application(.properties/.yml)用来…

  • day2 javaee的入门知识「建议收藏」

    day2 javaee的入门知识「建议收藏」1、面向对象与面向过程的区别?面向过程的语言拥有封装、继承、多态的特性,使得整个代码灵活性高,比如Java,C++。容易维护,容易扩展。面向过程的语言直接跟内存打交道,性能要更好,比如java是需要跟虚拟机做交互,先编译解释成机器码。再跟操作系统打交道。大多数面向过程的语言基本都是直接编译成机器码在操作系统上进行执行。所以性能更好。但是java经过多年的发展,性能提升了很大,各位读者要记住javayyds!2、成员变量和局部变量的区别与c++不同的是java中没有全局变量的概念。成员变量:也称

发表回复

您的电子邮箱地址不会被公开。

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