【问题标题】:Blackberry and sqlite黑莓和 sqlite
【发布时间】:2011-11-30 02:13:45
【问题描述】:

当我尝试在 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();
    }            
}

}


}

【问题讨论】:

    标签: java blackberry


    【解决方案1】:

    您已确保已关闭文件的所有输入/输出流,并且您必须在调用 DatabaseFactory.open() 之前关闭文件;

    希望有帮助

    【讨论】:

      【解决方案2】:

      如果您想以读写和只读方式打开数据库,请打开 它首先作为读写。尝试以读写方式打开数据库 当它已经打开时(无论是读写还是只读)将 生成“文件系统错误 12”,表示存在 尝试打开多个到相同的读写连接 数据库。

      找到此描述here。我希望它可以帮助您解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多