Android从表复制值并插入另一个

时间:2014-08-06 08:18:49

标签: android sqlite copy

我正在尝试复制数据库表中的所有数据,这些数据对应于WHERE子句,并将它们插入到另一个表中。我正在尝试使用此代码,但在表prev中,表Ver中只有2条记录插入了超过100条记录....为什么?

private void Tras() {

 String numero_ricevuto = (i.getStringExtra("numero"));
 SQLiteDatabase db = mHelper.getWritableDatabase();
 String sql = "SELECT data, unita_di_misura FROM prev WHERE numero ='"+numero_ricevuto+"'";
 Cursor c = db.rawQuery(sql, null);
 int count = c.getCount();
 String[] data = new String[count];
 String[] unita_di_misura = new String[count];
 for(int i=0; i<count; i++) {
   c.moveToNext();  
   data[i] = c.getString(0);
   unita_di_misura[i] = c.getString(1);
  }            

  for(int i=0 ;i < data.length;i++){
   ContentValues cv = new ContentValues();
   cv.put(VerTable.SI_NO, "0");
   cv.put(VerTable .DATA, data[i]);
   cv.put(VerTable .U_M, e.unita_di_misura[i]);
   db.insert(VerTable .TABLE_NAME, null, cv);
    }
 c.close();
 db.close();
}

2 个答案:

答案 0 :(得分:0)

  

但是在表prev中,表中只有2条记录插入了超过100条记录....为什么?

可能您不止一次运行代码。

此外,仅从数据库中提取数据以将其插回不是非常有效。让数据库引擎为您完成工作更好,例如

db.execSQL("INSERT INTO " + VerTable.TABLE_NAME +
  "(" + VerTable.SI_NO + "," VerTable.DATA + "," + VerTable.U_M + ") " +
  "SELECT 0, data, unita_di_misura FROM prev WHERE numero=?",
  new String[] { numero_ricevuto });

使用?参数也避免了字符串SQL注入的可能性。

答案 1 :(得分:0)

试试这个3行解决方案希望这会对你有所帮助

private void Tras() {

        String numero_ricevuto = (i.getStringExtra("numero"));
        SQLiteDatabase db = mHelper.getWritableDatabase();
        String sql = "INSERT INTO "+VerTable .TABLE_NAME+" SELECT 0,data, unita_di_misura FROM prev WHERE numero = '"+numero_ricevuto+"'";
        db.execSQL(sql);

        db.close();
    }