2017-07-31 32 views
0

私はSQLiteを初めて使用していますアンドロイドのデータベースデータベースから特定のデータをフェッチしたいがそれを行うことができませんそれは私に次のエラーを与えている、を追加_id列それでも同じExceptionを与えているのですが、どうすればこの問題を解決できますか?私が紛失しているものは何ですか?SQliteデータベースからデータを取得できませんでした

java.lang.IllegalArgumentException: column '_id' does not exist at 
android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333) 
                     at android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:186) 
                     at android.support.v4.widget.CursorAdapter.<init>(CursorAdapter.java:163) 
                     at android.support.v4.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:99) 
                     at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:94) 
                     at com.iz.PG.SummaryFragment.onCreateView(SummaryFragment.java:57) 
                     at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
                     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
                     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
                     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
                     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
                     at android.os.Handler.handleCallback(Handler.java:815) 
                     at android.os.Handler.dispatchMessage(Handler.java:104) 
                     at android.os.Looper.loop(Looper.java:207) 
                     at android.app.ActivityThread.main(ActivityThread.java:5769) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 

私のコードは以下の通りである - DBHelper.java

public class DBHelper extends SQLiteOpenHelper { 

    // Table Name 
    public static final String TABLE_NAME = "detailinfo"; 

    // Table columns 
    public static final String id = "_id"; 
    public static final String param1 = "param1"; 
    public static final String param2 = "param2"; 
    public static final String param3 = "param3"; 
    public static final String param4 = "param4"; 

    // Database Information 
    static final String DB_NAME = "test.db"; 

    // database version 
    static final int DB_VERSION = 1; 

    // create query 
    private static final String CREATE_TABLE = "create table " + TABLE_NAME + "("+id+" INTEGER PRIMARY KEY AUTOINCREMENT," + param1+ " TEXT, " + param2 + " TEXT,"+param3+" TEXT,"+param4+" TEXT);"; 

    public DBHelper(Context context) { 
     super(context,DB_NAME ,null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     String query = "drop table if exists"+TABLE_NAME; 
     db.execSQL(query); 
     onCreate(db); 
    } 
} 

DBManager.java

public class DBManager { 

    private static final String TAG = "DBManager"; 

    private DBHelper dbHelper; 
    private Context context; 
    private SQLiteDatabase database; 

    public DBManager(Context c) { 
     context = c; 
    } 

    public DBManager open() throws SQLException { 
     dbHelper = new TransactionDBHelper(context); 
     database = dbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     dbHelper.close(); 
    } 

    public void insert(TxnSummary txnSummary) { 

     ContentValues contentValue = new ContentValues();   
     contentValue.put(DBHelper.param1, "1234"); 
     contentValue.put(DBHelper.param2, "test"); 
     contentValue.put(DBHelper.param3, "testdata1"); 
     contentValue.put(DBHelper.param4,"testdata2"); 

     long count = database.insert(DBHelper.TABLE_NAME, null, contentValue); 
     Log.d(TAG,"Data is inserted in database count is : "+count); 
    } 

    public Cursor fetch() { 

     String query = "SELECT "+DBHelper.param1+"," 
           +DBHelper.param2+"," 
           +DBHelper.param3+"," 
           +DBHelper.param4 
           +" FROM "+DBHelper.TABLE_NAME; 
     Cursor cursor = database.rawQuery(query,null); 
     if (cursor != null) { 
      cursor.moveToFirst(); 
     } 
     return cursor; 
    } 
} 

SummaryFragment.java

public class SumarryFragment extends Fragment { 

     final String[] from = new String[] {DBHelper.param1, Helper.param2, 
DBHelper.param3,DBHelper.param4}; 
     final int[] to = new int[] { R.id.textViewtxnList1, 
             R.id.textViewtxnList2, 
              R.id.textViewtxnList3, 
               R.id.textViewtxnList4 }; 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      View view = inflater.inflate(R.layout.fragment_txnsumarry, container, false); 

      context = getContext(); 

      ListView txnListView = (ListView) view.findViewById(R.id.summarylistview);   

      DBManager dbManager = new DBManager(getActivity()); 
      dbManager.open(); 
      cursor = dbManager.fetch(); 
      simpleCursorAdapter = new SimpleCursorAdapter(getActivity(),R.layout.fragment_summary,cursor,from,to,0); 
      simpleCursorAdapter.notifyDataSetChanged(); 
      txnListView.setAdapter(simpleCursorAdapter); 

      return view; 
     } 
    } 

と私の見解は

です
+0

DB_VERSIONをアップデートしてみてください:

その後、あなたはまた、クエリが実際に読みたいすべての列が返されることを確認する必要があります。すでにアプリがインストールされている場合 –

+0

すべてのインストールを削除して、新しくインストールしてみてください。 –

+0

@モハット私もそれをアンインストールしたアプリのデータをクリアしようとしましたが、問題はまだそこにあります – Shailesh

答えて

0

データベースのバージョンを2に変更するか、削除して新しいデータベースを作成するだけです。

+0

データベースのバージョンを更新しようとしましたが、同じ例外が発生しました – Shailesh

0

まず、データベースに実際に列が含まれていることを確認する必要があります(DBのバージョンを増やしてください)。

String query = "SELECT "+DBHelper.param1+"," 
          +DBHelper.param2+"," 
          +DBHelper.param3+"," 
          +DBHelper.param4 
          +" FROM "+DBHelper.TABLE_NAME; 
+0

私は物理デバイスを使用していますが、データ挿入に関するログを取得していますが、物理デバイス上のテーブルを表示する方法はありますか? – Shailesh

+0

[Android Studioのデータベースファイルの表示](https://stackoverflow.com/questions/17529766/view-contents-of-database-file-in-android-studio)を参照してください。 –

+0

私はそれがエミュレータの物理デバイスではないと思う、あなたの応答のおかげで、私は少し自分のコードを変更し、それはうまくいった感謝を働かせます。 – Shailesh

関連する問題