tags:

views:

255

answers:

3

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();
}            

}

}

}

A: 

You has make sure you has close all input/output streams of the file, also you has to close the file before calling to DatabaseFactory.open();

Hope this help

hiennt
A: 

yes, me too.I run the code below DataBase db=null; db=DatabaseFactory.open(myURI); But i'm getting File system error (12) Error. if i run db=DatabaseFactory.open(myURI,true)==> it's ok. but can not insert/update. if i run db=DatabaseFactory.open(myURI,false) ==>the same error

Can everybody help me? thanks

HaiTran
A: 

problem solved. i have bad code. I was opened it before

HaiTran