大致過程:
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()中創建資源,如何並且不能及時關閉
未完~