Ежевика и sqlite - PullRequest
       2

Ежевика и sqlite

0 голосов
/ 27 июля 2010

Когда я пытаюсь запустить приведенный ниже код в Blackberry EclipsePlugin 1.1

, я получаю

net.rim.device.api.database.DatabaseIOException: ошибка файловой системы (12) Ошибкаи моя Sqlite DB находится в папке ресурсов проекта.

Я добавил SDCard в симулятор

Поэтому, пожалуйста, помогите мне решить эту ошибку, и я также не могу скопировать Существующую БД в SD-карту.

package com.bb.readdb;

/*
* ReadData.java
*
* Research In Motion Limited proprietary and confidential
* Copyright Research In Motion Limited, 2010
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.io.file.FileSystemRegistry;

import net.rim.device.api.database.Database;
import net.rim.device.api.database.DatabaseException;
import net.rim.device.api.database.DatabaseFactory;
import net.rim.device.api.database.DatabaseSecurityOptions;
import net.rim.device.api.database.Row;
import net.rim.device.api.database.Statement;
import net.rim.device.api.io.URI;
import net.rim.device.api.system.CodeModuleManager;
import net.rim.device.api.system.CodeSigningKey;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
public class Readdbdata extends UiApplication
{
    //public String nydb="nycway232128.db";
public static void main(String[] args)
{
Readdbdata theApp = new Readdbdata();
theApp.enterEventDispatcher();
}
public Readdbdata()
{
pushScreen(new ReadDataScreen());
}
}
class ReadDataScreen extends MainScreen
{
Database d;
public ReadDataScreen()
{
LabelField title = new LabelField("SQLite Read Table Data Sample",
LabelField.ELLIPSIS |
LabelField.USE_ALL_WIDTH);
setTitle(title);
add(new RichTextField("Attempting to retrieve data from " +"Mypeople.db on the SDCard."));
try
{
    String nydb="nycway232128.db";
URI myURI = URI.create("file:///SDCard/databases/NycWay/" +"Mypeople.db");
d = DatabaseFactory.openOrCreate(myURI);
//Statement st =  d.createStatement("SELECT Name FROM gross ");


//st.prepare();
//st.execute();
//st.close();
//d.close();
boolean sdCardPresent = false;
String root = null;
Enumeration e = FileSystemRegistry.listRoots();
copyFile("Mypeople", "file:///SDCard/databases/NycWay/" );

DatabaseFactory.open(myURI);
Statement st =  d.createStatement("SELECT Name FROM People ");
st.prepare();
st.close();

d.close();
}
catch ( Exception e )
{
System.out.println( "@@@@@@@@@NYC IKnwdf pre@@@@@@@@@@@@"+e.toString() );
e.printStackTrace();
}

}
public  void copyFile(String srFile, String dtFile)
{
    try
    {

        FileConnection fconn;


        fconn = (FileConnection) Connector.open(dtFile,Connector.READ_WRITE);

        if(!fconn.exists()) // if  file does not exists , create a new one
        {
            fconn.create();
        }
        InputStream is = getClass().getResourceAsStream(srFile);
        OutputStream os =fconn.openOutputStream();
        byte[] buf = new byte[1024];
        int len;
        while ((len = is.read(buf)) > 0)
        {
            os.write(buf, 0, len);
        }
       is.close();
       os.close();
    }
    catch(IOException e)
    {

    }
}
public void readAndWriteDatabaseFile(FileConnection fileConnection) throws IOException
{
    OutputStream outputStream = null;
    InputStream inputStream = null;       

    // Open an input stream to the pre-defined encrypted database bundled
    // within this module.
    String nydb="Mypeople";
    {        
        /*\*/
    inputStream = getClass().getResourceAsStream("/" + nydb);

    // Open an output stream to cthe newly created file
    outputStream = (OutputStream)fileConnection.openOutputStream();                                       

    // Read data from the input stream and write the data to the
    // output stream.            
    byte[] data = new byte[256];
    int length = 0;
    while (-1 != (length = inputStream.read(data)))
    {
        outputStream.write(data, 0, length);                
    }     

    // Close the connections
    if(fileConnection != null)
    {
        fileConnection.close();
    }
    if(outputStream != null)
    {
        outputStream.close();
    }
    if(inputStream != null)
    {
        inputStream.close();
    }            
}

}


}

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Вы должны убедиться, что закрыли все потоки ввода / вывода файла, также вы должны закрыть файл перед вызовом DatabaseFactory.open ();

Надеюсь, что эта помощь

0 голосов
/ 29 ноября 2011

Если вы хотите открыть базу данных как для чтения-записи, так и только для чтения, сначала откройте ее как чтение-запись.Попытка открыть базу данных для чтения-записи, когда она уже открыта (либо для чтения-записи, либо только для чтения), приведет к «Ошибка файловой системы 12», которая указывает на то, что была предпринята попытка открыть более одной операции чтения-записи.подключение к той же базе данных.

Найдено это описание здесь .Я надеюсь, что это поможет решить вашу проблему.

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