2016-05-22 10 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'が表示されます。その名前をタブである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'クエリに基づいて、カーソルは結果として1つの行のみを含み、この行は1つの列しか持ちません。問題は、存在しない3列目の 'cursor.getString(2);'を取得しようとしていることです。 – Titus

+0

私は問題の行を忘れてしまった。ログによると、文字列abc = cursor.getString(2);この問題が発生しました:原因:java.lang.IllegalStateException:行0、列2をCursorWindowから読み取れませんでした。カーソルがデータにアクセスする前に正しく初期化されていることを確認してください。 –

+0

に感謝します。どのように私は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にあったデータの2列目への呼び出しを追加しましたので、私が何をすべきと仮定しました次のように呼び出します。

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

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

ないので、あなたは次のように列番号6が、2つの二sqlSelectコールへの呼び出しを行ういけません

私はこのエラーに費やした多くの無駄な時間を誰かに救うことを願っています。

関連する問題

 関連する問題