Swing表单数据库连接

时间:2012-06-08 15:51:06

标签: java database swing database-connection

我是Java和NetBeans的新手,我正在尝试创建一个

的表单
  1. 使用JDBC连接
  2. 连接到数据库
  3. 从七列中读取信息并将其显示在表单
  4. 上的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);
    

1 个答案:

答案 0 :(得分:3)

要真正回答您的问题:您的getConnection方法是一种public static方法,因此您可以随时随地调用此方法。只需拨打ConnectionManager.getConnection(),您需要连接。

关于您的代码的其他一些评论:

  • 您不应该使用actionPerformed方法查询数据库。在EDT上调用此方法,并且对结果进行数据库查询和循环是一项长期运行的任务。在EDT上执行此任务将阻止您的UI。有关Swing和线程的更多信息,请参阅Concurrency in Swing教程
  • 考虑缓存Connection对象
  • 不要忘记关闭资源。如果我没记错的话,之后必须关闭ResultSet。在finally块中执行此操作