即使数据存在于sqlite表中,光标也显示0值

时间:2017-07-20 16:18:01

标签: android sqlite

我试图在表格中保存数据并立即在我的Android应用中检索它。 我正在创建类的对象并在onCreate中调用insertScriptsArray和fetchScriptsArray

db.insertScriptsArray(scripts);
ArrayList<String> s = db.fetchScriptsArray();

这是我的数据库helper.class

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "Stocks.db";
private static final int DATABASE_VERSION = 1;

public static final String SCRIPTS_TABLE = "scriptnames";
public static final String COL_SCRIPT_ID = "script_id";
public static final String COL_SCRIPT = "script_name";
public static final String COL_SCRIPT_PRICE = "script_price";


public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + SCRIPTS_TABLE + "(" +
            COL_SCRIPT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            COL_SCRIPT + " TEXT NOT NULL," +
            COL_SCRIPT_PRICE + " REAL NOT NULL)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL("DROP TABLE IF EXISTS " + SCRIPTS_TABLE);
    onCreate(db);
}

public void insertScriptsArray(ArrayList<String> scripts){
    SQLiteDatabase db = this.getWritableDatabase();
    db.beginTransaction();

    ContentValues cv = new ContentValues();
    cv.put(COL_SCRIPT_PRICE,0);

    for (String s : scripts){
        cv.put(COL_SCRIPT,s);
        long res = db.insert(SCRIPTS_TABLE,null,cv); //res returns values above -1 always
    }

    db.endTransaction();
    db.close();
}


public ArrayList<String> fetchScriptsArray(){
    ArrayList<String> scripts = new ArrayList<>();

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor c = db.rawQuery("SELECT * FROM " + SCRIPTS_TABLE,null);

    boolean temp = c.moveToFirst(); //temp returns false although data is inserted

    if(temp){
        do{
           scripts.add(c.getString(0));
        }while(c.moveToNext());
    }

    c.close();
    db.close();
    return scripts;

   }

}

1 个答案:

答案 0 :(得分:1)

您在db.beginTransaction();功能中使用insertScriptsArray。如果交易成功,您需要在致电db.setTransactionSuccessful();之前致电db.endTransaction();

如果您不致电db.setTransactionSuccessful();,则在调用db.endTransaction();时会回滚您的更改。

根据Android开发人员文档:https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransaction()