zoukankan      html  css  js  c++  java
  • JDBC中的PreparedStatement

    使用Statement需要进行拼写SQL语句,很麻烦而且容易出错,这就用到了PreparedStatement。PreparedStatement是Statement的子接口,可以传入带占位符的SQL语句,并且提供了补充占位符变量的方法。

    1.使用PreparedStatement

    1.1 创建PreparedStatement;

    String sql="INSERT INTO EXAMSTUDENT VALUES(?,?,?,?,?,?,?)";
    PreparedStatement ps=conn.prepareStatement(sql);
    

    1.2 调动PreparedStatement的setXxx(int index,Object val)设置占位符的值;

    1.3 执行 SQL语句:executeQuery()或executeUpdate()。注意:执行时不再需要传入SQL语句。

     示例代码:

    @Test
    public void testPreparedStatement(){
    	Connection connection=null;
    	PreparedStatement preparedstatement=null;
    	
    	try{
    		String sql="INSERT INTO EXAMSTUDENT VALUES(?,?,?,?,?,?,?)";
    		connection=JDBCTools.getConnection();
    		preparedstatement=connection.prepareStatement(sql);
    		preparedstatement.setInt(1, 3);
    		preparedstatement.setInt(2, 434);
    		preparedstatement.setString(3, "198312");
    		preparedstatement.setString(4, "342");
    		preparedstatement.setString(5, "Peter");
    		preparedstatement.setString(6, "上海");
    		preparedstatement.setInt(7, 332);
    		preparedstatement.executeUpdate();
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    			JDBCTools.release(preparedstatement,connection);
    		}
    }
    

    2.使用PreparedStatement向数据表中添加学生信息

    Student.java

    package com.test.jdbc;
    
    public class Student {
    	private int flowId;
    	private int type;
    	private String idCard;
    	private String examCard;
    	private String studentName;
    	private String location;
    	private int grade;
    	public int getFlowId() {
    		return flowId;
    	}
    	public void setFlowId(int flowId) {
    		this.flowId = flowId;
    	}
    	public int getType() {
    		return type;
    	}
    	public void setType(int type) {
    		this.type = type;
    	}
    	public String getIdCard() {
    		return idCard;
    	}
    	public void setIdCard(String idCard) {
    		this.idCard = idCard;
    	}
    	public String getExamCard() {
    		return examCard;
    	}
    	public void setExamCard(String examCard) {
    		this.examCard = examCard;
    	}
    	public String getStudentName() {
    		return studentName;
    	}
    	public void setStudentName(String studentName) {
    		this.studentName = studentName;
    	}
    	public String getLocation() {
    		return location;
    	}
    	public void setLocation(String location) {
    		this.location = location;
    	}
    	public int getGrade() {
    		return grade;
    	}
    	public void setGrade(int grade) {
    		this.grade = grade;
    	}
    	public Student(int flowId, int type, String idCard, String examCard, String studentName, String location,
    			int grade) {
    		super();
    		this.flowId = flowId;
    		this.type = type;
    		this.idCard = idCard;
    		this.examCard = examCard;
    		this.studentName = studentName;
    		this.location = location;
    		this.grade = grade;
    	}
    	public Student(){ }
    	@Override
    	public String toString() {
    		return "student [flowId=" + flowId + ", type=" + type + ", idCard=" + idCard + ", examCard=" + examCard
    				+ ", studentName=" + studentName + ", location=" + location + ", grade=" + grade + "]";
    	}
    	
    }
    

    工具类JDBCTools.java

    package com.test.jdbc;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    import org.junit.Test;
    
    public class JDBCTools {
    	//添加数据并更新
    	public static void update2(String sql,Object...args){
    		Connection connection=null;
    		PreparedStatement preparedstatement=null;
    		try{
    			connection=JDBCTools.getConnection();
    			preparedstatement=connection.prepareStatement(sql);
    			for(int i=0;i<args.length;i++){
    				preparedstatement.setObject(i+1,args[i]);
    			}
    			preparedstatement.executeUpdate();
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally{
    			JDBCTools.release(preparedstatement, connection);
    		}
    	}
    	
    	//获取数据库的连接
    	public static Connection getConnection() throws Exception{
    		String driverClass=null;
    		String jdbcUrl=null;
    		String user=null;
    		String password=null;
    		
    		InputStream in=JDBCTools.class.getResourceAsStream("/jdbc.properties");
    		Properties properties=new Properties();
    		properties.load(in);
    		
    		driverClass=properties.getProperty("driver");
    		jdbcUrl=properties.getProperty("jdbcUrl");
    		user=properties.getProperty("user");
    		password=properties.getProperty("password");
    		
    		Class.forName(driverClass);
    		Connection connection=DriverManager.getConnection(jdbcUrl,user,password);
    		
    		return connection;
    	}
        @Test 
        public void testGetConnection() throws Exception{
        	getConnection();
        }
    	//数据库释放
        public static void release(Statement statement,Connection connection){
            if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            }
            if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        }
    }
    

    功能实现类:JDBCTest.java

    package com.test.jdbc;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Scanner;
    import org.junit.Test;
    
    public class JDBCTest {
    	@Test
    	public void testAddNewStudent2(){
    		Student student=getStudentFromConsole();
    		addNewStudent2(student);
    	}
    	//从控制台输入学生的信息
    	private Student getStudentFromConsole() {
    		Scanner scanner=new Scanner(System.in);
    		Student student=new Student();
    		System.out.print("FlowId:");
    		student.setFlowId(scanner.nextInt());
    		System.out.print("Type:");
    		student.setType(scanner.nextInt());
    		System.out.print("IDCard:");
    		student.setIdCard(scanner.next());
    		System.out.print("ExamCard:");
    		student.setExamCard(scanner.next());
    		System.out.print("StudentName:");
    		student.setStudentName(scanner.next());
    		System.out.print("Location:");
    		student.setLocation(scanner.next());
    		System.out.print("Grade:");
    		student.setGrade(scanner.nextInt());
    		return student;
    	}
    	public void addNewStudent2(Student student){
    		String sql="INSERT INTO EXAMSTUDENT VALUES(?,?,?,?,?,?,?)";
    		JDBCTools.update2(sql, student.getFlowId(),student.getType(),student.getIdCard(),
    				student.getExamCard(),student.getStudentName(),student.getLocation(),student.getGrade());
    	}
    }
    

    wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

  • 相关阅读:
    try catch在for循环外面还是里面
    Java中==与equals的区别及理解
    微信公众号必须关注此测试号,错误码:10006
    微信公众号自定义菜单与启用服务器配置冲突(图文消息、链接及文本回复)
    一不小心写了个免费的跨平台网络考试培训网教系统
    ASP.NET Core利用拦截器 IActionFilter实现权限控制
    用ASP.NET Core2重写了一款网络考试培训的免费软件
    ASP.NET Core2实现静默获取微信公众号的用户OpenId
    ASP.NET Core2基于RabbitMQ对Web前端实现推送功能
    .NET Core2使用Azure云上的Iot-Hub服务
  • 原文地址:https://www.cnblogs.com/naihuangbao/p/10065673.html
Copyright © 2011-2022 走看看