Я занимаюсь разработкой системы, которая управляет запасами для проекта, и пытаюсь получить список товаров со склада, которые близки к сроку годности
Вот как создается таблица:
Query_Statement.executeUpdate("CREATE TABLE STOCK_PURCHASE ( SP_ID INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "USER_ID INTEGER,STOCK_ID INTEGER,SUPPLIER_ID INTEGER,SP_ENTRY_DATE TEXT,"
+ "SP_PURCHASE_PRICE REAL, SP_SELLBY_DATE TEXT, SP_QUANTITY REAL,"
+ "FOREIGN KEY (USER_ID) REFERENCES USER (USER_ID),"
+ "FOREIGN KEY (STOCK_ID) REFERENCES STOCK (STOCK_ID),"
+ "FOREIGN KEY (SUPPLIER_ID) REFERENCES SUPPLIER (SUPPLIER_ID))");
Я использую эту функцию для получения:
public ArrayList<String> GetExpiredStock(){
Connection dbConnection = null;
ResultSet list = null;
ArrayList<String> ls = new ArrayList<String>();
LocalDate currentDate = LocalDate.now();
//System.out.println(today);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
try {
dbConnection = DriverManager.getConnection("jdbc:sqlite:"+dbName+".db");
Statement Query_Statement = dbConnection.createStatement();
Query_Statement.setQueryTimeout(10);
list = Query_Statement.executeQuery("SELECT SP_ENTRY_DATE, STOCK_ID FROM STOCK_PURCHASE"); //this works
while (list.next()) {
try {
LocalDate expDate = LocalDate.parse(list.getString("SP_SELLBY_DATE"), formatter);
LocalDate monthAway = expDate.minusMonths(1);
System.out.println(currentDate);
if(currentDate.isAfter(monthAway)) {
int id = list.getInt("STOCK_ID");
ResultSet ids = Query_Statement.executeQuery("SELECT STOCK_NAME FROM STOCK WHERE STOCK_ID=" + id);
ls.add(ids.getString("STOCK_NAME") + "\t\t" +
list.getString("SP_SELLBY_DATE") + getStockQuant(list.getInt("STOCK_ID"),
currentDate));
}
}catch(SQLException e) {
System.err.println(e);
continue;
}
}
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
if (dbConnection != null)
dbConnection.close();
} catch (SQLException e) {
System.err.println(e);
}
}
return ls;
}
Я ожидаю, что она получит срок годности.Однако он продолжает говорить:
java.sql.SQLException: no such column: 'SP_SELLBY_DATE'
Редактировать:
Я изменил код, чтобы он выглядел так:
public ArrayList<String> GetExpiredStock(){
Connection dbConnection = null;
ResultSet list = null;
ArrayList<String> ls = new ArrayList<String>();
LocalDate currentDate = LocalDate.now();
//System.out.println(today);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
try {
dbConnection = DriverManager.getConnection("jdbc:sqlite:"+dbName+".db");
Statement Query_Statement = dbConnection.createStatement();
Query_Statement.setQueryTimeout(10);
list = Query_Statement.executeQuery("SELECT SP_SELLBY_DATE, STOCK_ID FROM STOCK_PURCHASE"); //this works
while (list.next()) {
try {
String da = list.getString("SP_SELLBY_DATE");
int id = list.getInt("STOCK_ID");
System.out.println("Executed on id = " + id);
LocalDate expDate = LocalDate.parse(da, formatter);
LocalDate monthAway = expDate.minusMonths(1);
System.out.println(currentDate);
if(currentDate.isAfter(monthAway)) {
ResultSet ids = Query_Statement.executeQuery("SELECT STOCK_NAME FROM STOCK WHERE STOCK_ID=" + id);
ls.add(ids.getString("STOCK_NAME") + "\t\t" +
da + "\t\t"+ getStockQuant(id,
currentDate));
}
}catch(SQLException e) {
System.err.println(e);
continue;
}
}
} catch (SQLException e) {
System.err.println(e.getMessage());
} finally {
try {
if (dbConnection != null)
dbConnection.close();
} catch (SQLException e) {
System.err.println(e);
}
}
return ls;
Но он все равно не работает после первой итерации