Autore Topic: Caricare record da file sql esterno  (Letto 663 volte)

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Caricare record da file sql esterno
« il: 10 Novembre 2010, 15:43:07 CET »
0
Ho adattato un esempio che ho trovato in rete alle mie esigenze. Di seguito il listato java

Codice (Java): [Seleziona]
public class DatabaseHelper extends SQLiteOpenHelper {

        public static final String DATABASE_NAME = "employee_directory";
       
        public DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                /*
                 * Create the employee table and populate it with sample data.
                 * In step 6, we will move these hardcoded statements to an XML document.
                 */

                String sql = "CREATE TABLE IF NOT EXISTS employee (" +
                                                "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                                "Nome TEXT, " +
                                                "Cognome TEXT, " +
                                                "City TEXT, " +
                                                "Indirizzo TEXT, " +
                                                "CAP TEXT, " +
                                                "Prov TEXT, " +
                                                "managerId INTEGER)";
                db.execSQL(sql);
               
                ContentValues values = new ContentValues();

                values.put("Nome", "Mario");
                values.put("Cognome", "Rossi");
                values.put("City", "Roma");
                values.put("Indirizzo", "Piazza Italia");
                values.put("CAP", "00100");
                values.put("Prov", "RM");
                db.insert("employee", "Cognome", values);

                values.put("Nome", "Gianni");
                values.put("Cognome", "Verdi");
                values.put("City", "Milano");
                values.put("Indirizzo", "Via Berti 2");
                values.put("CAP", "20100");
                values.put("Prov", "MI");
                values.put("managerId", "1");
                db.insert("employee", "Cognome", values);

                values.put("Nome", "Maria");
                values.put("Cognome", "Bianchi");
                values.put("City", "Bologna");
                values.put("Indirizzo", "Piazza Roma");
                values.put("CAP", "45100");
                values.put("Prov", "BO");
                values.put("managerId", "1");
                db.insert("employee", "Cognome", values);
               
                values.put("Nome", "Laura");
                values.put("Cognome", "rossi");
                values.put("City", "Pesaro");
                values.put("Indirizzo", "Via Roma");
                values.put("CAP", "61100");
                values.put("Prov", "PU");
                values.put("managerId", "2");
                db.insert("employee", "Cognome", values);

                values.put("Nome", "Chiara");
                values.put("Cognome", "Gialli");
                values.put("City", "Ancona");
                values.put("Indirizzo", "Viale della Vittoria");
                values.put("CAP", "60100");
                values.put("Prov", "AN");
                values.put("managerId", "2");
                db.insert("employee", "Cognome", values);
               
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("DROP TABLE IF EXISTS employees");
                onCreate(db);
        }
       
}

Ora la mia esigenza è quella di caricare i dati da un file esterno e non inserirli uno ad uno come nell'esempio qui sopra.
nessuno può darmi una mano?

Offline giumazzi

  • Utente junior
  • **
  • Post: 54
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    acer liquid - android 2.1
  • Sistema operativo:
    windows xp - linux xubuntu - easy peasy
Re:Caricare record da file sql esterno
« Risposta #1 il: 10 Novembre 2010, 17:40:30 CET »
+2
Trovato la soluzione
Codice (Java): [Seleziona]
public class DatabaseHelper extends SQLiteOpenHelper {

//      public static final String DATABASE_NAME = "employee_directory";
       
//      public DatabaseHelper(Context context) {
//              super(context, DATABASE_NAME, null, 1);

                public final static String DB_NAME = "employee.db";
                private final static  int DATABASE_VERSION = 1;
               
                public DatabaseHelper(Context context) {
                        super(context, DB_NAME, null, DATABASE_VERSION);
                }

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                db.execSQL("DROP TABLE " + employee.TABLE_NAME);
                db.execSQL("CREATE TABLE " + employee.TABLE_NAME + " ("
                                + employee._id + " INTEGER PRIMARY KEY,"
                + employee.Nome + " TEXT,"
                + employee.Cognome + " TEXT,"
                + employee.City + " TEXT,"
                + employee.Indirizzo + " TEXT,"
                + employee.CAP + " TEXT,"
                + employee.Prov + " TEXT,"
                + employee.managerId + " INTEGER"
                + ");");
                load(db, new InputStreamReader(this.getClass().getResourceAsStream("dati.csv")));
        }
       
        @Override
//      public void onCreate(SQLiteDatabase db) {
        public void onCreate(SQLiteDatabase db) {
                db.execSQL("CREATE TABLE " + employee.TABLE_NAME + " ("
                                + employee._id + " INTEGER PRIMARY KEY,"
                + employee.Nome + " TEXT,"
                + employee.Cognome + " TEXT,"
                + employee.City + " TEXT,"
                + employee.Indirizzo + " TEXT,"
                + employee.CAP + " TEXT,"
                + employee.Prov + " TEXT,"
                + employee.managerId + " INTEGER"
                + ");");                       
                load(db, new InputStreamReader(this.getClass().getResourceAsStream("dati.csv")));
        }                              
                /*
                 * Create the employee table and populate it with sample data.
                 * In step 6, we will move these hardcoded statements to an XML document.
                 */

        private void load(SQLiteDatabase db, InputStreamReader in) {
                BufferedReader reader = new BufferedReader(in);
                try {
                        String line = null;
                        while ( (line = reader.readLine()) != null ) {
                                db.insert(employee.TABLE_NAME, null, employee.getContentValues(line));
                        }
                        reader.close();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (in != null) {
                                try {
                                        in.close();
                                } catch (IOException e) {
                                }
                        }
                }
        }

}
Aggiunto il file employee.java
Codice (Java): [Seleziona]
public class employee {
        public final static String TABLE_NAME                   = "employee";
        public final static String _id                                  = "_id";
        public final static String Nome                         = "Nome";
        public final static String Cognome                              = "Cognome";
        public final static String City                         = "City";
        public final static String Indirizzo                = "Indirizzo";
        public final static String CAP                          = "CAP";
        public final static String Prov                         = "Prov";
        public final static String managerId                    = "managerId";
       
        public static ContentValues getContentValues(String value) {
                ContentValues result = new ContentValues();
                StringTokenizer stringTokenizer = new StringTokenizer(value, ",");
                result.put(employee._id, stringTokenizer.nextToken());
                result.put(employee.Nome, stringTokenizer.nextToken());
                result.put(employee.Cognome, stringTokenizer.nextToken());
                result.put(employee.City, stringTokenizer.nextToken());
                result.put(employee.Indirizzo, stringTokenizer.nextToken());
                result.put(employee.CAP, stringTokenizer.nextToken());
                result.put(employee.Prov, stringTokenizer.nextToken());
                result.put(employee.managerId, stringTokenizer.nextToken());
                return result;
        }
}
il file dati.csv l'ho salvato nello stesso package.
Lo spunto mi è arrivato consultando il tutorial "Creare Database da file csv" http://www.anddev.it/index.php/topic,495.0.html