JDBC通过PreparedStatement实现简单的录入数据的操作
1.首先先创建一张表:
2 实现从控制台输入学生的信息的功能:
/**
* 从控制台输入学生的信息
* @return
*/
private Student getStudentFromConsole() {
Scanner scanner = new Scanner(System.in);
Student student = new Student(0, 0, null, null, null, null, 0);
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.err.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;
}
3 实现添加学生信息的功能:
/**
* 通过JDBCTools工具类,不用每次书写繁琐的sql语句
* @param student
*/
public void addNewStudent2(Student student) {
String sql = "INSERT INTO examstudent(flowid, type, idcard, "
+ "examcard, studentname, location, grade)"
+ "VALUES(?, ?, ?, ?, ?, ?, ?)";
JDBCTools.update(sql, student.getFlowId(), student.getType(), student.getIdCard(),
student.getExamCard(), student.getStudentName(), student.getLocation(), student.getGrade());
}
4 JDBCTools工具类中的update()函数也提供给大家吧(PreparedStatement方法):
/**
* 执行SQL语句,使用PreparedStatement
* Object ...args表示可变的参数
* @param sql
* @param args:填写SQL占位符的可变参数
* 1. PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,并且提供了补充占位符变量的方法
* 2. 调用PreparedStatement的setXxx(int index, Object val)设置占位符从1开始,val表示要插入的数据
* 3.使用Statement需要拼写SQL语句,很辛苦,容易出错
* 4. 可以有效的防止SQL注入
*/
public static void update(String sql, Object ...args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCTools.getConnection();
preparedStatement = (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(null, preparedStatement, connection);
}
}
5 测试程序:
/**录入信息
* 向数据库里录入学生信息测试
*/
@Test
public void testAddNewStudent() {
Student student = getStudentFromConsole();
addNewStudent2(student);
}
6 最后我来看看结果:
没有录入数据前:
我们发现成功录入数据: