public void search() throws Exception{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:******"; String user = "*****"; String pass = "*****"; Connection con = DriverManager.getConnection(url,user,pass); Statement state = con.createStatement(); ResultSet rs = state.executeQuery(""); ResultSetMetaData rsMetadata = rs.getMetaData(); int columns = rsMetadata.getColumnCount(); DefaultTableModel dtm = new DefaultTableModel(); Vector column_name = new Vector(); Vector data_rows = new Vector(); for (int i=1; i<columns;i++){ column_name.addElement(rsMetadata.getColumnName(i)); } dtm.setColumnIdentifiers(column_name); while(rs.next()){ data_rows = new Vector(); for (int j=1; j<columns; j++){ data_rows.addElement(rs.getString(j)); } dtm.addRow(data_rows); } tblPatient.setModel(dtm); }
在我的ResultSet rs = state.executeQuery()我使用这个sql
"SELECT " + "pIDNo AS 'Patient ID'," + "pLName AS 'Last Name'," + "pFName AS 'First Name'," + "pMI AS 'M.I.'," + "pSex AS 'Sex'," + "pStatus AS 'Status'," + "pTelNo AS 'Contact No.'," + "pDocID AS 'Doctor ID'," + "pAddr AS 'St. No.'," + "pStreet AS 'St. Name'," + "pBarangay AS 'Barangay'," + "pCity AS 'City'," + " pProvince AS 'Province'," + " pLNameKIN AS 'Last Name'," + "pFNameKIN AS 'First Name'," + "pMIKIN AS 'M.I.'," + "pRelationKIN AS 'Relation'," + "pTotalDue AS 'Total Due'" + " FROM dbo.Patients");
首先我运行这一行(pTotalDue没有来到jTable.)
在我第二次尝试显示它的时候我这样做:
"SELECT pTotalDue AS 'Total Due' FROM dbo.Patients"
现在我试过这个,我觉得我的代码真的错了. BTW此列具有货币数据类型
为什么没有显示给我的JTable?任何人都可以告诉我我的代码是什么问题?
(给我的答案中有问题)
公共类QueryOnWorkerThread扩展了SwingWorker {
私人最终JTable tableToUpdate;
public QueryOnWorkerThread( JTable aTableToUpdate ) { tableToUpdate = aTableToUpdate; } @Override protected TableModel doInBackground() throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:OJT_dsn"; String user = "sa"; String pass = ""; Connection con = DriverManager.getConnection( url,pass ); Statement state = con.createStatement(); ResultSet rs = state.executeQuery(""); ResultSetMetaData rsMetadata = rs.getMetaData(); int columns = rsMetadata.getColumnCount(); DefaultTableModel dtm = new DefaultTableModel(); Vector column_name = new Vector(); Vector data_rows; //note the <= check iso the < check (as the count starts at index 1) for (int i=1; i<=columns;i++){ column_name.addElement(rsMetadata.getColumnName(i)); } dtm.setColumnIdentifiers(column_name); while(rs.next()){ data_rows = new Vector(); //note the <= check iso the < check (as the count starts at index 1) for (int j=1; j<=columns; j++){ data_rows.addElement(rs.getString(j)); } dtm.addRow(data_rows); } return dtm; } `@Override <<<<<<<<<<<<<<<<<<<<< I have a problem here it says : done() in javaapplication25.SearchPatient.QueryWorkerThread cannot override done() in javax.swing.SwingWorker overriden method does not throw java.lang.Exception,what does it mean sir?` protected void done() throws Exception{ //this method runs on the EDT,so it is safe to update our table here try { tableToUpdate.setModel( get() ); } catch ( InterruptedException e ) { throw new RuntimeException( e ); } catch ( ExecutionException e ) { throw new RuntimeException( e ); } }
解决方法
尝试这个
DefaultTableModel dtm=(DefaultTableModel)table.getModel(); for (int i = dtm.getRowCount() - 1; i > -1; i--) { dtm.removeRow(i); } Connection con = DriverManager.getConnection(url,pass); Statement state = con.createStatement(); ResultSet rs = state.executeQuery("Your sql Query"); while(rs.next()) { String str1=rs.getString(1); String str2=rs.getString(2); String str3=rs.getString(3); String str4=rs.getString(4); String str5=rs.getString(5); : : : dtm.addRow(new Object[]{str1,str2,str3,str4,str5}); }