私は複数のテーブルを持つSQLiteデータベースを持っていますが、いくつかのテーブルはリンクされていて、いくつかはリンクされていませんが、私が欲しいのは、あるテーブルから読み取り、同時に別のテーブルに書き込むことです...だから私の質問はここにあります2つの異なるカーソルを指すことができますそれぞれのテーブルまたは他の方法はありますか...私に知らせてください...提案は大歓迎です
質問する
3142 次
2 に答える
1
AsyncQueryHandler クラスを見てください。ContentProvider に非同期/同時クエリを作成させるのに役立ちます
于 2012-05-02T11:57:00.993 に答える
0
書き込みではなく、テーブルからデータを読み取るためだけにカーソルが必要です。データベースにメソッドを設定して必要な情報を適切なテーブルに書き込み、アクティビティにメソッドを設定してカーソルを呼び出してカーソルからデータを取得すれば、準備は完了です。
データベースクラス
public class TestDB {
// *******************************************************************
// DB info
// *******************************************************************
private static final String TEST_DATABASE_NAME = "TestDB";
private static final int TEST_DATABASE_VERSION = 3;
// *******************************************************************
// list table
// *******************************************************************
public static final String FIRST_TABLE = "first";
public static final String FIRST_ROWID = "_id";
public static final String FIRST_NAME = "first_name";
private static final String CREATE_FIRST_TABLE = "create table "
+ LIST_TABLE + " (_id integer primary key autoincrement,"
+ "first_name text not null unique);";
// *******************************************************************
// category table
// *******************************************************************
public static final String SECOND_TABLE = "second";
public static final String SECOND_ROWID = "_id";
public static final String SECOND_NAME = "second_name";
private static final String CREATE_SECOND_TABLE = "create table "
+ CATEGORY_TABLE + " (_id integer primary key autoincrement,"
+ "second_name text not null unique);";
// *******************************************************************
// control variables
// *******************************************************************
private DBHelper mDBHelper;
private SQLiteDatabase mDb;
private final Context mCtx;
private static class DBHelper extends SQLiteOpenHelper {
DBHelper(Context context) {
super(context, TEST_DATABASE_NAME, null,
TEST_DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_FIRST_TABLE);
db.execSQL(CREATE_SECOND_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("TestDB", "Upgrading database from version " + oldVersion
+ " to " + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + FIRST_TABLE);
db.execSQL("DROP TABLE IF EXISTS " + SECOND_TABLE);
onCreate(db);
}
}
public GroceryDB(Context ctx) {
this.mCtx = ctx;
}
public GroceryDB open() throws SQLException {
mDBHelper = new DBHelper(mCtx);
mDb = mDBHelper.getWritableDatabase();
return this;
}
public void close() {
mDBHelper.close();
}
// *******************************************************************
// Record creation methods
// *******************************************************************
public long createFirst(String name) {
ContentValues initialValues = new ContentValues();
initialValues.put(FIRST_NAME, name);
return mDb.insertWithOnConflict(FIRST_TABLE, null, initialValues,
SQLiteDatabase.CONFLICT_IGNORE);
}
public long createSecond(String name) {
ContentValues initialValues = new ContentValues();
initialValues.put(Second_NAME, name);
return mDb.insertWithOnConflict(CATEGORY_TABLE, null, initialValues,
SQLiteDatabase.CONFLICT_IGNORE);
}
// *******************************************************************
// Fetch all records methods
// *******************************************************************
public Cursor fetchAllFirst() {
return mDb.query(FIRST_TABLE, new String[] { FIRST_ROWID, FIRST_NAME },
null, null, null, null, null);
}
public Cursor fetchAllSecond() {
return mDb.query(SECOND_TABLE, new String[] { SECOND_ROWID,
SECOND_NAME }, null, null, null, null, null);
}
}
次に、最初のアイテムを FIRST_TABLE から SECOND_TABLE にコピーしたいとします。アクティビティ クラスでは、次のように実行できます。
private Cursor firstCursor;
private TestDB mDbHelper;
mDbHelper = new TestDB(getActivity());
mDbHelper.open();
firstCursor = mDbHelper.fetchAllFirst();
getActivity().startManagingCursor(itemCursor);
firstCursor.moveToFirst;
mDbHelper.createSecond(firstCursor.getString(1));
mDbHelper.close();
いくつかのことを省略しました (返されたカーソルが null でないことを確認する、カーソルの内容をユーザーに表示してコピーするものを選択するなど)。あるテーブルから別のテーブルへ。
于 2012-05-02T12:28:27.237 に答える