mercredi 2 mars 2016

CSV to SQLite Import Issues

I've been working on importing a csv list into SQLite. I'm fairly new to Android development so I've been using lots of resources here and on the internet to form the base of some of my codes.

For importing the file I've followed a format and everything seems to be properly formed to the best of my knowledge but I just keep getting errors with the import and I can't figure out what's going on.

                          WellProDBHelper.java
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE BASE ("
                + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "PUMPER_NO TEXT, "
                + "WELL_ID TEXT, "
                + "WELL_NAME TEXT, "
                + "PROD_METH TEXT, "
                + "TANK1_ID TEXT, "
                + "TANK1_COEF REAL, "
                + "TANK2_ID TEXT, "
                + "TANK2_COEF REAL, "
                + "TANK3_ID TEXT, "
                + "TANK3_COEF REAL, "
                + "CL_MTR_RUN REAL, "
                + "CL_MTR_PLATE REAL, "
                + "PLATE_FACTOR REAL, "
                + "MTR_TYPE TEXT, "
                + "MCFD_EST REAL, "
                + "ON_HRS INTEGER, "
                + "ON_MIN INTEGER, "
                + "OFF_HRS INTEGER, "
                + "OFF_MIN INTEGER, "
                + "BASE_XTRA1 TEXT, "
                + "LAT REAL, "
                + "LON REAL);");

                   DBImport.java
        try {
        InputStream is = getAssets().open("base.txt");
        BufferedReader buffer = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        String line = "";
        String tableName ="BASE";
        String columns = "PUMPER_NO, WELL_ID, WELL_NAME, PROD_METH, TANK1_ID, TANK1_COEF, TANK2_ID, TANK2_COEF, TANK3_ID, TANK3_COEF, CL_MTR_RUN, CL_MTR_PLATE, PLATE_FACTOR, MTR_TYPE, MCFD_EST, ON_HRS, ON_MIN, OFF_HRS, OFF_MIN, BASE_XTRA1, LAT, LON";
        String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
        String str2 = ");";

        SQLiteOpenHelper wellProDbHelper = new WellProDbHelper(this);
        db = wellProDbHelper.getWritableDatabase();
        db.beginTransaction();

        while ((line = buffer.readLine()) != null) {
            StringBuilder sb = new StringBuilder(str1);
            String[] str = line.split(",");
            //sb.append("'" + str[0] + "',"); // _id
            sb.append("'" + str[0] + "',"); // PUMPER_NO
            sb.append("'" + str[1] + "',"); // WELL_ID !!!! THIS IS LINE 47 WHERE THE EXCEPTION IS BEING THROWN
            sb.append("'" + str[2] + "',"); // WELL_NAME
            sb.append("'" + str[3] + "',"); // PROD_METH
            sb.append("'" + str[4] + "',"); // TANK1_ID
            sb.append(str[5] + ","); // TANK1_COEF
            sb.append("'" + str[6] + "',"); // TANK2_ID
            sb.append(str[7] + ","); // TANK2_COEF
            sb.append("'" + str[8] + "',"); // TANK3_ID
            sb.append(str[9] + ","); // TANK3_COEF
            sb.append(str[10] + ","); // CL_MTR_RUN
            sb.append(str[11] + ","); // CL_MTR_PLATE
            sb.append(str[12] + ","); // PLATE_FACTOR
            sb.append("'" + str[13] + "',"); // MTR_TYPE
            sb.append(str[14] + ","); // MCFD_EST
            sb.append(str[15] + ","); // ON_HRS
            sb.append(str[16] + ","); // ON_MIN
            sb.append(str[17] + "," ); // OFF_HRS
            sb.append(str[18] + ","); // OFF_MIN
            sb.append("'" + str[19] + "',"); // BASE_XTRA1
            sb.append(str[20] + ","); // LAT
            sb.append(str[21]); // LON
            sb.append(str2);
            db.execSQL(sb.toString());
        }
        db.setTransactionSuccessful();
        db.endTransaction();

        Toast toast = Toast.makeText(this, "Data Imported", Toast.LENGTH_SHORT);
        toast.show();
    } catch (IOException e) {
        e.printStackTrace();
        Toast toast = Toast.makeText(this, "File Unavailable", Toast.LENGTH_SHORT);
        toast.show();
    }
}
                        base.txt
2270,Basham #3,Basham   #3,RPT,1,1.16,0,0,0,0,2,0.75,3.54,O,0,0,10,23,50,0,41.078922,-81.785875
2270,BERKEY #4,BERKEY #4-  1,RBT,07860,0.83,0,0,0,0,2,0.75,3.54,O,0,0,20,11,40,0,40.902817,-81.802522
2270,BESANCON #1,BESANCON #1,PJG,08251,0.83,0,0,0,0,2,0.125,0.095,O,0,24,0,0,0,0,40.900833,-81.783528     

And here's the logcat 
03-02 12:37:53.339 2552-2552/? E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: com.hfad.wellpro, PID: 2552
                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hfad.wellpro/com.hfad.wellpro.DBImport}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:148)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                              Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
                                                 at com.hfad.wellpro.DBImport.onCreate(DBImport.java:47)
                                                 at android.app.Activity.performCreate(Activity.java:6237)
                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:148) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Thanks for any help. I've been trying to work this out for but every change I make just throws up a different exception or issue. Not really sure where my problem is.

Aucun commentaire:

Enregistrer un commentaire