Когда я пытаюсь запустить приведенный ниже код в 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();
}
}
}
}