2016-05-22 41 views
0
public class recordd extends Activity{ 


    Button b; 
    int count; 
    String date; 
    Record record; 
    SQLiteDatabase db; 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.record); 

     int calo =getIntent().getIntExtra("cal", 0); 

     TextView TEXT =(TextView)findViewById(R.id.record); 


     record= new Record(this); 
     db= record.getWritableDatabase(); 
     db.execSQL("INSERT INTO tab VALUES (null, 'calo' ,null);"); 

     Cursor cursor = db.rawQuery("SELECT SUM(cal) FROM tab ", null); 


     while(cursor.moveToNext()){ 
      int addr = cursor.getInt(0); 
      String addrrr = Integer.toString(addr); 
      String abc = cursor.getString(2); 
     } 

我從上一次活動中獲得'calo'。然後將該數字放到名稱爲tab的sql表中。然後製作一個遊標來加總具有卡洛信息的cal。 但有一個問題。確保光標在從中訪問數據前正確初始化。 sql android

「:java.lang.IllegalStateException:由造成無法從CursorWindow逐行讀取0,列 2確保光標從它訪問數據之前正確初始化 。」

這是表格創建的更多信息。

public class Record extends SQLiteOpenHelper { 

    static final String DATABASE_NAME = "mydb.db"; 
    static final int DATABASE_VERSION = 1; 




    public Record(Context context){ 

     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 




    @Override 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE tab (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
       +"cal INTEGER, timestamp DATE DEFAULT (datetime('now','localtime')));"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS tab;"); 
     onCreate(db); 
    } 



} 

我已經甩了好幾天

+1

基於'SQL'查詢,遊標將只包含一行,結果該行只有一列。問題在於你試圖獲取不存在的第三列'cursor.getString(2);'。 – Titus

+0

我忘記了問題線。根據日誌,String abc = cursor.getString(2);有這個問題「引起:java.lang.IllegalStateException:無法從CursorWindow讀取第0行,第2列。確保Cursor在從中訪問數據之前正確初始化。」 –

+0

謝謝titus。那麼我怎麼才能從sql表中獲得總和...... –

回答

0

我有一個類似的錯誤,並在情況下提供這個答案我類似的問題,有人遇到這個問題,有同樣的問題。

我使用SQLiteAssetHelper和有我的SQL呼叫設置如下:

public Cursor getStateData() { 
    SQLiteDatabase db = getReadableDatabase(); 
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 
    String [] sqlSelect = {"0 _id", "state", "iconone" }; 
    String sqlTables = "Reefs"; 
    qb.setTables(sqlTables); 
    qb.setDistinct(true); 
    Cursor c = qb.query(db, sqlSelect, null, null, null, null, null); 
    c.moveToFirst(); 
    return c; 
} 

我加入了呼籲這是在我的SQL表6列數據的第二列,所以認爲我應該做的撥打如下:

do 
    { 
     dataprovider = new StateDataProvider(statesData.getString(1), statesData.getString(6)); 
     arrayList.add(dataprovider); 
    } while (statesData.moveToNext()); 

事實並非如此,你不打這個電話來列數6,但兩個第二一個SQLSelect電話如下:

do 
    { 
     dataprovider = new StateDataProvider(statesData.getString(1), statesData.getString(2)); 
     arrayList.add(dataprovider); 
    } while (statesData.moveToNext()); 

希望它可以節省很多我在這個錯誤上花費的毫無結果的時間。

相關問題