Swing-Formular-Datenbank-Verbindung
Ich bin neu in Java und NetBeans, und ich bin versucht, ein Formular erstellen, dass
- verbindet zu einer Datenbank mit JDBC Verbindung
- liest Informationen aus sieben Spalten und zeigt Sie auf einer jTable-Komponente bereits auf dem Formular
Ich schon so arbeiten. Ich versuche nun, meinen code zu optimieren und eine bessere Nutzung der Architektur zu trennen der Verbindung zur Datenbank und das user interface (UI Formen) - code, so dass ich eine separate Klasse zu führen und dann rufen Sie einfach die Methode aus dieser Klasse in der code hinter der Schaltfläche. Das problem mit NetBeans und Formen ist, dass ich nicht weiß, wo diese Klasse instanziieren und so. Unten ist ein bewältigen der Klasse, die habe ich erstellt, um führen Sie das JDBC-Verbindung
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;
}
}
Dies ist bereits ein .java
- Datei. Ich habe eine JForm, und ich brauche, um diese Methode aufzurufen hinter der Schaltfläche. Hier ist, wie ich es in der form derzeit ohne Verwendung einer connection-Klasse:
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());
}
Wie kann ich die Klasse verwenden, statt hart codieren, in der Verbindung? Ich habe bereits die Klasse aber wo muss ich den instanziert. Mache ich es in der main-form oder mache ich es in der actionevent-code mit dem folgenden code?
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
con = ConnectionManager.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Buchstäblich Ihre Frage zu beantworten: Ihre
getConnection
Methode ist einepublic static
- Methode, damit Sie anrufen kann dies von überall aus. Rufen Sie einfachConnectionManager.getConnection()
wo immer Sie brauchen diese Verbindung.Einige andere Bemerkungen zu deinem code:
actionPerformed
Methode. Diese Methode wird aufgerufen, auf der EDT, und dabei eine Datenbank-Abfrage und die Schleife über die Ergebnisse ist eine lang andauernde Aufgabe. Doing diese Aufgabe auf den EDT blockieren der Benutzeroberfläche. Konsultieren Sie die Concurrency in Swing tutorial für mehr Infos über Swing und threadingConnection
ObjektResultSet
muss danach geschlossen. Tun Sie dies in einem finally-blockSwingWorker
ist wohl in diesem Fall besser. Aber das ist alles erklärt in diesem tutorial habe ich verlinkt in meiner AntwortConnectionManager.getConnection()
, mein schlechtes. Jeder anständige IDE vorschlagen import, Klasse