Использовал SQLite DBHelper в моем первом приложении.Приложение перезапускается, когда я нажимаю кнопку «Регистрация» после заполнения формы - PullRequest
0 голосов
/ 31 марта 2019

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

(следующий код скопирован из Android Studio 5: Debug)

E/SQLiteLog: (1) near "TABLEtbRegister": syntax error
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: pk.edu.vu.agentpawnbroker, PID: 27838
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:5697)
        at android.widget.TextView.performClick(TextView.java:10826)
        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:7224)
        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)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:5697) 
        at android.widget.TextView.performClick(TextView.java:10826) 
        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:7224) 
        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) 
     Caused by: android.database.sqlite.SQLiteException: near "TABLEtbRegister": syntax error (code 1): , while compiling: CREATE TABLEtbRegister(IDINTEGER PRIMARY KEY AUTOMATIC,First NameTEXT NOT NULL,Last NameTEXT NOT NULL,Registration DateTEXT NOT NULL,User IDTEXT NOT NULL,PasswordTEXT NOT NULL )
    #################################################################
    Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (near "TABLEtbRegister": syntax error (code 1): , while compiling: CREATE TABLEtbRegister(IDINTEGER PRIMARY KEY AUTOMATIC,First NameTEXT NOT NULL,Last NameTEXT NOT NULL,Registration DateTEXT NOT NULL,User IDTEXT NOT NULL,PasswordTEXT NOT NULL ))
    #################################################################
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1812)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1743)
        at pk.edu.vu.agentpawnbroker.Database.DBHelper.onCreate(DBHelper.java:37)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
        at pk.edu.vu.agentpawnbroker.Database.DBHelper.addUser(DBHelper.java:50)
        at pk.edu.vu.agentpawnbroker.RegisterActivity.register(RegisterActivity.java:40)
            ... 12 more

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Полагаю, у вас есть такая строка:

String create = "CREATE TABLE" + tablename + ........

В этой строке вы этого не сделали, хотя вы должны поместить соответствующие пробелы между строковыми литералами и именами таблиц / столбцов, чтобы ваше утверждение читалось так:

CREATE TABLEtbRegister(IDINTEGER PRIMARY KEY AUTOMATIC,First NameTEXT NOT NULL,
Last NameTEXT NOT NULL,Registration DateTEXT NOT NULL,
User IDTEXT NOT NULL,PasswordTEXT NOT NULL )

Вы видите проблемы?

TABLEtbRegister
NameTEXT
NameTEXT
DateTEXT
IDTEXT
PasswordTEXT

имена таблицы и столбцов объединяются с их типами данных.
В операторе create между ними должны быть пробелы.
Также Я вижу, что вы используете для имен столбцов, которые сами содержат пробелы. Это не разрешено
Вы должны заключить эти имена в квадратные скобки или кавычки (код ASCII 096), например [First Name]
Изменить:
Измените ваш оператор создания на:

private static final String  CREATE_TABLE_REGISTER =
    "CREATE TABLE " + TABLE_REGISTER + " (" + KEY_ID + 
    " INTEGER PRIMARY KEY AUTOMATIC, " + KEY_FNAME + " TEXT NOT NULL, " + 
    KEY_LNAME + " TEXT NOT NULL, " + KEY_REGDATE + " TEXT NOT NULL, " + 
    KEY_USERID + " TEXT NOT NULL, " + KEY_PASSWORD + " TEXT NOT NULL )";

Но также измените имена столбцов, например:

String KEY_FNAME = "[First Name]";
0 голосов
/ 31 марта 2019

Между CREATE TABLE и tbRegister(... должен быть пробел.Я предполагаю, что вы хотите, чтобы ваша таблица называлась tbRegister.

Вот синтаксис .

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