1. 程式人生 > >JDBC通過PreparedStatement實現簡單的錄入資料的操作

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 最後我來看看結果:

沒有錄入資料前:

我們發現成功錄入資料: