JDBC:以面向对象的思想编写JDBC程序

题目简述:

向数据表中添加学生信息,并且可以通过身份证号准考证来查询学生信息。

Name Type Nullable Default Comments———– ———— ——– ——- ——–IDCARD NUMBER(10) Y EXAMCARD NUMBER(10) Y STUDENTNAME VARCHAR2(20) Y LACATION VARCHAR2(20) Y GRADE NUMBER(3) Y

测试类

package xuezaipiao3;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Scanner;import javax.sql.rowset.JdbcRowSet;import xuezaipiao1.JDBC_Tools;/** * 思考: * 向数据表中添加一条学生信息记录,那么学生信息就可以创建一个学生类来储存信息 * 步骤: * 1. * <span style="white-space:pre"></span>1) Student成员变量 对应studnt数据表  * <span style="white-space:pre"></span>2) 创建一个方法addStudent(Student student) *  3) 方法中执行相应的 SQL 操作 * 2.使用PreparedStatement Statement的子接口,可以传入带占位符的SQL语句,并且提供了补充占位符的 * <span style="white-space:pre"></span>的方法 * <span style="white-space:pre"></span>1) String sql = "INSERT INTO student values(?,?,?,?,?)"; * <span style="white-space:pre"></span>PreparedStatement ps = conn.preparedStatement(sql); * <span style="white-space:pre"></span>2) 调用PreparedStatement 的setXxx(int index,object val) 设置占位符的值 * <span style="white-space:pre"></span>3) 执行executeUpdate() 或executeQuery() 就不需要再传入SQL语句了 * <span style="white-space:pre"></span>4) PreparedStatement 可以防止SQL注入攻击 * @author Kevy *<span style="white-space:pre"></span> */public class thinkInJDBC {<span style="white-space:pre"></span>public static void main(String[] args) {<span style="white-space:pre"></span>Operation op = new Operation();<span style="white-space:pre"></span>//Student s = op.getStudentFromConsole();<span style="white-space:pre"></span>//op.addStudent(s);<span style="white-space:pre"></span>op.QueryStudent();<span style="white-space:pre"></span><span style="white-space:pre"></span>}}

Operation类

package xuezaipiao3;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;import java.util.Scanner;import xuezaipiao1.JDBC_Tools;/** * 进行SQL操作的类 * @author Kevy * */public class Operation {public void QueryStudent(){int searchType = getSearchTypeFromConsole();Student student = searchStudent(searchType);printStudent(student);}/** * 打印学生信息 * @param student */private void printStudent(Student student) {if(student!=null){System.out.println(student);}else{System.out.println("查无此人!");}}/** * * @param searchType 1 And 2 * @return */private Student searchStudent(int searchType) {String sql = "SELECT * FROM student "+ "where ";Scanner scanner = new Scanner(System.in);if(searchType==1){System.out.print("请输入身份证:");int id = scanner.nextInt();sql = sql + "IDCARD = " +id;}else{System.out.print("请输入准考证:");int id = scanner.nextInt();sql = sql + "EXAMCARD = " +id;}Student student = getStudent(sql);return student;}/** * 根据传入的sql返回Student对象 * @param sql * @return */private Student getStudent(String sql) {Connection connection = null;Statement statement = null;ResultSet rs = null;Student stu = null;try {connection = JDBC_Tools.getConnection();statement = connection.createStatement();rs = statement.executeQuery(sql);if(rs.next()){stu = new Student(rs.getInt("IDCARD"),rs.getInt("EXAMCARD"),rs.getString("STUDENTNAME"),rs.getString("LACATION"),rs.getInt("GRADE"));}} catch (Exception e) {e.printStackTrace();}finally{JDBC_Tools.relaseSource(rs, connection, statement);}return stu;}/** * * @return 1 用身份证查询 , 2 用准考证号查询 其他无效 */@SuppressWarnings("resource")private int getSearchTypeFromConsole() {System.out.println("请输入查询类型:1.身份证查询 2.准考证查询");System.out.print("你的选择:");Scanner scanner = new Scanner(System.in);int type = scanner.nextInt();if(type!=1 && type!=2){System.out.println("输入有误,请重新输入");throw new RuntimeException();}return type;}/** * 从控制台获取信息 并创建学生对象 * @return */public Student getStudentFromConsole() {Scanner scanner = new Scanner(System.in);Student student = new Student();System.out.print("IDCard:");student.setIDCard(scanner.nextInt());System.out.print("ExamID:");student.setExamID(scanner.nextInt());System.out.print("StudentName:");student.setStudentName(scanner.next());System.out.print("Llocation:");student.setLacation(scanner.next());System.out.print("Grade:");student.setGrade(scanner.nextInt());scanner.close();return student;}/** * 添加学生信息 * @param student */public void addStudent(Student student){/* * 使用普通方法 * String sql = "INSERT INTO STUDENT "+ "VALUES("+student.getIDCard()+","+student.getExamID()+",'"+student.getStudentName()+"','"+student.getLacation()+"',"+student.getGrade()+")"; JDBC_Tools.update(sql);*//** * 使用PreparedStatement */String sql = "INSERT INTO student values(?,?,?,?,?)";newUpdate(sql,student.getIDCard(),student.getExamID(),student.getStudentName(),student.getLacation(),student.getGrade());}/** * 新的修改方法 * @param sql * @param objs :可变参数 */private void newUpdate(String sql,Object…objs){Connection conn = null;PreparedStatement ps = null; try {conn = JDBC_Tools.getConnection();ps = conn.prepareStatement(sql);for(int i = 0;i<objs.length ; i++ ){ps.setObject(i+1, objs[i]);}ps.executeUpdate(); //注意这里就不需要再添加sql参数了} catch (Exception e) {e.printStackTrace();}finally{JDBC_Tools.relaseSource(conn, ps);}}}

你要以乐观的态度看待这个世界,你会发现世界是如此得美好

JDBC:以面向对象的思想编写JDBC程序

相关文章:

你感兴趣的文章:

标签云: