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

标签 java swing jtable sql-server-2014-express

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/

相关文章:

java - 在 JTable 中只更改一个单元格的颜色

java - 存储在数组中的数组被覆盖为最后添加的数组的内容

java - Java中如何在同一目录下创建多个文件夹

java - 为什么按下相应按钮后按键绑定(bind)停止工作?

Java - 是否可以将 JMenuBar 添加到 JFrame 的装饰窗口?

java - 将 ResultSet 添加到 Jtable 中(两个类之间)

java - 我的 cdh5.2 集群在运行 hbase MR 作业时出现 FileNotFoundException

java - PL/SQL 数据类型 BINARY_INTEGER 如何具体化为 Java 类型?

java - 尽管使用了 validate(),GUI 仍不更新

java - 如何在可调整大小的 JTable 的单列内水平滚动?