2013-08-18 2 views
1

logcat говорит, что thare является ошибкой SQLite рядом со словом «таблица» в классе базы данных здесь. Я просмотрел этот код, и я не вижу никаких айнтаксов, я что-то пропустил?Ошибка синтаксиса SQLite в методе create table

класс Database

public class Database { 

public static final String DATABASE = "tester"; 

public static final int DATABASE_VERSION = 1; 

public static final String TABLENAME = "table"; 

public static final String _ID = "_id"; 

// collumns 
public static final String SAMPLE = "sample"; 

private static final String SCRIPT_CREATE_TABLE = 
     "CREATE TABLE IF NOT EXISTS " + TABLENAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     SAMPLE + " TEXT)"; 


      SQLiteDatabase sqLiteDatabase; 
      SQLiteHelper sqLiteHelper; 
      Context context; 

      public Database(Context c){ 
        context = c; 
       } 

      public void openToRead() throws android.database.SQLException { 
        sqLiteHelper = new SQLiteHelper(context, DATABASE, null, DATABASE_VERSION); 
        sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
       } 

      public void openToWrite() throws android.database.SQLException { 
        sqLiteHelper = new SQLiteHelper(context, DATABASE, null, DATABASE_VERSION); 
        sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
       } 

       public void close(){ 
       sqLiteHelper.close(); 
       } 

       public void deleteDB(){ 
        context.deleteDatabase(DATABASE); 
       } 

        public void insert(){ 

         ContentValues contentValues = new ContentValues(); 
         contentValues.put(SAMPLE, "TEST ONE"); 
         sqLiteDatabase.insert(TABLENAME, null, contentValues); 


        } 


        public String get(){ 
         String returnString = ""; 
         Cursor cursor = sqLiteDatabase.query(TABLENAME, new String[]{SAMPLE}, null, null, null, null, null); 
         if(cursor!=null){ 
          cursor.moveToFirst(); 
           returnString = cursor.getString(cursor.getColumnIndex(SAMPLE)); 

         } 
         return returnString; 
        } 



     public class SQLiteHelper extends SQLiteOpenHelper { 

        public SQLiteHelper(Context context, String name, 
        CursorFactory factory, int version) { 
        super(context, name, factory, version); 
        } 

        // onCreate of the SQLiteOpenhelper only called if the database does not already exist 
        @Override 
        public void onCreate(SQLiteDatabase db) { 

        db.execSQL(SCRIPT_CREATE_TABLE); 


        } 

        @Override 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        db.execSQL("DROP TABLE IF EXISTS " + SCRIPT_CREATE_TABLE); 



        onCreate(db); 
        } 

       } 

} 

MainAcivity класс

public class MainActivity extends Activity { 
TextView textViewOne; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textViewOne = (TextView) findViewById(R.id.textView1); 


    Database db = new Database(this); 
    db.openToWrite(); 
    db.insert(); 
    db.close(); 

    db.openToRead(); 
    String getStr = db.get(); 
    db.close(); 

    textViewOne.setText(getStr); 

} 



} 
+0

это может быть как «таблица» - это ключевое слово. поэтому при создании таблицы может возникнуть ошибка. Попробуйте выбрать другое имя таблицы, например «MyTable» –

ответ

3

У вас есть таблица с именем "стол" - это проблема, потому что это SQLite's keyword.

Если вы хотите создать таблицу с этим именем вы должны процитировать его, как показано ниже:

CREATE TABLE IF NOT EXISTS "table" ... 
2

Вы пытаетесь создать таблицу с именем table (а reserverd слова в SQLite), не указав имя. Выполнение того же самого в подсказке sqlite3 дает;

sqlite> CREATE TABLE IF NOT EXISTS table (_id INTEGER PRIMARY KEY AUTOINCREMENT, 
              sample TEXT); 
Error: near "table": syntax error 

Если вы действительно значит иметь таблицу под названием «стол», вам нужно процитировать имя;

sqlite> CREATE TABLE IF NOT EXISTS "table" (_id INTEGER PRIMARY KEY AUTOINCREMENT, 
              sample TEXT); 
sqlite>