2010-10-25 8 views
2

, пожалуйста, это правильный синтаксис для копирования определенной строки из одной таблицы в другую?Правильный синтаксис для копирования из одной таблицы в другую (sqlite android)

db.execSQL("insert into Route select * from " + DATABASE_TABLE + " WHERE _id = rowId"); 

потому, что по какой-то причине, когда я называю метод, который выполняет это заявление, все элементы из первой таблицы копируются во вторую таблицу, а не конкретная строку я хочу. Благодарю.

это вызов метода для копирования:

public void copyData(long rowId){ 
db.execSQL("insert into Route select * from " + DATABASE_TABLE + " WHERE _id = rowId"); 
} 

если нет, то не могли бы вы показать мне, как ..

ответ

0

Я вижу несколько проблем:

Во-первых, вы» не передавая аргумент rowId в ваш метод copyData() в качестве части запроса, вы используете строковый литерал rowID.

Во-вторых, ROWIDhas special meaning в SQLite. Это псевдо-столбец, который однозначно идентифицирует каждую строку в таблице и обычно является тем же значением, которое присваивается столбцу INTEGER PRIMARY KEY, и я предполагаю, что вы объявили _id. В результате, когда оценивается WHERE _id = ROWID, два значения всегда совпадают, и поэтому выбираются все строки.

+0

Хммм .. да, я понимаю, что вы имеете в виду. Я думал об этом раньше, но так как мой метод принимал параметр. Я думал, что это будет уникально. поэтому, пожалуйста, что я должен использовать в качестве синтаксиса .. потому что я прочитал, если не ошибаюсь, что идентификатор строки для таблицы всегда должен быть «_id». это означает, что я назначаю второй таблице другой ИД первичного ключа. Кроме того, я действительно не понимаю первый момент, который вы сделали. спасибо – irobotxxx

+0

Извините за первое, что вы сделали, это то, что вы имели в виду? db.execSQL ("insert into Route select * from" + DATABASE_TABLE + "WHERE _id =" + rowId); – irobotxxx

+0

Да, это был бы способ сделать это. Во-вторых, это просто побочный эффект первого. – Blrfl