2014-01-22 5 views
0

Я нахожусь в рабочем списке контактов для Android, я только начал разработку на платформе Android. В моем приложении-контакте мне нужно создать таблицу базы данных sqlite для хранения контактов, с которыми я сталкиваюсь с трудностями при создании база данных sqlite дает мне ошибку в моем окне logcat, например: «Logcat показать эту ошибку» sqlite возвращен: код ошибки = 1, msg = near »,« Синтаксическая ошибка «Ошибка 1 (около«, »: синтаксическая ошибка) на 0x1f14d0 при подготовке 'CREATE TABLE Places (ID INT PRIMARY KEY NOT NULL, Name TEXT NOT NULL, ТЕКСТ ТЕЛЕФОНА НЕ НУЛЛ, ТЕКСТ ТЕЛЕФОНА НЕ НУЛЛ, ТЕКСТ ТЕКСТА, ДОМАШНЮЮ ТЕКСТУ НЕ НУЛЛ,' FATAL EXCEPTION: main "java.lang. RuntimeException: невозможно запустить Activity ComponentInfo {com.webpreneur_contactlist/com.webpreneur_contactlist.WebpreneurActivity}: java.lang.IllegalStateException: база данных не открывается " пожалуйста, помогите мнеОшибка при создании базы данных sqlite, дающей синтаксическую ошибку

public class DBHandler extends SQLiteOpenHelper{ 

    private static final int DB_Version = 1; 

    private static final String DB_Name = "Places"; 

    protected static final String Places_Table = "Places"; 

    String name, Address, Website,ID; 
    //WebpreneurActivity Contact; 
public static final String Key_ID = "ID"; 
public static final String Key_Name = "Name"; 
public static final String Key_Phone = "Phone"; 
public static final String Key_Address = "Address"; 
public static final String Key_Website = "Website"; 
public static final String Key_Home = "HOME"; 
public static final String PROJECTION[] = { 
    Key_ID, 
    Key_Name, 
    Key_Address, 
    Key_Phone, 
    Key_Home 
}; 

    String CREATE_PLACES_TABLE = "create table if not exists Places_Table (id integer primary key ,"+ 
      "name VARCHAR not null, phone VARCHAR not null, address VARCAHR not null, website VARCHAR not null,Home VARCHAR not null)"; 

    Context context; 
    SQLiteDatabase db; 

