When I try run the code below in Blackberry EclipsePlugin 1.1
im getting
net.rim.device.api.database.DatabaseIOException: File system error (12) Error and my Sqlite DB is in resource folder of the Project.
I had added SDCard in the simulator
So please help me to solve this error and I also cant copy Existing DB into SD Card.
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();
}
}
}
}