美文网首页Java
JDBC中的PreparedStatement

JDBC中的PreparedStatement

作者: 考拉考拉啊 | 来源:发表于2020-04-21 12:20 被阅读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领域,一个伴你成长的公众号!

    相关文章

      网友评论

        本文标题:JDBC中的PreparedStatement

        本文链接:https://www.haomeiwen.com/subject/lskuihtx.html