2017-07-26 5 views
0

を見つけることができませんが、私はで、5-6時間構文のバグは、私が最初にSQLiteの、I`ve構文のバグで仕事をしようと彼に

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:周辺の "テーブル" によって引き起こさ3210

構文エラー(コード1)、コンパイル中:テーブルに挿入(名) VALUES( 'テキスト')。 で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(AT 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) で012 android.app.Activity.performResumeでandroid.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377)で(Activity.java:6766) でandroid.app.ActivityThread.-wrap12で android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2713) (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(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit 。かかったすべての のスレッドを一時停止:ジャワ:756)7月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

挿入用のテーブル名としてtableを使用しています表内の表

db.execSQL("INSERT INTO "+ TABLE +"(" + COLUMN_NAME + ") VALUES ('Text');"); 

最初に変更するth定数

static final String TABLE = "users"; 

の表の電子名は今

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

うまくいけば、これはあなたの問題を解決し、あなたのクエリを変更するいかなる場合も、他の文字列連結の問題を確認してください。

+0

ありがとうございました! – Bellkross

0

"テーブル" を予約されたキーワードです。テーブル名を予約済みのSQLキーワードに変更してください。

1

あなたはあなたが名前のユーザー

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

と値を挿入すると、テーブルを作成しているので、INSERT文で自分のテーブル名の名前を変更してください

static final String TABLE = "users" 
関連する問題