有一张确认收入表这个表主要字段有合同编号、开始时间、结束时间开始时间结束时间固定为每个月的开头和结尾现在怎么用java判断我插入一条数据不重复且月份连续
- 首先,需要查询数据库中最新一条记录的结束时间和当前插入记录的开始时间,判断月份是否连续。
可以使用SQL语句查询最新一条记录的结束时间:
SELECT MAX(end_time) FROM income_table;
然后使用Java中的日期时间类将查询结果转换为日期类型,比较最新一条记录的结束时间和当前插入记录的开始时间的月份是否连续。
- 如果月份连续,则需要判断当前插入记录的合同编号是否已存在。
可以使用SQL语句查询合同编号是否已存在:
SELECT COUNT(*) FROM income_table WHERE contract_number = 'xxx';
如果查询结果大于0,则表示合同编号已存在,需要提示用户重新输入。
- 如果月份连续且合同编号不存在,则可以插入新记录。
可以使用SQL语句插入新记录:
INSERT INTO income_table (contract_number, start_time, end_time) VALUES ('xxx', '2022-01-01', '2022-01-31');
其中,xxx为当前插入记录的合同编号,'2022-01-01'为开始时间,'2022-01-31'为结束时间。
完整代码示例:
import java.sql.*;
import java.time.LocalDate;
import java.time.YearMonth;
public class IncomeTable {
private Connection conn;
public IncomeTable() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String user = "root";
String password = "123456";
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean insertRecord(String contractNumber) {
try {
// 查询最新一条记录的结束时间
String querySql = "SELECT MAX(end_time) FROM income_table";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(querySql);
LocalDate lastEndTime = null;
if (rs.next()) {
lastEndTime = rs.getDate(1).toLocalDate();
}
rs.close();
stmt.close();
// 判断月份是否连续
LocalDate currentStartTime = LocalDate.now().withDayOfMonth(1);
YearMonth lastYearMonth = YearMonth.from(lastEndTime);
YearMonth currentYearMonth = YearMonth.from(currentStartTime);
if (!lastYearMonth.plusMonths(1).equals(currentYearMonth)) {
System.out.println("月份不连续,请重新输入!");
return false;
}
// 查询合同编号是否已存在
querySql = "SELECT COUNT(*) FROM income_table WHERE contract_number = ?";
PreparedStatement pstmt = conn.prepareStatement(querySql);
pstmt.setString(1, contractNumber);
rs = pstmt.executeQuery();
int count = 0;
if (rs.next()) {
count = rs.getInt(1);
}
rs.close();
pstmt.close();
if (count > 0) {
System.out.println("合同编号已存在,请重新输入!");
return false;
}
// 插入新记录
String insertSql = "INSERT INTO income_table (contract_number, start_time, end_time) VALUES (?, ?, ?)";
pstmt = conn.prepareStatement(insertSql);
pstmt.setString(1, contractNumber);
pstmt.setDate(2, Date.valueOf(currentStartTime));
pstmt.setDate(3, Date.valueOf(currentStartTime.withDayOfMonth(currentStartTime.lengthOfMonth())));
pstmt.executeUpdate();
pstmt.close();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
IncomeTable table = new IncomeTable();
table.insertRecord("12345");
}
}
原文地址: https://www.cveoy.top/t/topic/bHty 著作权归作者所有。请勿转载和采集!