JDBC prepareStatement 与Statement的区别

目录

 

pstm构建动态sql

JDBC prepareStatement 与Statement的区别

         prepareStatement是Statement的一个子接口

          使用步骤分为3步:

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

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

3.执行SQL


 

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

猜你喜欢

转载自blog.csdn.net/weixin_44146025/article/details/107669905