2015-08-06 2 views
-1

Я получаю эту ошибку при запуске моего кода в Android Studio.Android SQLite: рядом с "...": синтаксическая ошибка (код 1):, при компиляции: SELECT ".." FROM ".." WHERE _id =?

08-06 04:10:00.209 24514-24514/com.example.mk.anotherapp E/SQLiteLog﹕ (1) near "16": syntax error 
08-06 04:10:00.269 24514-24514/com.example.mk.anotherapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.mk.anotherapp, PID: 24514 
android.database.sqlite.SQLiteException: near "16": syntax error (code 1): , while compiling: SELECT 10 FROM 16 WHERE _id=? 
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314) 
     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161) 
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032) 
     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1238) 
     at com.example.mk.anotherapp.Irradfrag$1.onClick(Irradfrag.java:108) 
     at android.view.View.performClick(View.java:4445) 
     at android.view.View$PerformClick.run(View.java:18446) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5146) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
     at dalvik.system.NativeStart.main(Native Method) 

Вот соответствующий код:

  //assign actual values 
      Integer pitch = pitchsel; 
      Integer orientation = orientaationsel * 5; 
      Double shadefactor = shadesel/100.0; 
      String postregion = "1"; 

      RegionDatabase mDb = new RegionDatabase(getActivity()); 
      SQLiteDatabase db = mDb.getReadableDatabase(); 
      String[] columns = {"Region"}; 
      String Selection = "_id=?"; 
      String[] SelectionArgs ={""+postcodesel}; 

      Cursor cursor = db.query("Region_Key",columns,Selection,SelectionArgs,null,null,null,null); 
      while (cursor.moveToNext()) { 
        postregion = cursor.getString(cursor.getColumnIndexOrThrow("Region")); 
        Toast.makeText(getActivity(),"Region:"+ postregion, Toast.LENGTH_SHORT).show(); 
       } 


      String[] columnsx = {""+orientation}; 
      String[] SelectionArgsx ={""+pitch}; 
      String ratio ="1"; 
// This is the query that the error refers to 
      cursor = db.query(postregion,columnsx,Selection,SelectionArgsx,null,null,null,null); 
      while (cursor.moveToNext()) { 
       ratio = cursor.getString(cursor.getColumnIndexOrThrow(""+orientation)); 
       Toast.makeText(getActivity(),"Ratio:"+ ratio, Toast.LENGTH_SHORT).show(); 
      } 

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

В других случаях эта ошибка была опубликована, обычно это случай неправильных кавычек в rawquery, но это не то, что я делаю.

EDIT

Моя база данных Premade и состоит из 25 таблиц с 37 столбцами в каждой. Я создал его из таблицы, данные которой я должен иметь доступ. Если имя каждого столбца должно быть нечисловым, любая идея, как легко изменить имена столбцов?

EDIT 2

Спасибо всем. Это было связано с именами числовых таблиц. Я ответил на два ответа ниже.

+2

'SELECT 10 FROM 16' ??? Да, это синтаксическая ошибка. Что это даже должно делать? – Kevin

+1

Это были значения аргументов. База данных не названа большой, но она очень большая, а не моя. 16 - имя таблицы, а 10 - имя столбца. Оба являются строками, поэтому все должно быть хорошо. – Matt

+0

Нет, вы не можете этого сделать. По крайней мере, имена таблиц, которые являются ключевыми словами SQL, требуют двойного цитирования. Я даже не уверен, есть ли * метод ускользания целочисленных литералов. Просто назовите их «table16» или что-то еще. – Kevin

ответ

0

Оказывается, что имена таблиц и столбцов должны начинаться с буквы (или, по крайней мере, не число)

What are valid table names in SQLite?

Изменено и теперь они работают.

Но, добавление таких кавычек не требует, чтобы я менял всю базу данных.Это было предложено кем-то, а затем они удалили свой ответ

 String[] columnsx = {String.format("\"%s\"", orientation)}; 
      Selection = "Slope=?"; 
      String[] SelectionArgsx ={""+pitch}; 
      String ratio ="1"; 

       //This is where the error is called. 
      cursor = db.query(String.format("\"%s\"", postregion),columnsx,Selection,SelectionArgsx,null,null,null,null); 
0
cursor = db.query(postregion,columnsx,Selection,SelectionArgsx,null,null,null,null); 
     while (cursor.moveToNext()) { 
      ratio = cursor.getString(cursor.getColumnIndexOrThrow(""+orientation)); 
      Toast.makeText(getActivity(),"Ratio:"+ ratio, Toast.LENGTH_SHORT).show(); 
     } 

columnsx должно быть n строкой, вы отправляете целую ориентацию = orientaationsel * 5; , и вы должны указать имя столбца, а не значение.

Так что ваш синтаксисом должен быть

cursor = db.query(postregion,"orientacionColumnName",Selection,SelectionArgsx,null,null,null,null); 
     while (cursor.moveToNext()) { 
      ratio = cursor.getString(cursor.getColumnIndexOrThrow(""+orientation)); 
      Toast.makeText(getActivity(),"Ratio:"+ ratio, Toast.LENGTH_SHORT).show(); 
     } 

То же самое для вашего выбора должны быть ваши где столбцы спецификации, а не целое.

С уважением.

+0

Имена моих столбцов - это числа, к сожалению. Я думал, что все будет нормально, если я упоминаю их как строки, используя «+». – Matt

+0

просто проверьте этот ответ: http://stackoverflow.com/questions/3694276/what-are-valid-table-names-in-sqlite –

+0

И затем я рекомендую вам снова проанализировать имя столбца или структуру данных. –

0

Заменить postregion (первый Arg запроса) к имя_таблицы, в соответствии с ошибкой предположить.

android.database.sqlite.SQLiteException: рядом с «16»: синтаксическая ошибка (код 1): при компиляции: SELECT 10 FROM 16 WHERE _id =?

cursor = db.query(postregion,columnsx,Selection,SelectionArgsx,null,null,null,null);

Заменяйте как этот

cursor = db.query("tableName",columnsx,Selection,SelectionArgsx,null,null,null,null);
Смежные вопросы