Создать таблицу с целым числом в качестве первичного ключа не работает не Android - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь создать таблицу с целым числом в качестве первичного ключа, и он не работает.вот ошибка:

11-02 11: 17: 24.833: ​​ОШИБКА / AndroidRuntime (4781): вызвано: android.database.sqlite.SQLiteException: около "0": синтаксическая ошибка: CREATETABLE tremp_db (0 INTEGER PRIMARY KEY AUTOINCREMENT, дата TEXT, время TEXT, повтор TEXT, gamish TEXT, src_city TEXT, src_area TEXT, dest_city TEXT, dest_area TEXT, цена TEXT, кто TEXT, текст TEXT, телефонный TEXT, электронная почта TEXT, телефон TEXT, электронная почта);

Кто-то точно знает в чем проблема?

Спасибо ...

вот код:

public class Data
{
    private static String DATABASE_NAME = new String("db_carpool.db");
    public static final int DATABASE_VERSION = 7; 
    public static String TABLE_NAME = new String("tremp_db");
    public static int ID;
    public static String DATE = new String("date");
    private static String TIME = new String("time");
    private static String REPEAT = new String("repeat");
    private static String GAMISH = new String("gamish");
    private static String SRC_CITY = new String("src_city");
    public static String SRC_AREA = new String("src_area");
    public static String DEST_CITY = new String("dest_city");
    private static String DEST_AREA = new String("dest_area");
    private static String PRICE = new String("price");
    private static String WHO = new String("who");
    public static String PHONE = new String("phone");
    public static String EMAIL = new String("email");
    private static String TEXT = new String("text");
    private static String UPDATE_TIME = new String("update_time");

    final Data thisActivity = this;

    private DatabaseHelper mOpenHelper = null; 
    private static Data datab = null;

    private class DatabaseHelper extends SQLiteOpenHelper 
    { 
        DatabaseHelper(Context context) 
        { 
            super(context, DATABASE_NAME, null , DATABASE_VERSION); 
        } 

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL("CREATE TABLE " + TABLE_NAME + " ( " 
                    + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
                    + DATE + " TEXT, " 
                    + TIME + " TEXT, " 
                    + REPEAT + " TEXT, " 
                    + GAMISH + " TEXT, " 
                    + SRC_CITY + " TEXT, " 
                    + SRC_AREA + " TEXT, " 
                    + DEST_CITY + " TEXT, " 
                    + DEST_AREA + " TEXT, " 
                    + PRICE + " TEXT, " 
                    + WHO + " TEXT, " 
                    + PHONE + " TEXT, " 
                    + EMAIL + " TEXT, " 
                    + TEXT + " TEXT, " 
                    + UPDATE_TIME + " TEXT" + ");"); 
        }


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

ивот код функции, вставляемой в таблицу

void NewTremp(Tremp tremp, Context context)
    {       
        ContentValues values = new ContentValues();
        //values.put(ID, tremp.id);
        values.put(DATE, tremp.date);
        values.put(TIME, tremp.time);
        values.put(REPEAT, tremp.repeat);
        values.put(GAMISH, tremp.gamish);
        values.put(SRC_CITY, tremp.src_city);
        values.put(SRC_AREA, tremp.src_area);
        values.put(DEST_CITY, tremp.dest_city);
        values.put(DEST_AREA, tremp.dest_area);
        values.put(PRICE, tremp.price);
        values.put(WHO, tremp.who);
        values.put(PHONE, tremp.phone);
        values.put(EMAIL, tremp.email);
        values.put(TEXT, tremp.text);
        values.put(UPDATE_TIME, tremp.update);
        SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 

        long rowId = db.insert(TABLE_NAME, null, values);
//      handler.sendEmptyMessage(0);
    }

Ответы [ 3 ]

5 голосов
/ 02 ноября 2011

Попробуйте изменить тип public static int ID; на String:

public static String ID = "_id";

Если вы хотите использовать БД с CursorAdapter, столбец идентификатора должен иметь имя "_id"

РЕДАКТИРОВАТЬ:

ID типа String это просто имя столбца.Тип столбца определен в операторе создания таблицы:

db.execSQL("CREATE TABLE " + TABLE_NAME + " ( " 
                + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 

Поскольку вы использовали int в качестве имени столбца, ваш столбец был назван после строкового представления этого целого числа.

2 голосов
/ 02 ноября 2011

Вы пытаетесь дать значения INTEGER в качестве имени столбца, ТАК SQLite не допускает этого.

Try to give any valid string column name for Integer ID type column like, as Herrmann suggested "_id" as a string.
1 голос
/ 02 ноября 2011

Ваше имя поля первичного ключа - 0. Поля SQL должны начинаться с буквы. Здесь - это правила PostgreSQL для имен полей (должно быть аналогично для SQLite). Если вы действительно хотите оставить имя поля равным «0», попробуйте заключить в кавычки («»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...