我是初学者。这是我的第一个应用程序项目。观看教程后,我创建了此应用程序来注册用户,但它不起作用。请帮助找出错误以及如何纠正它们。谢谢
(以下代码复制自 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
我想你有这样的一行:
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]";
CREATE TABLE
和 tbRegister(...
之间需要有一个空格。 我想你想让你的桌子被称为tbRegister
。
下面是语法。