Я новичок в Java и NetBeans, и я пытаюсь создать форму, котораяКачелей подключение формы базы данных
- подключается к базе данных с использованием JDBC соединения
- считывает информацию из семи колонок, и отображает их на jTable компонент уже на форме
У меня уже есть эта работа. Теперь я пытаюсь оптимизировать свой код и использовать лучшую архитектуру для разделения соединения с базой данных и кода пользовательского интерфейса (UI-форм), чтобы я мог иметь отдельный класс для выполнения соединения, а затем просто вызывать метод из этого класса в код за кнопкой. Проблема с использованием NetBeans и форм заключается в том, что я не знаю, где создавать экземпляр этого класса и т. Д. Ниже совладать класса, который я создал, чтобы выполнить соединение JDBC
public class ConnectionManager {
private static String url = "jdbc:mysql://localhost:3306/prototypeeop";
private static String driverName = "com.mysql.jdbc.Driver";
private static String username = "root";
private static String password = "triala";
private static Connection con;
private static String url;
public static Connection getConnection() {
try {
Class.forName(driverName);
try {
con = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
// log an exception. fro example:
System.out.println("Failed to create the database connection.");
}
} catch (ClassNotFoundException ex) {
// log an exception. for example:
System.out.println("Driver not found.");
}
return con;
}
}
Это уже .java
файл. У меня есть JForm, и мне нужно вызвать этот метод за кнопкой. Вот как я это делаю в форме в настоящее время без использования класса соединений:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
model.setRowCount(0);
String sql="Select * from eopdata";
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/prototypeeop","root","jakamuga");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
String Year=rs.getString("Year");
String Month=rs.getString("Month");
String Day=rs.getString("Day");
String MJD=rs.getString("MJD");
Double xarcsec=rs.getDouble("xarcsec");
Double yarcsec=rs.getDouble("yarcsec");
Double UT1UTCsec=rs.getDouble("UT1UTCsec");
model.addRow(new Object[] { Year, Month, Day, MJD,xarcsec,yarcsec,UT1UTCsec});
}
}
catch(Exception e) {
JOptionPane.showMessageDialog(this, e.getMessage());
}
Как я могу использовать класс вместо жесткого кодирования в связи с этим? Я уже создал класс, но где его создать. Я делаю это в основном форме или я делаю это в коде actionevent со следующим кодом?
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
con = ConnectionManager.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
Я попытаюсь просто вызвать этот метод. Следуйте за своим предложением, так что вы говорите, что я должен создать отдельный класс для выполнения sql-запроса? я собираюсь прочитать в EDT (Thread Dispatch Thread), но если вы могли бы объяснить больше. Я думаю, вы говорите, что я должен создать хранимую процедуру и вызывать ее вместо этого. – rambokayambo
@ user1332681 Я говорю, что вы должны выполнять запрос своей базы данных и разбор этих результатов в другом потоке, а не только на другом методе. В противном случае вы получите невосприимчивый пользовательский интерфейс – Robin
, к сожалению, я новичок, и я не знаю, как сделать многопоточное программирование – rambokayambo