2017-04-02 8 views
0

EDIT:私のデータベースにCol_Nameという名前のカラムがないというエラーが発生しましたが、カラムをデータベースにコードしましたが、 。データベースにカラムがあるにもかかわらずカラムがありません

エラーメッセージ: エラーコード:1(SQLITE_ERROR) 原因:SQL(クエリ)エラーまたはデータベースがありません。 テーブルExpense_TableにName(コード1)という名前の列がありません:コンパイル中にINSERT INTO Expense_Table(Am、Name)VALUES(?、?))

2つの列を持つデータベースがあります。入力を2つの列に保存し、リストビューにロードします。私は正常に1列を完了し、それは完全に動作します。 2列目を追加してアプリを読み込むと、自分のデータベースが空であることを私のToastメッセージが伝えます。これがなぜ起こるかについての助け?

マイMainActivity(関連部分のみ):

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    listView = (ListView)findViewById(R.id.listView); 
    if (android.os.Build.VERSION.SDK_INT >= 21) { 
     Window window = this.getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimary)); 
    } 
    //Code for Ads 
    mAdView = (AdView) findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 

    nameList = new ArrayList<>(); 
    expenseList = new ArrayList<>(); 
    Row = new ArrayList<>(); 
    adapter = new CustomAdapter(this, Row); 
    listView.setAdapter(adapter); 

    //Get Database to populate Listview 
    myDb = new DBHelper(this); 
    Cursor data = myDb.getListContent(); 
    if(data.getCount() == 0){ 
     Toast.makeText(this, "Data NOT loaded", Toast.LENGTH_SHORT).show(); 
    } else{ 
     while(data.moveToNext()){ 
      String dbAmount = data.getString(1); 
      String dbName = data.getString(2); 
      ExRow exRow = new ExRow(dbAmount, dbName); 
      expenseList.add(dbAmount); 
      Row.add(exRow); 
      adapter.notifyDataSetChanged(); 
      Toast.makeText(this, "Data loaded", Toast.LENGTH_SHORT).show(); 
     } 
    } 

そして、ここではデータを取得し、保存するための私のDatabaseクラスです:

private static final String DATABASE_NAME = "Expenses.db"; 
    public static final String TABLE_NAME = "Expense_Table"; 
    public static final String Col_ID = "id"; 
    public static final String Col_AMOUNT = "Am"; 
    public static final String Col_NAME = "Name"; 

    //public static final String Col_Date = "date"; 



    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, 1); 

    } 

    @Override 
    //Set up database here 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("Create table " + TABLE_NAME + 
       "(ID INTEGER PRIMARY KEY AUTOINCREMENT, AM TEXT, Name TEXT)"); 

    } 

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

    } 


public boolean saveData(String Am, String Name) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(Col_AMOUNT, Am); 
    contentValues.put(Col_NAME, Name); 


    long result = db.insert(TABLE_NAME, null, contentValues); 
    if(result == -1){ 
     return false; 
    }else { 
     return true; 
    } 
} 
public Cursor getListContent(){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 
    return data; 
} 

への入力を追加し、私のMainActivityによりがありますデータベース。コードを貼り付けるのは簡単すぎると思いました。単純にsaveData(String、String)です。

答えて

-1

データベースからデータを繰り返し処理するには、do whileループを使用する必要があります。

if (cursor.moveToFirst()) { 
     do { 
      String dbAmount = cursor.getString(1); 
      String dbName = cursor.getString(2); 
      // Adding your data to holder 
      ExRow exRow = new ExRow(dbAmount, dbName); 
     expenseList.add(dbAmount); 
     Row.add(exRow); 
     } while (cursor.moveToNext()); 
    } 

また、常にあなたのリストに通知する必要はありませんので、そのコードを削除してください。

ハッピーコーディング。 :-)私はそれがあなたのために働くことを願っています。

+0

私はdbName = "randomString"を設定し、contentvalue.put(Col_Name、Name)をコメントアウトすると、データベースが動作して読み込まれ、 "randomString"がtextviewに挿入されます。しかし、私が入力を使用しようとすると、それは動作しません。 – Corpse

+0

あなたが間違っているのは、アレイリストに値を追加する前にアダプタを設定していることです。あなたのarraylistにまずポピュレートしてからアダプタに追加しようとします。 –

+0

問題の原因は見つかりましたが、解決策は見つかりませんでした。あなたがまだ助けたいのであれば、編集された質問を見てください。 – Corpse

0

答えが見つかりました。既にデータベースを作成した後で、この列を追加したためです。私はデータベースの名前を変更し、それは働いた。

関連する問題