Blackberry - Как создать базу данных SQLite? - PullRequest
1 голос
/ 23 марта 2011

Я разрабатываю приложение для устройств Blackberry.Это приложение содержит базу данных.Поскольку API предоставлены в последней версии API, я решил использовать SQLite.

Я следовал каждому примеру, который мог найти везде, но что бы ни случилось, моя база данных остается пустой, и я получаю «DatabaseIOException: Ошибка файловой системы (12) ".

Я должен добавить, что в данный момент я работаю над симулятором.

Вот код, связанный:

// Creation of the database
private static final String DATABASE_NAME = "myDatabase.db";
private static final String STORAGE_LOCATION = "/store/databases/myApp/";
try
    {
        // Create URI            
        URI uri = URI.create(STORAGE_LOCATION + DATABASE_NAME); 

        // Open or create a plain text database.  This will create the
        // directory and file defined by the URI (if they do not already exist).
        db = DatabaseFactory.openOrCreate(uri, new DatabaseSecurityOptions(false));  

        // Close the database in case it is blank and we need to write to the file
        db.close();
        this.CreateTable();
    }
    catch ( Exception e )
    {
        System.out.println( e.getMessage() );
        e.printStackTrace();
    }

Метод создания таблицы:

 public void CreateTable(){
    URI uri;
    try {
        uri = URI.create(STORAGE_LOCATION + DATABASE_NAME);

    // Create a new DatabaseOptions object forcing foreign key constraints
    DatabaseOptions databaseOptions = new DatabaseOptions();
        databaseOptions.set( "foreign_key_constraints", "on" );

    // Open the database            
        db = DatabaseFactory.open(uri, databaseOptions);

    } catch (ControlledAccessException e) {
        e.printStackTrace();
    } catch (DatabaseIOException e) {
        e.printStackTrace();
    } catch (DatabasePathException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e1) {
        e1.printStackTrace();
    } catch (MalformedURIException e1) {
        e1.printStackTrace();
    } catch (DatabaseOptionsSetInvalidKeyException e) {
        e.printStackTrace();
    } catch (DatabaseOptionsSetInvalidValueException e) {
        e.printStackTrace();
    }

    Statement st;
    try {
        st = this.getDb().createStatement("CREATE TABLE '" + TABLE_NAME1 + 
                "'('id' PRIMARY KEY, 'libContexte' TEXT, 'libelle' TEXT, 'xcoord' REAL, "+
        "'ycoord' REAL)");

        st.prepare();
        st.execute();
    } catch (DatabaseException e) {
        e.printStackTrace();
    }

    try {
        db.close();
    } catch (DatabaseIOException e) {
        e.printStackTrace();
    }
}

Спасибо за вашу помощь, я действительно не понимаю, откуда возникла проблема.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Я предполагаю, что вы используете соответствующее устройство или симулятор устройства для хранения базы данных во встроенном хранилище. Это будет 9800 или 9550. Одной из причин получения «ошибки 12» является то, что база данных уже открыта. Как вы защищаете инициализацию базы данных от многократного выполнения?

1 голос
/ 23 марта 2011

Просто идея - не каждое устройство поддерживает создание БД в памяти устройства ( Расположение файлов базы данных SQLite ), поэтому попробуйте вместо этого использовать SDCard (также убедитесь, что на симуляторе есть SDCard).

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