Java SQLite项目中的语法错误,can';我找不到他
我首先尝试使用SQLite,我有语法错误,但我在5-6个小时内找不到他 来自MainActivity.java的代码,在这个类中我称之为数据库:Java SQLite项目中的语法错误,can';我找不到他,java,android,sqlite,Java,Android,Sqlite,我首先尝试使用SQLite,我有语法错误,但我在5-6个小时内找不到他 来自MainActivity.java的代码,在这个类中我称之为数据库: package ua.bellkross.notepadjava; import android.content.ContentValues; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite
package ua.bellkross.notepadjava;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText editText;
DatabaseHelper databaseHelper;
SQLiteDatabase db;
Cursor userCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
databaseHelper = new DatabaseHelper(getApplicationContext());
}
@Override
protected void onResume() {
super.onResume();
db = databaseHelper.getWritableDatabase();
userCursor = db.rawQuery("select * from " + DatabaseHelper.TABLE, null);
editText.setText(userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_NAME)));
}
}
来自DatabaseHelper.java的代码,在这段代码中我有语法错误,在MethodOnCreate中:
package ua.bellkross.notepadjava;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "userstore.db"; // название бд
private static final int SCHEMA = 1; // версия базы данных
static final String TABLE = "table"; // название таблицы в бд
// названия столбцов
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE users (" + COLUMN_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT);");
// добавление начальных данных
db.execSQL("INSERT INTO "+ TABLE +"(" + COLUMN_NAME + ") VALUES ('Text');");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE);
onCreate(db);
}
}
这是来自logcat的消息:
原因:android.database.sqlite.SQLiteException:靠近“表”:
语法错误(代码1):,编译时:插入表(名称)
值(“文本”);
在
android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机
(方法)
在
android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
在
android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
在
android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
在
android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
在
android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677)
在
android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
在
ua.bellkross.notepadjava.DatabaseHelper.onCreate(DatabaseHelper.java:25)
在
android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
在
android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
在
ua.bellkross.notepadjava.MainActivity.onResume(MainActivity.java:33)
在
android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269)
在android.app.Activity.performResume上(Activity.java:6766)
在
android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377)
在
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440)
在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)07-26
10:03:09.757 1375-1382/ua.bellkross.notepadjava W/art:暂停所有
线程数:8.571ms
“table”是保留的关键字。请将表名更改为任何非保留SQL关键字。您正在使用
表
作为insert的表名,因此请在insert语句中更改表名的名称
static final String TABLE = "users"
您正在使用命名用户创建一个表
db.execSQL("CREATE TABLE users (" + COLUMN_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT);");
并在名为table的表中插入值
db.execSQL("INSERT INTO "+ TABLE +"(" + COLUMN_NAME + ") VALUES ('Text');");
首先更改常量中表的名称
static final String TABLE = "users";
现在更改您的查询
db.execSQL("CREATE TABLE "+ TABLE +"(" + COLUMN_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT);");
希望这能解决您的问题,同时检查其他字符串连接问题(如果有)。是否有名为“table”的表?我不确定这是不是一个好主意。表在MySQL中是一个好主意。它必须在backticks中才能按原样使用,并且在以后可能使用它的任何其他地方(例如,与其他查询一起使用),因此最好使用不同的名称以避免类似错误显示的冲突。