android.database.sqlite.SQLiteException: привязка или индекс столбца вне диапазона - PullRequest
1 голос
/ 03 ноября 2011

Я храню некоторые значения, которые я получаю от сервера в базе данных, но когда я вставляю значения в базу данных, это дает мне следующее исключение:

   android.database.sqlite.SQLiteException: bind or column index out of range

Я использую для этого следующий код:

       private static final String INSERT = "insert into " 
         + DATABASE_TABLE + "(type,width,height,encoding,data,iid)"+" values (?,?,?,?,?,?)";


     public WineDatabaseAdapter(Context context) {
          this.context = context;
       WineDatabaseHelper openHelper = new WineDatabaseHelper(context);
       this.db=openHelper.getWritableDatabase();
      this.insertStmt=this.db.compileStatement(INSERT);
       }


public long insert(String KEY_TYPE ,String KEY_WIDTH,String KEY_HEIGHT, String KEY_ENCODING,String KEY_DATA,String KeyIId){
           this.insertStmt.bindString(0, KEY_TYPE);
           this.insertStmt.bindString(1, KEY_WIDTH);
           this.insertStmt.bindString(2, KEY_HEIGHT);
           this.insertStmt.bindString(3, KEY_ENCODING);
           this.insertStmt.bindString(4, KEY_DATA);
           this.insertStmt.bindString(5, KeyIId);
           return this.insertStmt.executeInsert();
       }

и я вставляю значения в другой класс:

    db = new WineDatabaseAdapter(HomePageWithPhoneIsOfflineDialog.this);
  db.insert( type,width, height,encoding, data1,iid);

и далее - трассировка стека:

         11-03 17:32:15.406: WARN/System.err(22895): android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x319db0
        11-03 17:32:15.406: WARN/System.err(22895):     at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
        11-03 17:32:15.406: WARN/System.err(22895):     at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:244)
        11-03 17:32:15.406: WARN/System.err(22895):     at com.emx.Winwcountry.database.WineDatabaseAdapter.insert(WineDatabaseAdapter.java:52)
        11-03 17:32:15.406: WARN/System.err(22895):     at com.emx.Winwcountry.HomePageWithPhoneIsOfflineDialog$1.onClick(HomePageWithPhoneIsOfflineDialog.java:144)
       11-03 17:32:15.406: WARN/System.err(22895):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
         11-03 17:32:15.406: WARN/System.err(22895):     at android.os.Handler.dispatchMessage(Handler.java:99)
        11-03 17:32:15.406: WARN/System.err(22895):     at android.os.Looper.loop(Looper.java:130)
      11-03 17:32:15.406: WARN/System.err(22895):     at android.app.ActivityThread.main(ActivityThread.java:3683)
         11-03 17:32:15.406: WARN/System.err(22895):     at java.lang.reflect.Method.invokeNative(Native Method)
       11-03 17:32:15.406: WARN/System.err(22895):     at java.lang.reflect.Method.invoke(Method.java:507)
       11-03 17:32:15.406: WARN/System.err(22895):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
          11-03 17:32:15.406: WARN/System.err(22895):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
         11-03 17:32:15.406: WARN/System.err(22895):     at dalvik.system.NativeStart.main(Native Method)

Ответы [ 2 ]

7 голосов
/ 03 ноября 2011

Я думаю, это довольно просто.Просто прочитайте ошибку.

индекс привязки или столбца вне диапазона

У вас есть 6?в вашей строке:

 private static final String INSERT = "insert into " 
     + DATABASE_TABLE + "(type,width,height,encoding,data,iid)"+" values (?,?,?,?,?,?)";

и вы пытаетесь связать столбец с индексом 7 здесь:

this.insertStmt.bindString(7, KeyIId);

Редактировать: Индекс, используемый bindString, равен 1на основе этого, поэтому вы должны начать свой индекс с 1.

0 голосов
/ 03 ноября 2011

видно, что вы упомянули 6 столбцов, но вы устанавливаете 7 столбцов внутри функции insert (). Также индекс следует начинать с 0, а не с 1. Так что ваш индекс будет варьироваться от 0 до 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...