2017-01-29 6 views
0

Я пытался установить крошечную простую базу данных в свой титановый проект с кодом из документации и пробовать различные настройки, как это было предложено различными источниками. Но я не могу заставить его работать, я получаю ошибки, такие как «no such table» или resultset is null. CurrentY мой код выглядит следующим образом:Как я могу установить базу данных в проект из титанового сплава?

var db = Ti.Database.install('../assets/exercises.db', 'exercisesDB'); 
Ti.API.info('installed '+ db.getName() ); 
db.close(); 
Ti.API.info('closed db' ); 
db = Ti.Database.open('exercisesDB'); 
Ti.API.info('reopened db' ); 
//Ti.API.info(db.getName() ); 
var exercisesDBRS = db.execute('SELECT id,name FROM exercise'); 

Я попытался положить файл базы данных exercises.db в папке активов и в папке ресурсов, но я не получаю не где. Я создал db-файл с «DB Browser for SQLite» версии 3.9.1 на OSX Sierra - совместим ли он с проектами сплавов приложений? Мой текущий код выдает ошибку «нет такой таблицы» в вызове выполнения. Уверяю вас, в файле db есть таблица упражнений.

PS, полный код в файл новых проектов index.js выглядит следующим образом:

var db = Ti.Database.install('exercises.sqlite', 'exercisesDB'); 
Ti.API.debug('installed '+ db.getName() ); 
db.close(); 
Ti.API.debug('closed db' ); 
db = Ti.Database.open('exercisesDB'); 
Ti.API.debug('reopened db' ); 
var exercisesDBRS = db.execute('SELECT id, name FROM exercise'); 
Ti.API.debug('executed select'); 
Ti.API.debug(' rowcount== '+ exercisesDBRS.rowCount); 

while (exercisesDBRS.isValidRow()) { 
    var exId = exercisesDBRS.fieldByName('id'); 
    var exName = exercisesDBRS.fieldByName('name'); 

    Ti.API.debug("Exercise: "+exId + ' ' + exName ); 
    exercisesDBRS.next(); 
} 
exercisesDBRS.close(); 
db.close(); 

function doClick(e) { 
    alert($.label.text); 
} 

$.index.open(); 

Новый проект, но тот же код и копию того же файла базы данных в приложение/Lib папки. Такая же ошибка - нет такой таблицы в строке выполнения при тестировании в android, отлично работает в iOS sim.

ответ

3

В соответствии с Документами, ваша внешняя база данных должна находиться в том же месте, где вы работаете код ниже:

var db = Ti.Database.install('../assets/exercises.db', 'exercisesDB');

  1. Там нет необходимости использовать ../assets/. Вы можете просто ссылаться на базу данных без нее, потому что все, что вы помещаете в папку с ресурсами, перемещается в соответствующую папку Ресурсы-> iphone/android.

  2. Вы всегда можете использовать Ti.Database.install метод внешней базы данных, так как после установки базы данных один раз, он будет вести себя как Ti.Database.open («») exercisesDB метода.

Приходя к вашей главной задачей, вы всегда можете смело поставить свой файл базы данных в приложение -> Lib папку (создать Lib папку, если ее нет, и поместить файл базы данных там, то).

После ввода файла базы данных там, вы всегда можете использовать следующий код:

var db = Ti.Database.install('exercises.db', 'exercisesDB');

Хотя, я никогда не использовал .db расширения, вместо этого я всегда использовал .sqlite формата (поскольку в документах также содержится база данных SQLite), и каждый раз он работал на 100%.

Таким образом, вы можете попробовать этот процесс, изменяя формат базы данных .sqlite и поместить его в app-> Lib папку. Это определенно будет работать, и после проверки вы можете использовать тот же код при использовании файла .db и посмотреть, поддерживается ли он или нет.

На Android выполните следующие действия:

1- В вашем компьютере, перейдите в корневой каталог проекта, удалить сборки и ресурсы папки.

2- На устройстве очистить данные приложения из настроек и затем удалить приложение.

3- Теперь установите приложение снова с тем же кодом и потоком, как я упоминал здесь.

Если он работает отлично для iOS sim, то он также должен работать на Android (только некоторые проблемы с очисткой есть или ваша предыдущая база данных все еще там).

+0

Спасибо, но я попробовал папку lib и папку сценария, но получил ту же ошибку. Пробовал это с и без «/», с той же ошибкой. BTW, я могу создать таблицу с sql, а затем запустить запрос без ошибок, но, конечно, также без каких-либо возвращенных строк. –

+0

BTW, я также пробовал полный абсолютный путь к файлу db, который я пробовал как как .db, так и .sqlite. Пока не повезло. –

+0

Некоторый прогресс, после очистки проекта и удаления приложения с iOS-симулятора, он сработал. Однако тот же процесс не работал на моем устройстве Android, но по-прежнему не получал такой ошибки таблицы. Я предполагаю, что старая база данных все еще висит на устройстве. Пробовал очистить данные приложения, но все равно не повезло. –