【问题标题】:How to insert values retrieved from one app's database to another?如何将从一个应用程序的数据库中检索到的值插入到另一个应用程序的数据库中?
【发布时间】:2016-08-03 10:53:57
【问题描述】:

我可以使用 ContentProvider 将一个应用程序数据库的数据显示到另一个应用程序。它工作正常。但我需要将相同的值插入到第二个应用程序的数据库中。我该怎么做? 下面是显示数据的代码sn-p。

    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    cursor.moveToFirst();
    StringBuilder res=new StringBuilder();
    while (!cursor.isAfterLast()) {
        String id=cursor.getString(cursor.getColumnIndex("id"));
        String name=cursor.getString(cursor.getColumnIndex("name"));
        boolean result=dbhelper.insertData(id,name);
        res.append("\n"+id+ "-"+ name);
        cursor.moveToNext();
    }

    resultView.setText(res);

}

这是我插入数据的 db 类方法。

 public boolean insertData(String id,String name){
    SQLiteDatabase db=this.getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put("id",id);
    values.put("name",name);
    long res=db.insert(TABLE_NAME,null,values);
    if (res==-1){
        return false;
    }else {
        return true;
    }

Logcat 是:

       Process: com.canre.backup1, PID: 2953
                                                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference
                                                 at com.canre.backup1.DatabaseHelper.onCreate(DatabaseHelper.java:25)
                                                 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                                                 at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                 at com.canre.backup1.DatabaseHelper.insertData(DatabaseHelper.java:34)
                                                 at com.canre.backup1.MainActivity.onLoadFinished(MainActivity.java:58)
                                                 at com.canre.backup1.MainActivity.onLoadFinished(MainActivity.java:22)

【问题讨论】:

  • 这不是很明显吗?在 while 循环中调用 insertData ... 对其进行一点优化,最好在事务中执行此操作
  • 嘿@Selvin 我已经完成了,但它抛出了 nullpointerexception。

标签: android android-sqlite android-contentprovider


【解决方案1】:

在数据库处理程序类中创建一个插入数据的方法

  public long insert(String id,String name)
{
    SQLiteDatabase db=getWritableDatabase();
    ContentValues values=new ContentValues();
    values.put("name",name);
    values.put("id",id);
    return db.insert("test",null,values);
}

然后按一下按钮设置数据库中的数据

button_ins.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            long i=hlpr.insert(id,name);
            Toast.makeText(getApplicationContext(),i+": is Inserted",Toast.LENGTH_SHORT).show();

        }
    });

测试 -> 类名

hlpr -> 数据库助手类的对象

insert -> 插入方法

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2015-06-27
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多