2016-06-21 3 views
-2

Я пытаюсь вставить значения, которые я получаю от EditText к Mysql дб, но у меня есть ошибка около «» который, я надеюсь кто-то может уточнить:SQLite ошибка вставки строки в БД андроида

final SQLiteDatabase userDB = this.openOrCreateDatabase("Users",MODE_PRIVATE,null); 

    final String fullNameText = fullName.getText().toString(); 

    final String stateText = state.getText().toString(); 

    final String zipcodeText = zipcode.getText().toString(); 

    saveUserInfo.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      try 
      { 

       userDB.execSQL("CREATE TABLE IF NOT EXISTS allUsers (name VARCHAR, zipcode VARCHAR, state VARCHAR, id INTEGER PRIMARY KEY)"); 

       userDB.execSQL("INSERT INTO allUsers(name, zipcode, state) VALUES (" + fullNameText + ", " + zipcodeText + ", " + stateText + ")"); 



       Cursor c = userDB.rawQuery("SELECT * FROM allUsers", null); 

       int nameIndex = c.getColumnIndex("name"); 
       int zipcodeIndex = c.getColumnIndex("zipcode"); 
       int stateIndex = c.getColumnIndex("state"); 
       int idIndex = c.getColumnIndex("id"); 

       c.moveToFirst(); 

       while (c != null) { 
        Log.i("Name-", c.getString(nameIndex)); 
        Log.i("Zipcode-", c.getString(zipcodeIndex)); 
        Log.i("State-", c.getString(stateIndex)); 

        Log.i("id", Integer.toString(c.getInt(idIndex))); 

        c.moveToNext(); 
       } 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 

Ошибка Журналы

>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err: android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: INSERT INTO allUsers(name, zipcode, state) VALUES (, ,) 
>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err: ################################################################# 
>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err: Error Code : 1 (SQLITE_ERROR) 
>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err: Caused By : SQL(query) error or missing database. 
>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err:  (near ",": syntax error (code 1): , while compiling: INSERT INTO allUsers(name, zipcode, state) VALUES (, ,)) 
>06-20 17:21:38.498 5433-5433/com.haasith.creation.jantan W/System.err: ################################################################# 

ответ

0

Это вызвано:

final String fullNameText = fullName.getText().toString(); 

final String stateText = state.getText().toString(); 

final String zipcodeText = zipcode.getText().toString(); 

выше код получить пустую строку, для OnClickListener не получает новых значений fullNameText, stateText и zipcodeText.

Правильное использование возможно нравится:

saveUserInfo.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     try 
     { 

     final String fullNameText = fullName.getText().toString(); 

     final String stateText = state.getText().toString(); 

     final String zipcodeText = zipcode.getText().toString(); 

     userDB.execSQL("CREATE TABLE IF NOT EXISTS allUsers (name VARCHAR, zipcode VARCHAR, state VARCHAR, id INTEGER PRIMARY KEY)"); 

     userDB.execSQL("INSERT INTO allUsers(name, zipcode, state) VALUES (" + fullNameText + ", " + zipcodeText + ", " + stateText + ")"); 
+0

Строка не является примитивным типом, она является ссылочным типом. Ваш ответ правильный (ему нужно получить строки внутри 'OnClickListener'). – Karakuri

+0

@ Каракури, вы правы, я буду удален дальше. – chengpohi

+0

logcat считает, что мои конечные строки - это имена столбцов> 06-21 00: 42: 46.090 17205-17205/com.haasith.creation.jantan E/SQLiteLog: (1) нет такого столбца: jkjjk > 06-21 00:42: 46.090 17205-17205/com.haasith.creation.jantan W/System.err: android.database.sqlite.SQLiteException: нет такого столбца: jkjjk (код 1): при компиляции: INSERT INTO allUsers (имя, почтовый индекс, состояние) VALUES (jkjjk, 989889, jjknj) @karakuri –

-1

Вот ваш INSERT SQL

INSERT INTO allUsers(name, zipcode, state) VALUES (" + fullNameText + ", " + zipcodeText + ", " + stateText + ") 

результат ул который составляет

INSERT INTO allUsers(name, zipcode, state) VALUES (Name, ZipCode, StateText) 

Однако вам нужно указать строку в SQL.

INSERT INTO allUsers(name, zipcode, state) VALUES ('Name', 'ZipCode', 'StateText') 
+0

Я хочу, чтобы текст из edittext хранился не в строке «Имя» и т. Д. –

+0

@HaasithSanka. Я имею в виду, что строка должна быть такой: «INSERT INTO allUsers (name, zipcode, state) VALUES (« + fullNameText + » ',' "+ zipcodeText +" ',' "+ stateText +" ') "' Вы должны добавить '' 'в свою строку. Строкой в ​​ответе является ** РЕЗУЛЬТАТ СТРАНИЦЫ **, а не само утверждение. – Joshua

-1

userDB.execSQL("INSERT INTO allUsers(name, zipcode, state) VALUES (" + fullNameText + ", " + zipcodeText + ", " + stateText + ")");

Проблема заключается в SQL-запрос. Он требует от вас 3 значения, в основном имя, почтовый индекс и состояние. Ваш синтаксис неверен в разделе «Значения». Она должна быть

userDB.execSQL("INSERT INTO allUsers(name, zipcode, state) VALUES (fullNameText, zipcodeText, stateText)");

Edit: И если вы хотите пробел перед and.after каждого значения вы можете написать it.like это: "" + fullNameText + "", и т.д., и т.д.

+0

, когда я попробовал это, я получил эту ошибку> android.database.sqlite.SQLiteException: no такой столбец: fullNameText (код 1): при компиляции: INSERT INTO allUsers (имя, zipcode, state) VALUES (fullNameText, zipcodeText, stateText) - –

+0

Попробуйте это, как показано здесь http://www.tutorialspoint.com /jdbc/jdbc-insert-records.htm и добавьте свой запрос как таковые VALUES («+ fullNameText +» и т. д.) – MrXplicit

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