2016-04-20 2 views
0

Ich habe zwei Tabellen mit genau den gleichen Spalten, außer dass die zweite hat einige zusätzliche.Einfügen von einer Tabelle in eine andere mit select (android sqlite)

Ich möchte alle Daten kopieren, außer für die Spalte _id aus der 1. Tabelle in die 2. Tabelle. Die Namen der Spalten sind in beiden Tabellen identisch.

Hier ist die erste Tabelle

private static final String TABLE_EXPENSES_CREATE = "create table " + TABLE_EXPENSES + " (" + 
     COLUMN_ID + " integer primary key autoincrement, " + 
     COLUMN_DATE + " integer not null, " + 
     COLUMN_AMOUNT + " real not null, " + 
     COLUMN_DESCRIPTION + " text, " + 
     COLUMN_REPEAT_ID + " integer," + 
     " FOREIGN KEY (" + COLUMN_REPEAT_ID + ") REFERENCES " + 
     TABLE_REPEAT_METADATA + "(" + COLUMN_ID + ")" + 
     ");"; 

und der zweite eines

private static final String TABLE_TRANSACTIONS_CREATE = 
     "create table " + TABLE_TRANSACTIONS + " (" + 
      COLUMN_ID + " integer primary key autoincrement, " + 
      COLUMN_DATE + " integer not null, " + 
      COLUMN_AMOUNT + " real not null, " + 
      COLUMN_DESCRIPTION + " text, " + 
      COLUMN_TYPE + " text not null, " + 
      COLUMN_REPEAT_ID + " integer," + 
      " FOREIGN KEY (" + COLUMN_REPEAT_ID + ") REFERENCES " + 
      TABLE_REPEAT_METADATA + "(" + COLUMN_ID + ")" + 
      ");"; 

Ich versuche, alles aus der ersten Tabelle zu kopieren (mit Ausnahme der COLUMN_ID) zum zweiten mit folgendem Code:

db.rawQuery("insert into " 
      + MySQLiteHelper.TABLE_TRANSACTIONS 
      + " (" 
      + COLUMN_DATE 
      + ", " 
      + COLUMN_AMOUNT 
      + ", " 
      + COLUMN_DESCRIPTION 
      + ", " 
      + COLUMN_REPEAT_ID 
      + ") select " 
      + COLUMN_DATE 
      + ", " 
      + COLUMN_AMOUNT 
      + ", " 
      + COLUMN_DESCRIPTION 
      + ", " 
      + COLUMN_REPEAT_ID 
      + " from " 
      + MySQLiteHelper.TABLE_EXPENSES, null); 

Es gibt jedoch keinen Effekt, sobald der Code ausgeführt wird. Die Protokolle zeigen keine Fehler. Was mache ich falsch?

Antwort

1

Sie sollten rawQuery verwenden, wenn Sie annehmen, dass einige Daten zurückgegeben werden (in Cursor).
Für andere Zwecke betrachten execSQL

In Ihrem Fall verwenden, wenn Sie db.rawQuery("insert into "... mit db.execSQL("insert into " ... ersetzen es funktioniert!


P.S. Für rawQuery können Sie auch eine interessante Sache lesen:
"Die SQL-Zeichenfolge darf nicht; beendet".
Ich habe vor Tagen eine Menge Kopfschmerzen bekommen;)

+0

Das hat es behoben. Vielen Dank. – nsmirosh

Verwandte Themen