나는 여러 테이블과 SQLite 데이터베이스를 가지고 있지만 일부 테이블이 연결되어 있고 일부는 아니지만 내가 원한다면 하나의 테이블에서 읽고 동시에 다른 테이블에 쓰기 ... 그래서 내 질문은 여기에 각각의 테이블을 가리키는 두 개의 다른 커서가 있거나 다른 방법이 있습니다 ... 제게 알려주십시오 ... 제안을 환영합니다여러 테이블에 대한 안드로이드 Sqlite 다중 커서
0
A
답변
1
AsyncQueryHandler 클래스를 살펴보십시오. ContentProvider가 비동기식/동시 쿼리를 수행하는 데 도움이됩니다.
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);
}
}
, 당신은, 당신의 활동 클래스에서이 같은 것을 할 수 SECOND_TABLE하는 FIRST_TABLE에서 첫 번째 항목을 복사하고 싶은 말은 DB 클래스 : 나는 '
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이 아닌지 확인하고, 커서의 내용을 사용자에게 표시하여 복사 할 항목을 선택하는 등) 하나의 테이블에서 복사하는 기본 방법을 보여 주어야합니다 다른 사람에게.
+0
내가 뭘하는지 @ 바락 나는 다른 테이블에 다른 커서를 사용하여 성능을 줄이고 내가하고있는 모든 일은 UI 스레드에 있다고 생각합니다 ........ –
관련 문제
- 1. Sqlite 데이터베이스 안드로이드 커서/잠금
- 2. 코드 검토 요청 : 안드로이드 SQLite 커서 사용
- 3. 조인 된 테이블에 대한 SQLite
- 4. sqlite 커서 동작
- 5. Android에서 SQLite 데이터베이스에 대한 다중 액세스
- 6. 다른 테이블에 안드로이드 SQLite 복사 테이블
- 7. 안드로이드 디바이스의 sqlite 테이블에 값 삽입하기
- 8. 커서 안드로이드
- 9. 커서 데이터를 분석하는 SQLite
- 10. SQLite 다중 삽입 문제
- 11. 다중 데이터의 Sqlite 데이터베이스 검색
- 12. Android sqlite 커서 쿼리
- 13. SQLite 커서 동작 이해
- 14. 다중 기본 키 테이블에 대한 subsonic 3.0.0.3
- 15. Sqlite 처리 커서 결합 결과
- 16. 커서 내의 테이블에 추가하기
- 17. MySQL의 다중 테이블에 대한 효율적인 삽입 쿼리
- 18. 안드로이드 - 다중 테이블에 영향을 미치는 다중 레코드 저장
- 19. 큰 MySQL 테이블에 대한 다중 쿼리
- 20. 여러 옵션에 대한 SQLite 쿼리 도움말
- 21. 여러 커서 결과 처리 방법
- 22. 여러 테이블에 대한 SQL 개수 (*)
- 23. 안드로이드 Sqlite 쿼리는 테이블에 요소가 존재하지 않을 때를 감지합니다.
- 24. 안드로이드 - 관계형 데이터베이스 여러 테이블을 가진 SQLite
- 25. 커서 안에 안드로이드
- 26. 안드로이드 SQLite는 커서 ... 테이블
- 27. SQLite 다중 테이블
- 28. sqlite 테이블에 임의의 레코드를 반환
- 29. 안드로이드 SQLite : 여러 스레드에서 잠금 + 액세스
- 30. 안드로이드 SQLite 연결 관리
contentprovider에 대한 AsyncQueryHandler 의미 여러 테이블을 가진 SQLite 데이터베이스를 쿼리해야합니다 ... –
동일한 데이터베이스 개체에서 두 개의 AsyncTask가 동시에 작동하도록하십시오. 하나는 읽기 작업을 처리하고 다른 하나는 쓰기 작업을 처리합니다. – Ika
당신은 내 포인트를 얻지 못해 내가 두 테이블을 가지고 테이블 A와 테이블 B는 같은 데이터베이스에 .. 내 커서 포인트 테이블 A와 커서 B는 테이블 B를 가리킨 동시에 내가 읽기/쓰기에 대한 커서를 모두 처리해야합니다 작업 그래서 나는 그런 상황을 처리하는 효율적인 방법을 요청했습니다 –