我有一个使用Hibernate连接从db加载数据的方法。我想添加到此方法-进度栏-用于显示何时加载数据将结束。
这是我加载数据的方法:
@FXML
private JFXProgressBar progressBar;
@FXML
private JFXTextArea textArea;
@FXML
void executeQuery(MouseEvent event) {
//LOAD DATA FROM DB USING HIBERNATE AND SET TEXT TO TEXTAREA
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("firebird_config_file");
EntityManager entityManager = entityManagerFactory.createEntityManager();
TypedQuery<Programy> query1 = entityManager.createQuery("select p from Programy p", Programy.class);
String resultOfTheQuery="";
for (Programy programy : query1.getResultList() ) {
String tmp= "Nazwa programu: " + programy.getExeNazwa() + " Kod programu: " + programy.getKodProg()+" Wersja: "+programy.getWersja()+"\n";
resultOfTheQuery+=tmp;
}
textArea.setText(resultOfTheQuery);
}
答案 0 :(得分:2)
我认为这很难(即使不是不可能)实现。
如果您从传统意义上考虑SQL查询,则它不知道有多少个数据集以及将花费多长时间。我不知道有任何SQL工具(例如DB Visualizer,DataGrip等)会向您显示进度条以及对所需时间的正确估计,因为它始终取决于表中的数据量。
将需要一种测量数据何时加载25%/ 50%/ 75%/ ...的方法。唯一的事情是,可能需要花费很多时间在代码中
DatagramSocket()
通话。
我建议删除进度条,并添加诸如微调器之类的东西,以表明正在进行数据加载。 JFoenix有一个不错的材质设计微调器。
您还可以添加一个简单的“正在加载数据...”文本。
编辑(以使其更加可见):
正如@Slaw正确建议的那样,您还需要将entityManager.createQuery(...)
调用放入新线程中。否则,当查询需要更多时间时,UI线程可能会冻结。