2017-07-26 78 views
0

我首先尝试使用SQLite,I`ve语法错误的工作,但我无法找到他5-6小时语法错误,找不到他

从MainActivity.java代码,在这个类我称之为数据库:从DatabaseHelper.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))); 
    } 

} 

代码,这段代码我有语法错误,在methot的onCreate:

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:在“table”附近: 语法错误(代码1):在编译时:INSERT INTO表(名称) VALUES('Text'); 在 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) at 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) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java .lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit 。的java:756)07-26 10 :03:09.757 1375年至1382年/ ua.bellkross.notepadjava W /艺术:挂起所有 线程了:8.571ms

+1

你有一个名为“table”的表吗?我不确定这是个好主意。 – Eran

+0

表是MySQL中的[保留字](https://dev.mysql.com/doc/refman/5.7/en/keywords.html)。它必须反向使用,以及稍后可能使用的任何地方(例如,使用其他查询),所以最好使用不同的名称以避免出现错误所示的冲突。 –

回答

0

您正在创建一个表,指定用户

db.execSQL("CREATE TABLE users (" + COLUMN_ID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT);"); 

并插入值在表中命名表

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);"); 

希望这解决您的问题,还要检查是否有任何其他字符串连接的问题。

+0

谢谢,它帮助! – Bellkross

0

“表” 是保留的关键字。请将表名更改为任何未保留的SQL关键字。您正在使用table作为表名插入,所以请在INSERT语句更改表名的名称

1

static final String TABLE = "users"