2016-07-16 1 views
0

Я не совсем уверен, что может произойти, я знаю, что при попытке вставить несоответствие, но когда я дважды проверяю свой код, я не понимаю, почему он выплюнул бы эту ошибку. Я просто пытаюсь вставить имя пользователя и пароль (оба являются строками).Тип данных несовместим при вставке данных в базу данных приложений Android

КОНТЕКСТ:

В моем RegisterLoginActivity.java Я сделал это, когда пользователь вводит TextView «Создать учетную запись» он будет захватывать имя пользователя и пароль, и превратить их в строки.

Затем в моем DatabaseOperations.java Я использую функцию putInformation() для вставки данных.

TableData.java просто содержит информацию о моей таблице.

RegisterLoginActivity.java;

package com.example.envy.energyvue; 

import android.content.Context; 
import android.database.Cursor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class RegisterLoginActivity extends AppCompatActivity { 

    EditText USER_NAME, USER_PASS; 
    TextView REG; 
    String user_name, user_pass; 
    Context ctx = this; 
    Button login; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     //getActionBar().hide(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register_login); 

     USER_NAME = (EditText) findViewById(R.id.userText); 
     USER_PASS = (EditText) findViewById(R.id.passText); 
     REG = (TextView) findViewById(R.id.createAccount); 
     REG.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       user_name = USER_NAME.getText().toString(); 
       user_pass = USER_PASS.getText().toString(); 

       DatabaseOperations DB = new DatabaseOperations(ctx); 
       DB.putInformation(DB,user_name, user_pass); 
      } 
     }); 

     // IGNORE THIS PORTION, IT IS FOR LOGGING IN AFTER I REGISTER 
     //******************************************** 
     login = (Button) findViewById(R.id.login); 
     login.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view) { 
       user_name = USER_NAME.getText().toString(); 
       user_pass = USER_NAME.getText().toString(); 
       DatabaseOperations DB = new DatabaseOperations(ctx); 
       Cursor CR = DB.getInformation(DB); 
       CR.moveToFirst(); 
       boolean loginstatus = false; 
       String NAME = ""; 

       do{ 
        if(user_name.equals(CR.getString(0)) && user_pass.equals(CR.getString(1))){ 
         loginstatus = true; 
        } 
       }while(CR.moveToFirst()); 

       if(loginstatus){ 
        Toast.makeText(getBaseContext(), "Login Success", Toast.LENGTH_LONG).show(); 
       } 
       else{ 
        Toast.makeText(getBaseContext(), "Login Failed", Toast.LENGTH_LONG).show(); 
       } 
      } 
      }); 
     } 


} 

DatabaseOperations.java;

package com.example.envy.energyvue; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by Envy on 7/13/2016. 
* 
*  private static final String SQL_CREATE_ENTRIES = 
"CREATE TABLE " + TableData.TableInfo.TABLE_NAME + " (" + TableData.TableInfo._ID + 
" INTEGER PRIMARY KEY," + TableData.TableInfo.COLUMN_NAME_USER_ID + TEXT_TYPE + COMMA_SEP + TableData.TableInfo.COLUMN_NAME_PASSWORD + TEXT_TYPE + ");"; 
*/ 
public class DatabaseOperations extends SQLiteOpenHelper{ 

    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "UserData.db"; 

    private static final String TEXT_TYPE = " TEXT"; 
    private static final String COMMA_SEP = ","; 
    private static final String SQL_CREATE_ENTRIES = 
      "CREATE TABLE " + TableData.TableInfo.TABLE_NAME + " (" + TableData.TableInfo._ID + 
        " INTEGER PRIMARY KEY," + TableData.TableInfo.COLUMN_NAME_USER_ID + TEXT_TYPE + COMMA_SEP + TableData.TableInfo.COLUMN_NAME_PASSWORD + TEXT_TYPE + ");"; 

    private static final String SQL_DELETE_ENTRIES = 
      "DROP TABLE IF EXISTS " + TableData.TableInfo.TABLE_NAME; 

    public DatabaseOperations(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_ENTRIES); 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // This database is only a cache for online data, so its upgrade policy is 
     // to simply to discard the data and start over 
     db.execSQL(SQL_DELETE_ENTRIES); 
     onCreate(db); 
    } 

    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
    } 

    public void putInformation(DatabaseOperations dop, String user_id, String password){ 
     SQLiteDatabase SQ = dop.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put(TableData.TableInfo.COLUMN_NAME_USER_ID, user_id); 
     cv.put(TableData.TableInfo.COLUMN_NAME_PASSWORD, password); 



     System.out.print("LOLOLSDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"); 
     long newRowId; 
     newRowId = SQ.insert(
       TableData.TableInfo.TABLE_NAME, 
       null, 
       cv); 
    } 

    public Cursor getInformation(DatabaseOperations dop){ 
     SQLiteDatabase SQ = dop.getReadableDatabase(); 
     String[] projection = { 
       TableData.TableInfo._ID, 
       TableData.TableInfo.COLUMN_NAME_USER_ID, 
       TableData.TableInfo.COLUMN_NAME_PASSWORD 
      }; 
     Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, projection, null, null, null, null, null); 
     return CR; 

    } 


} 

TableData.java;

package com.example.envy.energyvue; 

import android.provider.BaseColumns; 

/** 
* Created by Envy on 7/13/2016. 
*/ 
public class TableData { 

    public TableData(){} 

    public static abstract class TableInfo implements BaseColumns { 
     public static final String TABLE_NAME = "login_information"; 
     public static final String COLUMN_NAME_USER_ID = "user_id"; 
     public static final String COLUMN_NAME_PASSWORD = "password"; 

    } 

} 

Ошибка:

07-15 21:18:47.996 24361-24361/com.example.envy.energyvue E/SQLiteLog: (20) statement aborts at 5: [INSERT INTO login_information(password,user_id) VALUES (?,?)] datatype mismatch 
07-15 21:18:47.996 24361-24361/com.example.envy.energyvue E/SQLiteDatabase: Error inserting password= bbb user_id=bbb 
                      android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 20) 
                      ################################################################# 
                      Error Code : 20 (SQLITE_MISMATCH) 
                      Caused By : Data type mismatch. 
                       (datatype mismatch (code 20)) 
                      ################################################################# 
                       at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
                       at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:915) 
                       at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
                       at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
                       at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1609) 
                       at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1479) 
                       at com.example.envy.energyvue.DatabaseOperations.putInformation(DatabaseOperations.java:59) 
                       at com.example.envy.energyvue.RegisterLoginActivity$1.onClick(RegisterLoginActivity.java:37) 
                       at android.view.View.performClick(View.java:5697) 
                       at android.widget.TextView.performClick(TextView.java:10814) 
                       at android.view.View$PerformClick.run(View.java:22526) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7229) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

ответ

0

Alright ребята .. после многих часов, я понял это .... Я кладу имя базы данных с «.db» расширение, которое Мессинг вещи.