Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Con Vector dare il numero di righe non serve. Io l'ho scritto in quel modo per farti capire come puoi fare, nella realtà dovrai fare:

    1) Un vector che memorizzi elementi Vector<String>; quindi, devi avere questo: Vector<Vector<String>> tabellaCompleta = new Vector<Vector<String>>();

    2) Ogni ciclo con rs ti da una nuova riga, ergo, alla termine del ciclo con rs tu hai tutta la riga al completo. Quindi:

    codice:
    Vector<Vector<String>> tabellaCompleta = new Vector<Vector<String>>();
    
    while(rs.next()) {
      String col1 = rs.getString("colonna1");
      String col2 = rs.getString("colonna2");
      // .........................................
      String colN = rs.getString("colonnaN");
      
      Vector<String> row = new Vector<String>();
      row.add(col1);
      row.add(col2);
      // ..................
      row.add(colN);
      tabellaCompleta.add(row);
    }
    ed ecco che hai risolto il problema.

  2. #12
    ho fatto questa prova qua con gli ArrayList<String> (che sono praticamente equivalenti a Vector<String> da quanto ho capito).
    codice:
        public ArrayList<String> select() throws ClassNotFoundException, SQLException, IOException {
            ArrayList<String> list = null;
            conn = DBManager.getInstance().takeConnection();
            CallableStatement cstmt = conn.prepareCall("{ CALL getBook() }");
            ResultSet rs = cstmt.executeQuery();
            while (rs.next()) {
                list = new ArrayList<String>();
                list.add(String.valueOf(rs.getInt("book_id")));
                list.add(rs.getString("title"));
                list.add(rs.getString("author_name"));
                list.add(rs.getString("editor_name"));
                list.add(String.valueOf(rs.getDouble("price")));
                list.add(rs.getString("isbn"));
                list.add(rs.getString("note"));
    //            ((MyTableModel) PanelTable.getTable().getModel()).addRow(list.toArray());
            }
            cstmt.close();
            return list;
        }
    poi nel JPanel:
    codice:
                ArrayList<ArrayList<String>> elementi = new ArrayList<ArrayList<String>>();
                ArrayList<String> list = dbman.select();
                for (int i = 0; i < list.size(); i++) {
                    elementi.add(list);
                }
    
                for (int j = 0; j < elementi.size(); j++) {
                    ((MyTableModel) tableData.getModel()).addRow(elementi.get(j).toArray());
                }
    Ottengo solo 7 righe con lo stesso valore.
    cioè il problema iniziale.
    il problema che nn reisco a risolvere è questo: far ritornare dal metodo select() sia il numero di righe, che i valori per ogni riga.

    EDIT: abbiamo risposto insieme. adesso provo.

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti ho appena risposto, sopra di te.

    Allora, se con select() vuoi far tornare la singola riga, l'unica cosa che puoi fare, è settare ogni volta che entri in select() la posizione della riga corrente... non puoi fare altrimenti.

  4. #14
    si si ho letto, avevamo risposto insieme.
    allora ho fatto una prova col tuo codice:
    codice:
        public Vector<Vector<String>> select() throws ClassNotFoundException, SQLException, IOException {
            conn = DBManager.getInstance().takeConnection();
            Vector<Vector<String>> tabella = new Vector<Vector<String>>();
            CallableStatement cstmt = conn.prepareCall("{ CALL getBook() }");
            ResultSet rs = cstmt.executeQuery();
            while (rs.next()) {
                Vector<String> row = new Vector<String>();
                row.add(String.valueOf(rs.getInt("book_id")));
                row.add(rs.getString("title"));
                row.add(rs.getString("author_name"));
                row.add(rs.getString("editor_name"));
                row.add(String.valueOf(rs.getDouble("price")));
                row.add(rs.getString("isbn"));
                row.add(rs.getString("note"));
                tabella.add(row);
            }
            cstmt.close();
            System.out.println(tabella);
            return tabella;
        }
    il System.out.println(tabella); però nn stampa mai nulla.

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Controlla che valori inserisci nel Vector chiamato row. Se leggi dei valori deve funzionare, non può essere altrimenti...


    Da ora non potrò risponderti sino a questa sera; quindi se hai problemi li leggerò solo allora.

  6. #16
    no no funziona.
    avevo fatto un errore io nel JPanel.

    ricapitolo usando ArrayList al posto di Vector:
    codice:
        public ArrayList<ArrayList<String>> select() throws ClassNotFoundException, SQLException, IOException {
            conn = DBManager.getInstance().takeConnection();
            ArrayList<ArrayList<String>> tabella = new ArrayList<ArrayList<String>>();
            CallableStatement cstmt = conn.prepareCall("{ CALL getBook() }");
            ResultSet rs = cstmt.executeQuery();
            while (rs.next()) {
                ArrayList<String> row = new ArrayList<String>();
                row.add(String.valueOf(rs.getInt("book_id")));
                row.add(rs.getString("title"));
                row.add(rs.getString("author_name"));
                row.add(rs.getString("editor_name"));
                row.add(String.valueOf(rs.getDouble("price")));
                row.add(rs.getString("isbn"));
                row.add(rs.getString("note"));
                tabella.add(row);
    //            ((MyTableModel) PanelTable.getTable().getModel()).addRow(row.toArray());
            }
            cstmt.close();
            return tabella;
        }
    nell'evento del JPanel:
    codice:
                ArrayList<ArrayList<String>> elementi = dbman.select();
                for (int j = 0; j < elementi.size(); j++) {
                    ((MyTableModel) tableData.getModel()).addRow(elementi.get(j).toArray());
                }
    nn conoscevo questa modalità di usare ArrayList (o Vector che sia):
    ArrayList<ArrayList<String>>

    grazie mille per l'aiuto!!!

  7. #17
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Più che una modalità è semplicemente la OOP e le Collections Generiche.

    Prego! ^^

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.