簡體   English   中英

如何在Android中將Arraylist插入sqlite?

[英]How to insert Arraylist into sqlite in Android ?

我想在我的sqlite中插入Arraylist,而在anggota coloumn中沒有相同的值,如下所示:

helper=new DBSpaj(getActivity());
    for (int i=0; i<ListKeluargaPP.size();i++)  {
    helper.insertTableMarital(
            a,
            ListKeluargaPP.get(i).getAnggota_pp(),
            ListKeluargaPP.get(i).getNama_Anggota_pp(),
            ListKeluargaPP.get(i).getTtl_Anggota_pp()

);

這是我的插入代碼:

public void insertTableMarital(
        String master_id,
        String anggota,
        String nama,
        String ttl
        ) 
{
String selectQuery = "SELECT master_id,anggota FROM table_marital " +
        "where master_id='"+Menu_SPPAJ.getX()+"'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.equals(null)){
    ContentValues cv=new ContentValues();
    cv.put("master_id",  master_id);
    cv.put("anggota", anggota);
    cv.put("nama", nama);
    cv.put("ttl", ttl);
    getWritableDatabase().insert("table_marital",null, cv);
}
    if (cursor.getString(1)!=PemegangPolis.getStrAnggota()){
    ContentValues cv=new ContentValues();
    cv.put("master_id",  master_id);
    cv.put("anggota", anggota);
    cv.put("nama", nama);
    cv.put("ttl", ttl);
    getWritableDatabase().insert("table_marital",null, cv);
    }else {
        System.out.println("udah ada");
    }
        }   

我想保存它時出錯,而logcat如下所示:

    02-04 10:15:31.274: E/AndroidRuntime(17174): FATAL EXCEPTION: main
02-04 10:15:31.274: E/AndroidRuntime(17174): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at id.co.ajsmsig.espaj.DBSpaj.insertTableMarital(DBSpaj.java:912)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at id.co.ajsmsig.espaj.PemegangPolis.onSave(PemegangPolis.java:1574)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at id.co.ajsmsig.espaj.Menu_SPPAJ$SlideMenuClickListener.onClick(Menu_SPPAJ.java:243)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.view.View.performClick(View.java:4222)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.view.View$PerformClick.run(View.java:17337)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.os.Handler.handleCallback(Handler.java:615)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.os.Looper.loop(Looper.java:137)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at android.app.ActivityThread.main(ActivityThread.java:4895)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at java.lang.reflect.Method.invokeNative(Native Method)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at java.lang.reflect.Method.invoke(Method.java:511)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
02-04 10:15:31.274: E/AndroidRuntime(17174):    at dalvik.system.NativeStart.main(Native Method)

我不知道我的錯在哪里,我希望有人能理解我的問題並幫助我解決問題。

我已解決了我的問題,將所有cursor.getString(1)放在List中,然后使用以下代碼逐個檢查:

public void insertTableMarital(
        String master_id,
        String anggota,
        String nama,
        String ttl
        ) 
{
    List<String> test= new ArrayList<String>();
String selectQuery = "SELECT master_id,anggota FROM table_marital " +
        "where master_id='"+Menu_SPPAJ.getX()+"'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor.getCount()>0){
    cursor.moveToPosition(cursor.getCount() - 1);
    if (cursor.moveToFirst()) {
        do {
            test.add(cursor.getString(1));
        } while (cursor.moveToNext());
    } 
        Log.i("TES LAIN", PemegangPolis.getStrAnggota());
    if (!(test.contains(PemegangPolis.getStrAnggota()))){
    ContentValues cv=new ContentValues();
    cv.put("master_id",  master_id);
    cv.put("anggota", anggota);
    cv.put("nama", nama);
    cv.put("ttl", ttl);
    getWritableDatabase().insert("table_marital",null, cv);
    }
    else {
        System.out.println("udah ada");
    }

        }   
else {
    ContentValues cv=new ContentValues();
    cv.put("master_id",  master_id);
    cv.put("anggota", anggota);
    cv.put("nama", nama);
    cv.put("ttl", ttl);
    getWritableDatabase().insert("table_marital",null, cv);
}
}

您需要先調用cursor.moveToFirst()然后才能使用它,此時它指向第一個(如果有)條目之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM