Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid SQLite DataBase doesn't work on versions newer than Android 2.1
    primarykey
    data
    text
    <p>I'm currently working on an android application that contains SQLite database.. I was trying on emulator with Android 2.1 and it works fine .. but it doesn't work on version newer than Android 2.1 .... In my app, I created an external SQLite database on SQLite manager, then i copy this DB to "/data/data/" + getPackageName() + "/databases/MyDB" when the application is started for the first time .<br> Code for copying the DB from assets folder : </p> <pre><code>try{ try { String destPath = "/data/data/" + getPackageName() + "/databases/MyDB"; File f = new File(destPath); if (!f.exists()) { CopyDB( getBaseContext().getAssets().open("mydb"), new FileOutputStream(destPath)); } } catch (FileNotFoundException e) { e.printStackTrace(); </code></pre> <p>copyDB function :</p> <pre><code>public void CopyDB(InputStream inputStream, OutputStream outputStream) throws IOException { //---copy 1K bytes at a time--- byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) &gt; 0) { outputStream.write(buffer, 0, length); } outputStream.flush(); inputStream.close(); outputStream.close(); } </code></pre> <p>DBAdapter Class :</p> <pre><code>public class DBAdapter { public static final String KEY_ROWID = "_id"; public static final String KEY_NAME = "username"; public static final String KEY_PASSWORD = "password"; private static final String DATABASE_NAME = "MyDB"; private static final String DATABASE_TABLE = "users"; private static final int DATABASE_VERSION = 3; private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } //---closes the database--- public void close() { DBHelper.close(); } //---retrieves all the users--- public Cursor getAllusers() { return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_PASSWORD}, null, null, null, null, null); } //---retrieves a particular user--- public User getuser(String username) throws SQLException { Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_PASSWORD}, KEY_NAME + "=" + "'"+username+ "'", null, null, null, null, null); if(mCursor.moveToFirst()) { mCursor.moveToFirst(); User u=new User(Integer.valueOf(mCursor.getString(0)),mCursor.getString(1),mCursor.getString(2)); return u; }else return null; } public List&lt;Device&gt; getNotupdatedDevices() { List&lt;Device&gt; Devices = new ArrayList&lt;Device&gt;(); SQLiteDatabase db = DBHelper.getWritableDatabase(); Cursor myCursor = db.query("Devices", new String[] {"_DeviceID","current_state","current_level","current_CD_Channel" }, "updated=?", new String[] {"false"}, null, null, null); if (myCursor.moveToFirst()) { do { Device d = new Device(Integer.valueOf(myCursor.getString(0)), myCursor.getString(1),Integer.valueOf(myCursor.getString(2)), Float.valueOf(myCursor.getString(3))); Devices.add(d); } while (myCursor.moveToNext()); return Devices; } return null; } public Device getDevice(String DeviceType,String RoomType,int floor) throws SQLException { Cursor mCursor = db.query("Rooms", new String[] {"_RoomID" }, "RoomType=? AND floor=?", new String[] {RoomType, floor+""}, null, null, null); if(mCursor.moveToFirst()) { mCursor.moveToFirst(); int id=Integer.valueOf(mCursor.getString(0)); Cursor myCursor = db.query("Devices", new String[] {"current_state","current_level","current_CD_Channel" }, "DeviceType=? AND RoomID=?", new String[] {DeviceType, id+""}, null, null, null); if(myCursor.moveToFirst()) { myCursor.moveToFirst(); Device d=new Device(DeviceType,floor,RoomType,myCursor.getString(0), Integer.valueOf(myCursor.getString(1)),Float.valueOf(myCursor.getString(2))); return d; }else return null; }else return null; } public void updateDevice(int floor, String RoomType, String DeviceType, String current_state,int current_level,float current_CD_Channel ) { SQLiteDatabase db = DBHelper.getWritableDatabase(); Cursor mCursor = db.query("Rooms", new String[] {"_RoomID" }, "RoomType=? AND floor=?", new String[] {RoomType, floor+""}, null, null, null); mCursor.moveToFirst(); int id=Integer.valueOf(mCursor.getString(0)); ContentValues values = new ContentValues(); values.put("current_state", current_state); values.put("current_level", current_level); values.put("current_CD_Channel", current_CD_Channel); values.put("updated", "false"); db.update("Devices", values, "RoomID= ? AND DeviceType=?",new String[] { String.valueOf(id),DeviceType }); db.close(); } public void SyncDevice(int id, String current_state,int current_level,float current_CD_Channel ) { SQLiteDatabase db = DBHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("current_state", current_state); values.put("current_level", current_level); values.put("current_CD_Channel", current_CD_Channel); values.put("updated", "true"); // updating row db.update("Devices", values, "_DeviceID= ?", new String[] { String.valueOf(id) }); db.close(); } </code></pre> <p>}</p> <p>logcat message when running the app on ice-cream sandwich emulator :</p> <pre><code> 06-26 22:59:29.418: E/AndroidRuntime(6230): FATAL EXCEPTION: main 06-26 22:59:29.418: E/AndroidRuntime(6230): android.database.sqlite.SQLiteException: no such table: users: , while compiling: SELECT DISTINCT _id, username, password FROM users WHERE username='aya' 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteCompiledSql.&lt;init&gt;(SQLiteCompiledSql.java:68) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteProgram.&lt;init&gt;(SQLiteProgram.java:127) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteProgram.&lt;init&gt;(SQLiteProgram.java:94) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteQuery.&lt;init&gt;(SQLiteQuery.java:53) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405) 06-26 22:59:29.418: E/AndroidRuntime(6230): at cse.HomeAutomation.DBAdapter.getuser(DBAdapter.java:79) 06-26 22:59:29.418: E/AndroidRuntime(6230): at cse.HomeAutomation.Login$1.onClick(Login.java:53) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.view.View.performClick(View.java:3511) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.view.View$PerformClick.run(View.java:14105) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.os.Handler.handleCallback(Handler.java:605) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.os.Handler.dispatchMessage(Handler.java:92) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.os.Looper.loop(Looper.java:137) 06-26 22:59:29.418: E/AndroidRuntime(6230): at android.app.ActivityThread.main(ActivityThread.java:4424) 06-26 22:59:29.418: E/AndroidRuntime(6230): at java.lang.reflect.Method.invokeNative(Native Method) 06-26 22:59:29.418: E/AndroidRuntime(6230): at java.lang.reflect.Method.invoke(Method.java:511) 06-26 22:59:29.418: E/AndroidRuntime(6230): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 06-26 22:59:29.418: E/AndroidRuntime(6230): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 06-26 22:59:29.418: E/AndroidRuntime(6230): at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>I searched a lot but didn't find a solution for this problem ... thank you so much in advance :) </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload