2 つのアクティビティを持つアプリケーションを作成しようとしています。それぞれ別のテーブルを使用し、テーブルの内容を取得してリスト ビューに表示します。
これまでのところ、最初のアクティビティは person_table にアクセスでき、そのテーブル内のすべてのものを表示できますが、クライアント アクティビティを起動しようとするとエラーが発生します。
sqlite returned: error code = 1, msg = no such table: client_table.
助けが必要です
package com.rich.myfinal;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
android.util.Log;
public class PersonDataHelper extends Activity {
private static final String TAG = PersonDataHelper.class.getSimpleName();
// database configuration
// if you want the onUpgrade to run then change the database_version
private static final String DATABASE_NAME = "mydatabase.db";
// table configuration
private static final String TABLE_NAME = "person_table"; // Table name
private static final String TABLE_NAME1 = "client_table"; // Table name
private static final String PERSON_TABLE_COLUMN_ID = "_id"; // a column named "_id" is required for cursor
private static final String PERSON_TABLE_COLUMN_NAME = "person_name";
private static final String PERSON_TABLE_COLUMN_PIN = "person_pin";
private DatabaseOpenHelper openHelper;
private SQLiteDatabase database;
// this is a wrapper class. that means, from outside world, anyone will communicate with PersonDatabaseHelper,
// but under the hood actually DatabaseOpenHelper class will perform database CRUD operations
public PersonDataHelper(Context aContext) {
openHelper = new DatabaseOpenHelper(aContext);
database = openHelper.getWritableDatabase();
}
public void insertData (String aPersonName, String aPersonPin) {
// we are using ContentValues to avoid sql format errors
ContentValues contentValues = new ContentValues();
contentValues.put(PERSON_TABLE_COLUMN_NAME, aPersonName);
contentValues.put(PERSON_TABLE_COLUMN_PIN, aPersonPin);
database.insert(TABLE_NAME, null, contentValues);
database.insert(TABLE_NAME1, null, contentValues);
}
public Cursor getAllData () {
String buildSQL = "SELECT * FROM " + TABLE_NAME;
Log.d(TAG, "getAllData SQL: " + buildSQL);
return database.rawQuery(buildSQL, null);
}
public Cursor getAllDataClient () {
String buildSQL = "SELECT * FROM " + TABLE_NAME1;
Log.d(TAG, "getAllDatayyy SQL: " + buildSQL);
return database.rawQuery(buildSQL, null);
}
// this DatabaseOpenHelper class will actually be used to perform database related operation
private class DatabaseOpenHelper extends SQLiteOpenHelper {
public DatabaseOpenHelper(Context aContext) {
super(aContext, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// Create your tables here
String buildSQL = "CREATE TABLE " + TABLE_NAME + "( " + PERSON_TABLE_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_TABLE_COLUMN_NAME + " TEXT, " + PERSON_TABLE_COLUMN_PIN + " TEXT )";
String buildSQL2 = "CREATE TABLE IF NOT EXISTS" + TABLE_NAME1 + "( " + PERSON_TABLE_COLUMN_ID + " INTEGER PRIMARY KEY, " +
PERSON_TABLE_COLUMN_NAME + " TEXT, " + PERSON_TABLE_COLUMN_PIN + " TEXT )";
Log.d(TAG, "onCreate SQL: " + buildSQL+buildSQL2);
sqLiteDatabase.execSQL(buildSQL);
sqLiteDatabase.execSQL(buildSQL2);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
// Database schema upgrade code goes here
String buildSQL = "DROP TABLE IF EXISTS " + TABLE_NAME;
String buildSQL2 = "DROP TABLE IF EXISTS " + TABLE_NAME1;
Log.d(TAG, "onUpgrade SQL: " + buildSQL+buildSQL2);
sqLiteDatabase.execSQL(buildSQL); // drop previous table
sqLiteDatabase.execSQL(buildSQL2);
onCreate(sqLiteDatabase); // create the table from the beginning
}
}
}
クライアントアクティビティでメソッドを呼び出すとエラーが発生します
new Handler().post(new Runnable() {
@Override
public void run() {
customAdapter = new CustomCursorAdapter(ClientActivity.this, databaseHelper.getAllDataClient());
listView.setAdapter(customAdapter);
}
});
}