показать первую строку SQL в jTable в java

jTable не показывает первую строку. Я создал таблицу SQL со списком файлов в каталоге и показываю в jTable на Java. Я вижу таблицу, но не вижу только первую строку.

Пример: В каталоге у меня 20 файлов. код вставляет в таблицу SQL все 20 файлов, но в 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);
        }
    });

Как я могу сделать видимой и первую строку? Я ищу те же проблемы, но не могу найти :( Не могли бы вы мне помочь?


person Xhyzors    schedule 30.09.2015    source источник
comment
Проверьте это, как только вы можете получить кое-что... stackoverflow.com/questions/10620448/   -  person S Harish Morampudi    schedule 30.09.2015


Ответы (1)


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);
...
person camickr    schedule 30.09.2015
comment
ааааааа спасибо большое :) - person Xhyzors; 30.09.2015
comment
@Xhyzors, не забудьте принять ответ, нажав на галочку, чтобы люди знали, что проблема решена. - person camickr; 30.09.2015