    public DBHandler(Context context) { 

     super(context, DB_Name, null, DB_Version); 
     Log.d("database1" ,"4"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     try{ 
      Log.d("DB", "DB creationnewwwww"); 
       db.execSQL("CREATE TABLE " + Places_Table + "(" + 
         Key_ID + " INT PRIMARY KEY NOT NULL," + 
         Key_Name + " TEXT NOT NULL," + 
         Key_Phone + " TEXT NOT NULL," + 
         Key_Address + " TEXT NOT NULL," + 
         Key_Website + " TEXT," + 
         Key_Home + " TEXT,"); 
       Log.d("DB", "DB creationnewwwwwwwwwwwwwwwwwwwwwwwwwww"); 
     } 
     catch(SQLiteException e){ 
      Log.d("DB", "DB creation excptionhhhhhhhhhhhhhhh"); 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

     db.execSQL("Drop Table If Exists" + Places_Table); 
     onCreate(db); 
    } 



    public DBHandler open() 
    {Log.d("DB", "DB creation 9"); 
    db = this.getWritableDatabase(); 
     onCreate(db); 
    Log.d("DB", "DB creation 9"); 
    return this; 
    } 
    public void close() 
    { 
     db.close(); 

    } 

    //Adding Places 
    void addPlaces(int id, String name,String phone, String address,String url){ 

     Log.d("DB", "DB creation 1"); 
     //SinglePlaceActivity single = new SinglePlaceActivity(); Log.d("DB", "DB creation 2"); 
     ContentValues contentValues = new ContentValues(); 
     Log.d("DB", "DB creation 3"); 
     contentValues.put(Key_ID, id); 
     Log.d("DB", "DB creation 4"); 
     contentValues.put(Key_Name, name); 
     contentValues.put(Key_Phone, phone); 
     contentValues.put(Key_Address, address); 
     contentValues.put(Key_Website, url); 
     Log.d("DB", "DB creation 4"); 
     db.insert(Places_Table, null, contentValues); 
     Log.d("DB", "DB creation 5555"); 
     //db.close(); 
    } 

    public String getdata() { 
     // TODO Auto-generated method stub 
     String [] columns =new String[]{Key_ID ,Key_Name,Key_Address,Key_Website}; 
     Cursor c =db.query(DB_Name, columns, null, null, null, null, null); 
     String Result=""; 
     int iRow=c.getColumnIndex(Key_ID); 
     int iName=c.getColumnIndex(Key_Name); 
     int iAddress=c.getColumnIndex(Key_Address); 
     int iWebsite=c.getColumnIndex(Key_Website); 
     for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
      Result=Result+c.getString(iRow)+" "+c.getString(iName)+ " "+c.getString(iAddress)+ " "+c.getString(iWebsite)+ "\n"; 
     } 

     return Result; 
    } 


    public void createRow(String name, String address, String Phone, String home) 
    { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(Key_Name, name); 
     initialValues.put(Key_Address, address); 
     initialValues.put(Key_Phone, Phone); 
     initialValues.put(Key_Home, home); 
       //pass the initialValues to the database to insert the row 
     db.insert(Places_Table, null, initialValues); 
    } 

     public void deleteRow(long rowId){ 
     db.delete(Places_Table, Key_ID+"="+rowId,null); 
    } 

     public boolean updateRow (long rowId, String name, String address, String Phone, String home){ 
     ContentValues args = new ContentValues(); 
     args.put(Key_Name, name); 
     args.put(Key_Address, address); 
     args.put(Key_Phone, Phone); 
     args.put(Key_Home, home); 
     return db.update(Places_Table, args, Key_ID +"="+ rowId, null)>0; 
    } 
     public Cursor fetchRow(long rowId) throws SQLException{ 
      Cursor result = db.query(Places_Table, null, 
        Key_ID + "=" + rowId, null, null, null,null); 
      if ((result.equals(rowId)) || !result.isFirst()) { 
       throw new SQLException("No note matching ID: " + rowId); 
      } 
      return result; 
     } 

     public Cursor fetchAllRows(){ 
      Log.d("Your Location4", "ok99:"); 
      return db.query(Places_Table, PROJECTION, 
        null, null, null, null, null); 

     } 
} 
+0

"java.lang.IllegalStateException: database not open" может быть ключом. – Nick

+0

Вероятно, вы хотите использовать не INT, а [INTEGER] (http://www.sqlite.org/lang_createtable.html#rowid). –

ответ

2

Заменить

Key_Home + " TEXT,"); 

с

Key_Home + " TEXT)"); 

Там в ,, так что дополнительные спецификации столбцов, как ожидается, но нет ничего followin так что вам нужно, чтобы завершить спецификации таблицы с ).

Кроме того, вы не должны ловить SQLiteException в базе данных помощника onCreate(). Когда onCreate() возвращается нормально, предполагается, что создание базы данных будет успешным.

После устранения проблем удалите приложение, чтобы удалить старый файл с неправильной базой данных и снова запустить onCreate().

Также в вашем open() Вы, кажется, сами звоните onCreate(). Не делай этого. get{Read,Writ}ableDatabase() сделает это за вас, когда потребуется.

+0

Привет Laalto очень полезен для меня, но locat дает мне еще одну ошибку "java.lang.RuntimeException: Невозможно запустить Activity ComponentInfo {com.webpreneur_contactlist/com.webpreneur_contactlist.WebpreneurActivity}: java.lang.IllegalStateException: база данных не открыта, пожалуйста помогите мне, ваше руководство будет высоко оценено. – Shazar

+0

Проверьте стек, где вы находитесь в своем коде, когда генерируется исключение. – laalto

1

Вы не закрываете инструкцию SQL. Например:

это:

db.execSQL("CREATE TABLE " + Places_Table + "(" + 
        Key_ID + " INT PRIMARY KEY NOT NULL," + 
        Key_Name + " TEXT NOT NULL," + 
        Key_Phone + " TEXT NOT NULL," + 
        Key_Address + " TEXT NOT NULL," + 
        Key_Website + " TEXT," + 
        Key_Home + " TEXT,"); 

Должно быть:

db.execSQL("CREATE TABLE " + Places_Table + "(" + 
        Key_ID + " INT PRIMARY KEY NOT NULL," + 
        Key_Name + " TEXT NOT NULL," + 
        Key_Phone + " TEXT NOT NULL," + 
        Key_Address + " TEXT NOT NULL," + 
        Key_Website + " TEXT," + 
        Key_Home + " TEXT)"); 

который затем закрывают создать таблицу заявление. Он ожидал другого параметра из-за запятой.

Смежные вопросы