2017-07-20 1 views
0

私はテーブルにデータを保存して、アンドロイドアプリですぐに取得しようとしています。 私はこれが私のデータベースhelper.classあるのonCreateでsqliteテーブルにデータが存在しても、カーソルは0の値を表示します

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

のクラスのオブジェクトを作成し、insertScriptsArrayとfetchScriptsArrayを呼んでいます。

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

(c.getString(1))scripts.add 'てみてください。c.moveToFirst()がfalse – Redman

+0

を行うことがあれば(温度)の条件を入力してくださいdoesntの私はこれのために時間が苦労したね!ありがとう! – jamian

答えて

1

あなたinsertScriptsArray機能でdb.beginTransaction();を使用しています。トランザクションが成功した場合はdb.endTransaction();に電話する前にdb.setTransactionSuccessful();に電話する必要があります。

db.setTransactionSuccessful();を呼び出さないと、が呼び出されたときに変更がロールバックされます。 Androidの開発者向けドキュメント毎

https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransaction()

+1

を返しますので、'内部 – jamian

関連する問題