2015-06-12 3 views
0

У меня возникла проблема с подключением приложений для Android к базе данных SQLite. У меня есть экземпляр базы данных SQLite в папке «Активы». Операция «Выбрать» возвращает данные, которые вручную вставляются в базу данных. Но операции записи (вставка, обновление, удаление) не выполняются. Я использовал «this.getReadableDatabase()» и заменен на «this.getWritableDatabase», аналогично, SQLiteDatabase.openDatabase (myPath, null, SQLiteDatabase.OPEN_READONLY) был заменен SQLiteDatabase.openDatabase (myPath, null, SQLiteDatabase.OPEN_READWRITE), но все еще бесполезно. Я тестирую Samsung Galaxy S i-90003 с версией 2.3.6. Кто-нибудь, пожалуйста, помогите мнеAndroid-Невозможно записать в базу данных

db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    // values.put(KEY_ID,contact.getId());//Contact Id 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
    values.put(KEY_IMAGE, contact.getImage()); // Contact Phone 
    // Inserting Row 
    try { 
     if(isTableExists(TABLE_IMAGES,true)) { 
      db.insert(TABLE_IMAGES, null, values); 
     } 
    }catch (Exception e) { 
     System.out.println("Error inserting:"+e.getMessage()); 
    } 
    db.close(); // Closing database connection 

    public boolean isTableExists(String tableName, boolean openDb) { 
    if(openDb) { 
     if(db == null || !db.isOpen()) { 
      db = getWritableDatabase(); 
     } 
     if(!db.isReadOnly()) { 
      db.close(); 
      db = getWritableDatabase(); 
     } 
    } 
    Cursor cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null); 
    if(cursor!=null) { 
     if(cursor.getCount()>0) { 
      cursor.close(); 
      return true; 
     } 
     cursor.close(); 
    } 
    return false; 
} 
+0

Я бы перепроверить вы используете 'getWritableDatabase 'метод. – Doomsknight

+1

Вы получаете какие-то исключения? Использовать блок catch try? – Jayesh

+0

есть исключение, в котором говорится, что «курсор не закрыт». он указывает на String myPath = DB_PATH + DATABASE_NAME; db = SQLiteDatabase.openDatabase (myPath, null, SQLiteDatabase.OPEN_READWRITE); – Kittu

ответ

0

Проблема связана с разрешением на запись в базу данных. Android дать вам это 2 метод для управления созданием и обновления новой базы данных

public class MyDBHandler extends SQLiteOpenHelper { 

    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     //add here the sql code to create the database 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     // everytime you need to change the database place your sql code here 

    } 
} 

Вы должны следовать этому учебнику, чтобы понять, как исправить это http://www.techotopia.com/index.php/An_Android_SQLite_Database_Tutorial

+0

Считаете ли вы, что необходимо укоренять устройство, над которым я сейчас работаю? Это решение моей проблемы? Pls – Kittu

+0

@ Kittu Я не думаю, что это правильный способ сделать это. Кроме того, вы можете скопировать базу данных в первый раз (или каждый раз, когда вы ее не найдете) в месте, где вы можете писать. Например, вы можете копировать на внешнем хранилище (с правом разрешения) ... но имейте в виду, если это общая папка, каждое приложение может постоначитать ее. –

+0

Благодарим за решение. Внешнее хранилище относится к SDCard, установленному на телефоне? – Kittu

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