2013-08-28 2 views
0

Я использую sqlite4java для обработки sqlite db. Теперь я хочу скопировать таблицу из базы данных в dbtest. Поэтому я нашел код здесь в stackoverflow. Но я всегда получаю ошибку. Прежде всего я открыть соединение с моей новой созданной базы данных, а затем я прилагаю другую базу данных с помощью следующей команды:sqlite4java нет такой ошибки таблицы при добавлении другой базы данных

ATTACH DATABASE database AS database;

Это прекрасно работает. dbtest был открыт раньше как новая база данных. Затем я хочу скопировать таблицы: Следовательно, таблица уже создана, и она такая же, как и в другой базе данных.

INSERT INTO dbtest.Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM database.Routing;

Но после выполнения этого я получаю сообщение об ошибке:

com.almworks.sqlite4java.SQLiteException: [1] DB[1] exec() no such table: dbtest.Routing

Я пробовал также с SQLite Studio, и там он работает без каких-либо проблем, но я не могу присоединить базу данных там (это делается автоматически). Должен ли я использовать другую нотацию для использования двух баз данных?

EDIT: Теперь я использую ответ от CL. Но это приводит к новому вопросу:

com.almworks.sqlite4java.SQLiteException: [1] DB[1] exec() no such table: second.Routing

Что я изменил?

ATTACH DATABASE database AS second; //new name for the database file and it will be attached as second, because if I use the debug function it says: Database second already in use.

Если я использую эту команду, я получаю указанную выше ошибку.

INSERT INTO Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM second.Routing;

Проблема решена путем использования абсолютного пути для файла базы данных.

ответ

1

Название присоединенных баз данных не его имя файла, но все, что вы указали в качестве имени в предложении о ATTACH заявления AS.

Также не указано имя основной базы данных (базы данных, к которой была привязана другая база данных), ее имя файла. Его имя всегда main.

Чтобы указать название таблицы в вашей основной базе данных, используйте main.Routing или просто Routing.


Пожалуйста, обратите внимание, что SQLite совершенно счастлива с созданием новой базы данных, если файл еще не существует, так что вы должны обеспечить, чтобы дать правильное имя файла в ATTACH заявления. Если ваш файл базы данных не указан database или если он не находится в текущем каталоге, база данных second будет пуста. Настоятельно рекомендуется всегда дать полный путь к файлу, например:

ATTACH DATABASE '/some/where/whatever.db' AS second; 
+0

добавить, что теперь я пытался на мой вопрос. –

Смежные вопросы