Calcolare il numero di tabelle di un database sqlite

di il
19 risposte

Calcolare il numero di tabelle di un database sqlite

Ho guardato sul sito:
http://www.sqlite.or
come mi avete consigliato ma non sono riuscito a trovare un sistema per calcolare il numero delle tabelle di un database ed un sistema per scorrerle.
Avevo una matrice M di dimensione 100000 colonne x 100 righe che copiandola su database ho dovuto spezzettare su più tabelle per una serie di ragioni che non vi sto a spiegare.
Ora devo leggere il database per ricaricare su matrice M2, dove M2 = M, l’intero contenuto di M ma non so come fare perché non riesco a trovare un sistema per calcolare il numero delle tabelle che compone il database che contiene M.

19 Risposte

  • Re: Calcolare il numero di tabelle di un database sqlite

    Ma hai tentato di creare una tabella con 100000 colonne ???
  • Re: Calcolare il numero di tabelle di un database sqlite

    oregon ha scritto:


    Ma hai tentato di creare una tabella con 100000 colonne ???
    Certamente, io non ci trovo nulla di strano. Questo perché con sqlite ho solo 1000 campi... forse anche meno...

    Sono ore che cerco una soluzione... Per ora ho letto questa soluzione:

    http://stackoverflow.com/questions/11506527/count-the-number-of-tables-in-the-sqlite-database

    ma non funziona perché credo che questo comando:
    Cursor cursor = getReadableDatabase().rawQuery(SQL_GET_ALL_TABLES, null);
    sia di C++ e non di JAVA...

    Puoi aiutarmi?
  • Re: Calcolare il numero di tabelle di un database sqlite

    Certo che ci trovo qualcosa di strano ...

    Che dati sono quelli organizzati su centomila colonne ?

    Non ho ancora capito di che dati si tratta ...
  • Re: Calcolare il numero di tabelle di un database sqlite

    Scusa, ed utilizzare una tabella di servizio con le informazioni necessarie?

    Comunque ci sono soluzioni alternative a tentare di realizzare una tabella con 100.000 colonne.

    Il sistema piu' semplice e' quello di utilizzare una tabella con 3 colonne in cui inserire la terna (oggetto, attributo, valore).

    Nel caso in cui i valori siano di tipo diverso, si possono utilizzare piu' tabelle (una per tipo) o una tabella del tipo

    (oggetto, attributo, tipoValore, valoreTipo1, valoreTipo2, ... valoreTipoN)

    dove oggetto e' un id che identifica il record, 'attributo' un id associato alla colonna.
  • Re: Calcolare il numero di tabelle di un database sqlite

    migliorabile ha scritto:


    Scusa, ed utilizzare una tabella di servizio con le informazioni necessarie?

    Comunque ci sono soluzioni alternative a tentare di realizzare una tabella con 100.000 colonne.

    Il sistema piu' semplice e' quello di utilizzare una tabella con 3 colonne in cui inserire la terna (oggetto, attributo, valore).

    Nel caso in cui i valori siano di tipo diverso, si possono utilizzare piu' tabelle (una per tipo) o una tabella del tipo

    (oggetto, attributo, tipoValore, valoreTipo1, valoreTipo2, ... valoreTipoN)

    dove oggetto e' un id che identifica il record, 'attributo' un id associato alla colonna.
    E' molto più complesso fare quello che dici e vorrebbe dire impiegare esattamente il doppio della memoria. La soluzione che tu chiami "tabella di servizio" invece mi piace molto e credo sia una buona idea. Potrei riempire una tabella con una serie di righe e contare il numero di righe per avere il numero delle colonne. Si, direi che è una buona idea però mi sembra strano che non esista un metodo più comodo e indolore... Penso sia una cosa basilare conoscere il numero delle tabelle di un database...

  • Re: Calcolare il numero di tabelle di un database sqlite

    Ogni database ha un insieme di tabelle di sistema da cui e' possile ottenere informazioni quali: il nome delle tabelle, la loro struttura, le eventuali chiavi, ecc.

    Dalla documentazione, sqllite ha un'unica tabella che si chiama "sqllite_master" da cui e' possibile estrarre le informazioni che ti servono.

    Piccola nota: evitare di fare considerazioni di performance (spazio, tempo) all'inizio di un progetto, a meno di non sapere gia' che cosa si vuole ottenere.

    Optare sempre per un aproccio che sia il piu' semplice ed elegante possibile.

    Ricordarsi sempre che l'algebra relazionale e' estremamente potente se usata con oculatezza.
  • Re: Calcolare il numero di tabelle di un database sqlite

    Ho letto qualcosa su questa tabella di cui parli ma non riesco a capire come funziona...

    Ho provato 2 codici ma non funzionano!!!! Ci puoi dare un'occhiata?
    int numero_tabelle = 0;
            try {
                Class.forName("org.sqlite.JDBC").getInterfaces();
                String nome = "jdbc:sqlite:" + nome_database;
                Connection conn = DriverManager.getConnection(nome);
                Statement stat = conn.createStatement();
                ResultSet rs = stat.executeQuery("SELECT * FROM sqlite_master WHERE type = 'table'");
                numero_tabelle = rs.getInt("sqlite_master");
                conn.close();
                rs.close();
            } catch (ClassNotFoundException a) {
                System.out.println("Manca la libreria SQLITE.");
            } catch (SQLException b) {
                System.out.println(nome_database + " inesistente.");
                System.out.println("E' anche possibile "
                        + "che le risorse hardware siano insufficienti.");
            }
            System.out.println("Number of tables: " + numero_tabelle);
    int numero_tabelle = 0;
            try {
                Class.forName("org.sqlite.JDBC").getInterfaces();
                String nome = "jdbc:sqlite:" + nome_database;
                Connection conn = DriverManager.getConnection(nome);
                Statement stat = conn.createStatement();
                ResultSet rs = stat.executeQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = 'table'"); 
                numero_tabelle = rs.getInt("sqlite_master");
                conn.close();
                rs.close();
            } catch (ClassNotFoundException a) {
                System.out.println("Manca la libreria SQLITE.");
            } catch (SQLException b) {
                System.out.println(nome_database + " inesistente.");
                System.out.println("E' anche possibile "
                        + "che le risorse hardware siano insufficienti.");
            }
            System.out.println("Number of tables: " + numero_tabelle);
    Su questo forum usate altri database?
  • Re: Calcolare il numero di tabelle di un database sqlite

    peruzzo ha scritto:


    Ho guardato sul sito:
    http://www.sqlite.or
    come mi avete consigliato ma non sono riuscito a trovare un sistema per calcolare il numero delle tabelle di un database ed un sistema per scorrerle.
    Avevo una matrice M di dimensione 100000 colonne x 100 righe che copiandola su database ho dovuto spezzettare su più tabelle per una serie di ragioni che non vi sto a spiegare.
    Ora devo leggere il database per ricaricare su matrice M2, dove M2 = M, l’intero contenuto di M ma non so come fare perché non riesco a trovare un sistema per calcolare il numero delle tabelle che compone il database che contiene M.
    Se hai fatto algebra lineare, sai che esiste anche il concetto di MATRICE TRASPOSTA.

    La matrice trasposta di una matrice MxN e' una matrice NxM.

    Quindi, invece di creare una tabella da 100.000 COLONNE e 100 RIGHE (un suicidio mentale solo a pensarci, NON ESISTE DB in grado di gestire una cosa del genere), puoi crea una tabella di 100 COLONNE e 100.000 RIGHE (che anche il piu' scrauso dei DB e' in grado di gestire).

    E cosi' ti risolvi anche il problema di capire come funziona 'sqllite_master'.

    Dai, che ce la puoi fare .
  • Re: Calcolare il numero di tabelle di un database sqlite

    Copiare tutto in una seconda matrice trasposta significa avere in ram 2 volte la stessa matrice e dimezzare la massima matrice scrivibile. Inoltre se la tabella avesse una colonna aggiuntiva con stringhe invece di numeri sarei fregato perché non riuscirei a gestire la cosa. Preferisco fare come ho scelto e capire come usare questa benedetta sqllite_master.
  • Re: Calcolare il numero di tabelle di un database sqlite

    peruzzo ha scritto:


    Copiare tutto in una seconda matrice trasposta significa avere in ram 2 volte la stessa matrice e dimezzare la massima matrice scrivibile. Inoltre se la tabella avesse una colonna aggiuntiva con stringhe invece di numeri sarei fregato perché non riuscirei a gestire la cosa. Preferisco fare come ho scelto e capire come usare questa benedetta sqllite_master.
    Perche' dovresti copiare tutti in una seconda matrice? Non te ne basta una?

    Tutto quello che fai con M[i,j] lo puoi fare anche con M[j,i], come saprai.

    Perche' una tabella con una colonna aggiuntiva dovrebbe essere un problema?
    Le tabelle sono fatte apposta per avere colonne aggiuntive.

    Anzi, forse il problema e' che non hai compreso correttamente che cosa e' una tabella.

    Per una tabella di un db, avere una colonna di tipo diverso dalle altre, e' una cosa di normale amministrazione. Quello che non si puo' fare e' avere una riga con dati di tipo diverso da quello delle righe precedenti.

    Voler inserire una riga di stringhe invece che di numeri (almeno per come hai descritto la tabella), questo si che ti fregherebbe: non si puo' fare!
    Avere una colonna di tipo stringa, invece, e' nativamente supportato dalla tabella.

    Comunque, se hai deciso che la strada da seguire e' quella, allora, devi ingegnarti a risolvere i problemi che via via incontrerai.

    E' sempre un male forzare uno strumento a funzionare in modo diverso da quello che e' il suo funzionamento nativo.
  • Re: Calcolare il numero di tabelle di un database sqlite

    Quindi tu non sei in grado di correggere il mio codice sopra? Io ho già tutto il programma pronto e devo aggiungere solo la parte relativa al calcolo del numero di tabelle... peccato...
  • Re: Calcolare il numero di tabelle di un database sqlite

    Noto con dispiacere che non hai perso questi tuo genere di provocazione molto ma molto fastidiosa!!!
    Se le persone ti danno dei consigli è perché hanno più espierienza di te, e ti vogliono portare sulla giusta strada...è una forzatura quello che vuoi fare te e incontrerai centinaia di difficolta ed grandezze di databse enormi per far ste robe qui, cmq contento te...
  • Re: Calcolare il numero di tabelle di un database sqlite

    Se hai una matrica 5000x5000 di object non puoi fare la trasposta inoltre metti il caso di avere 4999 colonne di double e 1 colonna di string ovvero una matrice "mista" di 5000x5000; con il tuo sistema non te la cavi, per questo cercavo di allargarmi alle tabelle conservando nei campi la memoria del tipo di oggetto (stringa, double, ecc...), la mia non era affatto una provocazione e come ho già detto la tua è davvero una bella soluzione ma non espandibile a tutti i contesti... tutto qui...
  • Re: Calcolare il numero di tabelle di un database sqlite

    Per curiosità: a cosa ti servono 100 mila campi??
Devi accedere o registrarti per scrivere nel forum
19 risposte