Java+MySQL:插入一條數據並刪除上一條

大致過程:

1.向數據庫中插入一條數據,並獲取新增數據的id-currentId

2.找到id爲 (currentId-1) 的數據,如果存在則將它刪除,如果不存在繼續將id減一,知道能夠刪除一條數據


package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InsertTest {

	private static String url = "jdbc:mysql://127.0.0.1:3306/study?characterEncoding=UTF-8";
	private static String userName = "root";
	private static String passWord = "root";

	public static void main(String[] args) {
		insertAndDelete();
	}

	/**
	 * 插入一條數據,並刪除上一條數據
	 */
	private static void insertAndDelete() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		ResultSet resultSetKey = null;
		try (Connection connection = DriverManager.getConnection(url, userName, passWord);
				PreparedStatement preparedStatement = connection.prepareStatement(
						"insert into employee(name, email, salary) VALUES (?,?,?)", Statement.RETURN_GENERATED_KEYS);) {
			preparedStatement.setString(1, "lmle");
			preparedStatement.setString(2, "[email protected]");
			preparedStatement.setInt(3, 899);

			preparedStatement.execute();
			resultSetKey = preparedStatement.getGeneratedKeys();
			if (resultSetKey.next()) {
				System.out.println("插入數據: "+resultSetKey.getInt(1));
				deletePrevious(resultSetKey.getInt(1));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 刪除上一條數據
	 * 
	 * @param currentId
	 */
	private static void deletePrevious(int currentId) {

		// 先確定id爲(currentId-1)的數據是否存在
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

		String sql = "select * from employee where id="+(currentId-1);
		try (Connection connection = DriverManager.getConnection(url, userName, passWord);
				Statement statement = connection.createStatement();) {

			// 存在則刪除
			if (statement.execute(sql)) {
				statement.execute("delete from employee where id="+(currentId-1));
				System.out.println("刪除成功: "+(currentId-1));
			} else {// 不存在就繼續往上推直到刪除一條數據
				deletePrevious(currentId-1);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

問題:

如果插入數據前,表已經被清空過或者末端數據被大量刪除,那麼在調用deletePrevious()時將會不斷在try()中創建資源,如何並且不能及時關閉


未完~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章