Java SQLite项目中的语法错误,can';我找不到他

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

我首先尝试使用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.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中才能按原样使用,并且在以后可能使用它的任何其他地方(例如,与其他查询一起使用),因此最好使用不同的名称以避免类似错误显示的冲突。