2014-11-27 30 views
5
 
    11-27 03:32:04.471: E/AndroidRuntime(23137): Caused by: android.database.sqlite.SQLiteException: near "order": syntax error (code 1): , while compiling: create table order (_id integer primary key autoincrement, origin text not null, quantity integer not null);

MyDatabase sınıfı:Neden Olduğu: android.database.sqlite.SQLiteException: "" yakın: yazım hatası (kod 1): derleme sırasında:

public class MyDatabase extends SQLiteOpenHelper { 

    public static final String TABLE_NAME = "order"; 
    public static final String TABLE_ID = "_id"; 
    public static final String TABLE_ORIGIN = "origin"; 
    public static final String TABLE_QUANTITY = "quantity"; 
    private static final String DATABASE_NAME = "Appple.db"; 
    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_CREATE = 
     "create table " + TABLE_NAME + 
      "(" + TABLE_ID + " integer primary key autoincrement, " + 
      TABLE_ORIGIN + " text not null, " + 
      TABLE_QUANTITY + " integer not null);"; 

    public MyDatabase (Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
    } 

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 
} 

Çalışma sınıfı:

public class Operation { 

    private MyDatabase dbHelper; 
    private String[] COLUMNS = { MyDatabase.TABLE_ID, MyDatabase.TABLE_ORIGIN, MyDatabase.TABLE_QUANTITY }; 
    private SQLiteDatabase database; 


    public Operation(Context context) { 
     dbHelper = new MyDatabase(context); 
    } 

    public void open() throws SQLException { 
     database = dbHelper.getWritableDatabase(); 
    } 

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

    public void add(String origin, String quantity) { 
     ContentValues values = new ContentValues(); 
     values.put(MyDatabase.TABLE_ORIGIN, origin); 
     values.put(MyDatabase.TABLE_QUANTITY, Integer.parseInt(quantity)); 
     database.insert(MyDatabase.TABLE_NAME, null, values); 
    }  

    public int get(String origin) { 
     int total = 0; 

     Cursor cursor = database.query(MyDatabase.TABLE_NAME, COLUMNS, 
       MyDatabase.TABLE_ORIGIN + " = " + origin, null, null, null, null); 
     cursor.moveToFirst(); 
     while(!cursor.isAfterLast()) { 
      total += cursor.getInt(2); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     return total; 
    } 
} 
MainActivity yılında

orada düşünüyorum

Operation op; 
op = new Operation(this); 
op.open(); 

ile başlar CREATE TABLE'da sorun değil. Ama hata sebebini bulamıyorum. SQL'de bir anahtar sözcüktür.

+0

'un bir listesini bulabilirsiniz Sorununuzun ne olduğu konusunda daha net olmalısınız. Soru başlığını daha uygun bir şeye değiştirin ve tam sorunu belirtin. Ayrıca, tam stacktrace'i dahil edin ve ortaya çıktığı kesin çizgiyi belirtin. – Magnilex

cevap

11

order, SQL'de bir anahtar sözcüktür. Tabloyu yeniden adlandırın veya tablo adını "order" gibi çift tırnaklara koyun.

+0

Tanklar! :) Çözmek için çok zaman harcıyorum. – user4299176

+0

tnx man. zamanımı çok kurtardı. –

6

sqlite anahtar kelimedir ve sqlite anahtar sözcükleri tablo adı olarak kullanılamaz. Here Bu

+0

Çok fazla Tannk! İyi günler! – user4299176

+0

Sütun adı tanımı için aynı hatayı aldım. Bu yüzden, sqlite anahtar kelimeler listesinden ad kullanmayın. – vovahost

+0

@vovahost, kodu görmeden neler olduğunu söylemek zor. Bir soru sormayı deneyin – Blackbelt

İlgili konular