Java—将Android游标的内容复制到新的SQLite数据库中最有效的方法是什么?
你打算怎么做?经过一段时间的谷歌搜索,我还没有找到任何好的资源或解决方案。首先,确保创建一个新的数据库类,该类包含您需要的表。之后,您可以使用Java—将Android游标的内容复制到新的SQLite数据库中最有效的方法是什么?,java,android,sqlite,cursor,Java,Android,Sqlite,Cursor,你打算怎么做?经过一段时间的谷歌搜索,我还没有找到任何好的资源或解决方案。首先,确保创建一个新的数据库类,该类包含您需要的表。之后,您可以使用insertCursorInDb方法。还可以调用open()一次,这样可以写入数据库 public class YourDatabase extends SQLiteOpenHelper { // If you change the database schema, you must increment the database version.
insertCursorInDb
方法。还可以调用open()
一次,这样可以写入数据库
public class YourDatabase extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "yourdatabase.db";
private SQLiteDatabase database;
public YourDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void open() throws SQLException {
database = this.getWritableDatabase();
}
private void create(SQLiteDatabase database) {
database.execSQL("CREATE TABLE contacts (TEXT `name`, TEXT `number`)");
}
@Override
public void onCreate(SQLiteDatabase database) {
create(database);
}
// this function depends on the values in your cursor
public void insertCursorInDb(Cursor cursor) {
if (cursor != null) {
while (cursor.moveToNext()) {
database.execSQL("INSERT INTO contacts(`name`, `number`) VALUES (?, ?)", new String[]{cursor.getString(0), cursor.getString(1)});
}
cursor.close();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
按照建议,您也可以使用ContentValues
,然后它将变成这样:
// this function depends on the values in your cursor
public void insertCursorInDb(Cursor cursor) {
if (cursor != null) {
while (cursor.moveToNext()) {
ContentValues values = new ContentValues();
values.put("name", cursor.getString(0));
values.put("number", cursor.getString(1));
database.insertOrThrow("contacts", null, values);
}
cursor.close();
}
}
您从何处获得
光标
?如果答案是“来自SQLite”,请使用附加数据库
,并尽可能将数据完全迁移到SQLite中。除此之外,使用游标
作为数据源并不会真正影响Java->SQLite性能,因此所有标准规则都适用(例如,使用事务来最小化磁盘写入)。@Commonware我从Contacts Provider获得了游标。。。这被认为是“来自SQLite”,我可以使用附加数据库?如果没有,那么我将继续使用这些标准。非常感谢。不是真的。是的,联系人可能存储在SQLite数据库中,但它不是您的数据库——您没有对它的直接文件系统访问权。我想可能您正在实施某种备份或归档系统,或者您正在从未加密的数据库迁移到加密的数据库,或者类似的东西。在这些情况下,您将“拥有”这两个数据库,直接SQLite->SQLite数据传输将是一个选项。太棒了!谢谢。如果有帮助,请将其标记为答案:)当然,需要等待4分钟:)有些可能会使这更容易。