2010-05-17 4 views
3

Je tente d'afficher une table de données SQLite dans un jtable mais j'ai une erreur « SQLite est de type avant que »affichage sqlite datatable dans un jtable

comment pourrais-je l'afficher dans un jtable

   try { 
     long start = System.currentTimeMillis(); 

        Statement state = ConnectionBd.getInstance().createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE, 
                ResultSet.CONCUR_READ_ONLY 

    ); 
    ResultSet res = state.executeQuery("SELECT * FROM data"); 

     ResultSetMetaData meta = res.getMetaData(); 

     Object[] column = new Object[meta.getColumnCount()]; 

     for(int i = 1 ; i <= meta.getColumnCount(); i++){ 
      column[i-1] = meta.getColumnName(i); 
     } 

     res.last(); 
     int rowCount = res.getRow(); 
     Object[][] data = new Object[res.getRow()][meta.getColumnCount()]; 

     res.beforeFirst(); 
     int j = 1; 

     while(res.next()){ 
      for(int i = 1 ; i <= meta.getColumnCount(); i++) 
       data[j-1][i-1] = res.getObject(i); 

      j++; 
     } 

     res.close(); 
     state.close(); 

     long totalTime = System.currentTimeMillis() - start; 
     result.removeAll(); 
     result.add(new JScrollPane(new JTable(data, column)), BorderLayout.CENTER); 
     result.add(new JLabel("execute in " + totalTime + " ms and has " + rowCount + " ligne(s)"), BorderLayout.SOUTH); 
     result.revalidate(); 

    } catch (SQLException e) { 
     result.removeAll(); 
     result.add(new JScrollPane(new JTable()), BorderLayout.CENTER); 
     result.revalidate(); 
     JOptionPane.showMessageDialog(null, e.getMessage(), "ERREUR ! ",      JOptionPane.ERROR_MESSAGE); 
    } 

merci

Répondre

1

l'appel à res.last() est ce qui est la cause du problème. Si vous voulez savoir combien de lignes il y a, alors vous pouvez soit lancer un SELECT count(*) FROM (<your-query>) base ou plus simple, utiliser une ArrayList plutôt qu'un tableau d'objets pour contenir les lignes. (Vous pouvez toujours utiliser Object [] pour chaque ligne, car le nombre de colonnes est connu à l'avance.)