gpt4 book ai didi

java - 在 java 中显示 jTable 中的第一行 SQL

转载 作者:行者123 更新时间:2023-11-30 10:56:55 25 4
gpt4 key购买 nike

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);
...

关于java - 在 java 中显示 jTable 中的第一行 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com