2015-02-04 2 views
-2

Я разрабатываю простую программу на Android, где вы вводите ряд номеров и нажимаете кнопку, эта информация переходит к другому действию, которое должно храниться в базе данных, когда вы отправляете номер хорошо, но ошибка заключается в использовании функции в SQLite, согласно LogCat моя ошибка в синтаксисе, но я не могу добраться до него, я новичок в разработке для андроидаОшибка SQLite при запуске приложения для Android

The LogCat

 Build Date: 12/12/12 Wed 
    Local Branch: 
    Remote Branch: m/jb_rel_2.0.3 
    Local Patches: NONE 
    Reconstruct Branch: AU_LINUX_ANDROID_JB_REL_2.0.3_RB3.04.01.01.42.002 + NOTHING 
02-04 16:12:56.247 10395-10395/austranet.myapplication2 E/SQLiteLog﹕ (1) near "/": syntax error 
02-04 16:12:56.247 10395-10395/austranet.myapplication2 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40f7c438) 
02-04 16:12:56.267 10395-10395/austranet.myapplication2 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{austranet.myapplication2/austranet.myapplication2.registro}: android.database.sqlite.SQLiteException: near "/": syntax error (code 1): , while compiling: CREATE TABLE ingresos(_id INTEGER PRIMARY KEY AUTOINCREMENT,rut TEXT NOT NULL,fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP,ingreso/salida TEXT); 

моментальный снимок обработчика sqlite:

http://i.imgur.com/T0iwxHa.png

+0

Для вашей ситуации, вам не нужна база данных, вы можете использовать '' Intent.putExtra' или sharedpreferences 'для достижения своей цели – bjiang

ответ

2

Проверьте это поле: ...,ingreso/salida TEXT);.
Это неправильное определение столбца .

использовать что-то вроде ingreso_salida

Или использовать (сильно обескуражен) квадратные скобки:
...,[ingreso/salida] TEXT);

+0

Это работает, если вы принять его в скобки [] – Trinimon

+1

OK. Разве это так, чтобы иметь такое «опасное» имя? –

+0

Нет, см. Мой комментарий выше - я бы тоже не рекомендовал его. Однако вы не можете сказать, что это неверно. – Trinimon

1

Если вы хотите использовать / в вашем имени столбца, вы должны заключить его в квадратные скобки:

CREATE TABLE ingresos 
    (_id    INTEGER PRIMARY KEY AUTOINCREMENT, 
    rut    TEXT NOT NULL, 
    fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP, 
    [ingreso/salida] TEXT); 

Ознакомиться с этим Fiddle. Найдите документацию here, стр. 56. Обратите внимание, что не рекомендуется использовать какие-либо ключевые слова в именах идентификаторов.

+1

из doc 'Это не стандартная SQL.' двойная кавычка - стандартный способ заключить идентификатор. – njzk2

+0

@ njzk2: Он работает с SQLite на устройствах Android (см. Теги). Я знаю, что это не стандартный SQL - может быть даже неплохо использовать. Но это возможно;) – Trinimon

+1

@Trinimon: где в ответах мы говорим «это невозможно» ?? , мы говорим: '/' недействительный символ для имени столбца –

1

`` Текущие создания таблицы запроса имеют следующие вопросы:

1.ingreso/salida недействительно имя столбца. используйте действительный символ в названии столбца, например ingreso_salida

2. Имена столбцов отсутствуют между именами столбцов. поэтому использование String.format создать правильный запрос SQLite:

String tableQuery=String.format("CREATE TABLE %s (%s 
           INTEGER PRIMARY KEY AUTOINCREMENT, 
           %s TEXT NOT NULL, 
           %s DATETIME DEFAULT CURRENT_TIMESTAMP, 
           %s TEXT)", 
           "ingresos", "_id", 
           "rut", "fecha_registro","ingreso_salida")); 
+0

Он работает, если вы обнимаете его в скобках [] – Trinimon

+1

@Trinimon: да за информацию. дайте мне знать, почему проголосовать? –

+0

Из-за _ "ingreso/salida - недопустимое имя столбца" _. Я думаю, дело в том, что вам нужно принять точку столбца, если вы хотите использовать некоторые определенные символы, такие как '/'. – Trinimon

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