2014-06-08 92 views
1

我一直在試圖弄清楚如何用我的結果集中的數據填充jtable,並發現使用DBUtils可能是最簡單的方法,但不幸的是它不適合我在所有。該程序運行,但Jtable仍然是空的。我不明白我在哪裏出錯了。我有導入net.proteanit.sql.DbUtils;在頂部導入,並將jar添加到類路徑中。這裏是我的代碼:JTable沒有從結果集中用DButils填充

private void jPanel3FocusGained(java.awt.event.FocusEvent evt) {          

    // TODO add your handling code here: 

    // JDBC driver name and database URL 
String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
String DB_URL = "jdbc:mysql://localhost/new"; 

// Database credentials 
String USER = "root"; 
String PASS = ""; 

Connection conn = null; 
PreparedStatement stmt = null; 
try{ 
    //STEP 2: Register JDBC driver 
    Class.forName("com.mysql.jdbc.Driver"); 

    //STEP 3: Open a connection 
    System.out.println("Connecting to database..."); 
    conn = DriverManager.getConnection(DB_URL,USER,PASS); 

    //STEP 4: Execute a query 
    System.out.println("Creating statement..."); 
    String sql; 
    sql = "SELECT * FROM user"; 
    stmt = conn.prepareStatement(sql); 
    //Bind values into the parameters. 
    ResultSet rs = stmt.executeQuery(); 

    jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 
} 
    catch (SQLException ex) { 

JOptionPane.showMessageDialog(null, ex); 
} 
catch(Exception e){ 
    //Handle errors for Class.forName 
    e.printStackTrace(); 
} 


finally { 

try { 

    stmt.close(); 
    conn.close(); 

} 
catch (SQLException e) { /* ignore */ 

} 



try { 

    conn.close(); 

} catch (SQLException e) { /* ignore */ 

} 
} 
}        
+0

1)爲了更好地幫助越早,張貼[MCVE(http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 2)對代碼塊使用一致的邏輯縮進。代碼的縮進旨在幫助人們理解程序流程。 –

+0

當我讓它工作。顯然,代碼沒有問題,但ActionGained事件由於某種原因不起作用。使用按鈕按下操作事件和相同的代碼工作。奇怪。 – Ghias

回答

2

我上了同一個點stucked, 所以我用「矢量」

我們都知道使用ArrayList的是更好的方法考慮載體的實現時但在使用jTables時,默認情況下,您有一些簡單的方法來管理數據流並填充到jTable中,這將簡化編碼。 因此,如果您在編寫像我這樣的場景時體驗較少,我建議使用向量

只需導入這一點和代碼。

import java.util.Vector;

要了解,如何使用矢量與的ResultSet工作參考this

+0

*「檢查你把Class.forName()」*放在哪裏?你可以說得更詳細點嗎? –

+1

OP聲明代碼正常工作。檢查評論。 – Morpheus

+1

danthaaa我認爲OP代碼正在工作請參閱有關問題的評論 – Alupotha