Java

JDBC中的PreparedStatement

2020-04-21  本文已影响0人  考拉考拉啊

使用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领域,一个伴你成长的公众号!

上一篇下一篇

猜你喜欢

热点阅读