【发布时间】:2022-01-28 01:41:19
【问题描述】:
我必须使用线程将记录保存到 H2 数据库。
这是我的数据库类中用于将类别(具有名称和描述的类)保存到数据库中的方法:
public static void saveNewCategory(Category newCategory, Connection connection){
try {
String sql = "INSERT INTO CATEGORY(NAME, DESCRIPTION) VALUES(?, ?)";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, newCategory.getName());
ps.setString(2, newCategory.getDescription());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
这是我的线程类,它应该实现该原理并使用线程将其保存到数据库中
public class SaveCategoryThread implements Runnable{
private static Connection connectToDatabase;
private Category category;
public SaveCategoryThread(Category categoryC) {
category=categoryC;
}
@Override
public void run() {
try {
openConnectionWithDatabase();
Database.saveNewCategory(category,connectToDatabase);
} catch (IOException | SQLException e) {
e.printStackTrace();
} finally {
closeConnectionWithDatabase();
}
}
public synchronized void openConnectionWithDatabase() throws IOException, SQLException {
if (Database.activeConnectionWithDatabase) {
try {
wait();
System.out.println("Connection is busy");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
connectToDatabase = Database.connectToDatabase();
}
public synchronized void closeConnectionWithDatabase() {
try {
Database.disconnectFromDatabase(connectToDatabase);
} catch (SQLException ex) {
ex.printStackTrace();
}
notifyAll();
}
}
这就是我在接受用户输入的 JavaFX 类中执行它的方式
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new SaveCategoryThread(category));
但它不起作用,没有错误或任何东西,但结果没有保存到数据库中。
【问题讨论】:
-
请在问题中包含
Database类的完整实现
标签: java multithreading jdbc