[英]show the first SQL row in jTable in java
jTable 不顯示第一行。 我用目錄中的文件列表創建了 SQL 表,並在 Java 中顯示在 jTable 中。 我看到了表格,但我只能看到第一行。
示例:在目錄中我有 20 個文件。 代碼將所有 20 個文件插入到 SQL 表中,但在 jTable 中僅顯示最后 19 個文件。
我的代碼:
public void ba() throws SQLException{
String dirPath = "c:/Users/hajdukri/Desktop/Source folder";
File dir = new File(dirPath);
File[] files = dir.listFiles();
String sqll = "SELECT * FROM t1;";
st = con.prepareStatement(sqll);
rs = st.executeQuery();
String sql2 = "DELETE FROM t1";
st = con.prepareStatement(sql2);
st.executeUpdate();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm kk");
java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
if (files.length == 0){
System.out.println("The directory is empty");
} else {
for (File aFile : files) {
int fileslength = 0;
String S = null;
if(aFile.length()>1024 || (aFile.length()<(1024*1024))){
fileslength =(int) (aFile.length()/1024);
S = "KB";
}
if(aFile.length()>(1024*1024)){
fileslength =(int) (aFile.length()/(1024*1024));
S = "MB";
}
if(aFile.length()<1024){
fileslength =(int) (aFile.length());
S = "B";
}
String createDate = sdf.format(aFile.lastModified());
String remark = "Remark";
String sql = "INSERT INTO t1 (date,login,name,size,time,action) VALUES ('"+createDate+"'"+","+"'"+userName+"'"+","+"'"+aFile.getName()+"'"+","+"'"+fileslength+S+"'"+","+"'"+sdf.format(aFile.lastModified())+"'"+","+"'"+remark+"')";
st = con.prepareStatement(sql);
st.executeUpdate();
}
}
try {
String sql = "SELECT * FROM t1";
st = con.prepareStatement(sql);
rs = st.executeQuery();
while(rs.next())
{
TableModel model = DbUtils.resultSetToTableModel(rs);
jTable1.setModel(model);
jTable1.scrollRectToVisible(jTable1.getCellRect(jTable1.getRowCount()-1, 0, true));
}
} catch (SQLException ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}
}
創建的 jTable:
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
{null, null, null, null, null, null},
},
new String [] {
"Date", "Login", "Name", "Size", "File", "Action"
}
) {
Class[] types = new Class [] {
java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Byte.class, java.lang.Object.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.setEditingColumn(1);
jTable1.setEditingRow(1);
jTable1.setSelectionBackground(new java.awt.Color(0, 153, 51));
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTable1MouseClicked(evt);
}
});
如何將第一行也設置為可見? 我正在尋找同樣的問題,但我找不到 :( 你能幫我嗎?
while(rs.next())
{
TableModel model = DbUtils.resultSetToTableModel(rs);
jTable1.setModel(model);
jTable1.scrollRectToVisible(jTable1.getCellRect(jTable1.getRowCount()-1, 0, true));
}
您不需要 while 循環。 DbUtils 方法會將 ResultSet 中的所有數據讀入 TableModel。
您的代碼的問題在於while (rs.next)
讀取第一行並忽略它。 DbUtils 方法然后讀取其余的數據。
所以代碼應該是:
rs = st.executeQuery();
TableModel model = DbUtils.resultSetToTableModel(rs);
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.