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)です。
私はdbName = "randomString"を設定し、contentvalue.put(Col_Name、Name)をコメントアウトすると、データベースが動作して読み込まれ、 "randomString"がtextviewに挿入されます。しかし、私が入力を使用しようとすると、それは動作しません。 – Corpse
あなたが間違っているのは、アレイリストに値を追加する前にアダプタを設定していることです。あなたのarraylistにまずポピュレートしてからアダプタに追加しようとします。 –
問題の原因は見つかりましたが、解決策は見つかりませんでした。あなたがまだ助けたいのであれば、編集された質問を見てください。 – Corpse