我试图在表格中保存数据并立即在我的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;
}
}
答案 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()