TSqlitejnidataset failed lazarus / 43-Android ---------------------------------------------------------------------- irw10062 · 2013-03-25 00:52 Hello, who success tried sqlitejnidataset ?? i test TSqliteJNIDataset in androidlcltest, i got error when trying to press create db button, Quoteandroid.database.sqlite.SQLiteException: attempt to write a readonly database maybe wrong parameter when open database Quote  // static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)   // preparations   lJavaString :=javaEnvRef^^.NewStringUTF(javaEnvRef, PChar(FFileName));   lParams[0].l := lJavaString;   lParams[1].l := nil;   // Call the method   AndroidDB := javaEnvRef^^.CallStaticObjectMethodA(javaEnvRef, FSqliteDatabaseClass, FSqliteDatabase_openOrCreateDatabase, @lParams[0]); here logcat QuoteI/lclapp  ( 5737): [TSqliteJNIDataset.InternalGetHandle] I/lclapp  ( 5737): [TSqliteJNIDataset.ExecuteDirect] CREATE TABLE TestTable (Fir stFieldStr VARCHAR(255) , SecondFieldInt INTEGER); I/lclapp  ( 5737): [TSqliteJNIDataset.RealInternalGetHandle] I/Database( 5737): sqlite returned: error code = 8, msg = prepared statement abo rts at 37: [CREATE TABLE IF NOT EXISTS android_metadata (locale TEXT)] E/Database( 5737): CREATE TABLE android_metadata failed E/Database( 5737): Failed to setLocale() when constructing, closing the database E/Database( 5737): android.database.sqlite.SQLiteException: attempt to write a r eadonly database E/Database( 5737):      at android.database.sqlite.SQLiteDatabase.native_setLoca le(Native Method) E/Database( 5737):      at android.database.sqlite.SQLiteDatabase.setLocale(SQLi teDatabase.java:1950) E/Database( 5737):      at android.database.sqlite.SQLiteDatabase.(SQLiteD atabase.java:1818) E/Database( 5737):      at android.database.sqlite.SQLiteDatabase.openDatabase(S QLiteDatabase.java:817) E/Database( 5737):      at android.database.sqlite.SQLiteDatabase.openOrCreateDa tabase(SQLiteDatabase.java:851) E/Database( 5737):      at com.pascal.lcltest.LCLActivity.LCLOnTouch(Native Meth od) E/Database( 5737):      at com.pascal.lcltest.LCLActivity$LCLSurface.onTouchEven t(LCLActivity.java:184) E/Database( 5737):      at android.view.View.dispatchTouchEvent(View.java:3807) E/Database( 5737):      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) E/Database( 5737):      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) E/Database( 5737):      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) E/Database( 5737):      at com.android.internal.policy.impl.PhoneWindow$DecorVie w.superDispatchTouchEvent(PhoneWindow.java:1671) E/Database( 5737):      at com.android.internal.policy.impl.PhoneWindow.superDis patchTouchEvent(PhoneWindow.java:1107) E/Database( 5737):      at android.app.Activity.dispatchTouchEvent(Activity.java :2086) E/Database( 5737):      at com.android.internal.policy.impl.PhoneWindow$DecorVie w.dispatchTouchEvent(PhoneWindow.java:1655) E/Database( 5737):      at android.view.ViewRoot.handleMessage(ViewRoot.java:178 5) E/Database( 5737):      at android.os.Handler.dispatchMessage(Handler.java:99) E/Database( 5737):      at android.os.Looper.loop(Looper.java:123) E/Database( 5737):      at android.app.ActivityThread.main(ActivityThread.java:4 627) E/Database( 5737):      at java.lang.reflect.Method.invokeNative(Native Method) E/Database( 5737):      at java.lang.reflect.Method.invoke(Method.java:521) E/Database( 5737):      at com.android.internal.os.ZygoteInit$MethodAndArgsCalle r.run(ZygoteInit.java:868) E/Database( 5737):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja va:626) E/Database( 5737):      at dalvik.system.NativeStart.main(Native Method) I/lclapp  ( 5737): [TSqliteJNIDataset.CheckJNIException] Exception found W/System.err( 5737): android.database.sqlite.SQLiteException: attempt to write a  readonly database W/System.err( 5737):    at android.database.sqlite.SQLiteDatabase.native_setLoca le(Native Method) W/System.err( 5737):    at android.database.sqlite.SQLiteDatabase.setLocale(SQLi teDatabase.java:1950) W/System.err( 5737):    at android.database.sqlite.SQLiteDatabase.(SQLiteD atabase.java:1818) W/System.err( 5737):    at android.database.sqlite.SQLiteDatabase.openDatabase(S QLiteDatabase.java:817) W/System.err( 5737):    at android.database.sqlite.SQLiteDatabase.openOrCreateDa tabase(SQLiteDatabase.java:851) W/System.err( 5737):    at com.pascal.lcltest.LCLActivity.LCLOnTouch(Native Meth od) W/System.err( 5737):    at com.pascal.lcltest.LCLActivity$LCLSurface.onTouchEven t(LCLActivity.java:184) W/System.err( 5737):    at android.view.View.dispatchTouchEvent(View.java:3807) W/System.err( 5737):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 5737):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 5737):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 5737):    at com.android.internal.policy.impl.PhoneWindow$DecorVie w.superDispatchTouchEvent(PhoneWindow.java:1671) W/System.err( 5737):    at com.android.internal.policy.impl.PhoneWindow.superDis patchTouchEvent(PhoneWindow.java:1107) W/System.err( 5737):    at android.app.Activity.dispatchTouchEvent(Activity.java :2086) W/System.err( 5737):    at com.android.internal.policy.impl.PhoneWindow$DecorVie w.dispatchTouchEvent(PhoneWindow.java:1655) W/System.err( 5737):    at android.view.ViewRoot.handleMessage(ViewRoot.java:178 5) W/System.err( 5737):    at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err( 5737):    at android.os.Looper.loop(Looper.java:123) W/System.err( 5737):    at android.app.ActivityThread.main(ActivityThread.java:4 627) W/System.err( 5737):    at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 5737):    at java.lang.reflect.Method.invoke(Method.java:521) W/System.err( 5737):    at com.android.internal.os.ZygoteInit$MethodAndArgsCalle r.run(ZygoteInit.java:868) W/System.err( 5737):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja va:626) W/System.err( 5737):    at dalvik.system.NativeStart.main(Native Method) I/lclapp  ( 5737): TApplication.HandleException JNI Exception! See adb logcat fo r more details. I/lclapp  ( 5737):   Stack trace: I/lclapp  ( 5737):   $81147158 I/lclapp  ( 5737): [TSqliteJNIDataset.InternalCloseHandle] I/lclapp  ( 5737): WARNING: TLCLComponent.Destroy with LCLRefCount>0. Hint: Mayb e the component is processing an event? I/ActivityManager( 2035): Process com.noshufou.android.su (pid 5718) has died. I/ActivityManager( 2035): Process com.pascal.lcltest (pid 5737) has died. I/WindowManager( 2035): WIN DEATH: Window{46307e80 com.pascal.lcltest/com.pascal .lcltest.LCLActivity paused=false} I/WindowManager( 2035): WIN DEATH: Window{462c43e0 com.pascal.lcltest/com.pascal .lcltest.LCLActivity paused=false} I/UsageStats( 2035): Unexpected resume of com.android.launcher while already res umed in com.pascal.lcltest W/InputManagerService( 2035): Got RemoteException sending setActive(false) notif ication to pid 5737 uid 10054 ---------------------------------------------------------------------- felipemdc · 2013-03-25 07:38 Are you using it in your own project or the example project? Maybe you are missing permissions in your APK. Compare your permissions with those of the example: http://svn.freepascal.org/cgi-b in/viewvc.cgi/trunk/examples/androidlcl/android/AndroidManifest.xml?vi ew=markup&revision=39427&root=lazarus Maybe db access requires ? A lot of permissions are unintuitive about when they are actually needed. ---------------------------------------------------------------------- irw10062 · 2013-03-25 08:48 okay sir, createdb work, table it's now created. but now on connect button it's failed QuoteW/System.err( 7001): android.database.sqlite.SQLiteException: unable to close due to unfinalised statements QuoteZ:\svntrunk.271\lazarus.trunk\examples\androidlclmod\android>adb logcat --------- beginning of /dev/log/main I/lclapp  ( 7001): [TCDWidgetSet.CreateTimer] Result=486E4CC0 I/lclapp  ( 7001): [TCDWidgetSet.DestroyTimer] TimerHandle=486E4CC0 lTimer.Nativ eHandle=45F81630 lTimer.NativeGlobalReference=45F81630 I/lclapp  ( 7001): [TCDWidgetSet.CreateTimer] Result=486E4CC0 I/lclapp  ( 7001): [TCDWidgetSet.DestroyTimer] TimerHandle=486E4CC0 lTimer.Nativ eHandle=45F81648 lTimer.NativeGlobalReference=45F81648 I/lclapp  ( 7001): [TCDWidgetSet.CreateTimer] Result=486E4FE0 I/lclapp  ( 7001): [TCDWidgetSet.DestroyTimer] TimerHandle=486E4FE0 lTimer.Nativ eHandle=45F81660 lTimer.NativeGlobalReference=45F81660 I/lclapp  ( 7001): [TCDWidgetSet.CreateTimer] Result=486E4FE0 I/lclapp  ( 7001): [TCDWidgetSet.DestroyTimer] TimerHandle=486E4FE0 lTimer.Nativ eHandle=45F81678 lTimer.NativeGlobalReference=45F81678 I/lclapp  ( 7001): [TCDWSCustomForm.ShowHide] First form layout adjustment lOldD PI=96 lNewDPI=180 lOldFormWidth=257 lNewFormWidth=320 I/lclapp  ( 7001): Button3Click I/lclapp  ( 7001): [TSqliteJNIDataset.InternalGetHandle] I/lclapp  ( 7001): [TSqliteJNIDataset.RetrieveFieldDefs] I/lclapp  ( 7001): [TSqliteJNIDataset.RealInternalGetHandle] I/lclapp  ( 7001): [TSqliteJNIDataset.RealInternalGetHandle] AndroidDB=45F80A70 I/lclapp  ( 7001): [TSqliteJNIDataset.RealInternalCloseHandle] E/Database( 7001): sqlite3_close(0x253388) failed: 5 I/lclapp  ( 7001): [TSqliteJNIDataset.BuildLinkedList] FEffectiveSQL=Select * from TestTable; I/lclapp  ( 7001): [TSqliteJNIDataset.RealInternalGetHandle] I/lclapp  ( 7001): [TSqliteJNIDataset.CheckJNIException] Exception found W/System.err( 7001): android.database.sqlite.SQLiteException: unable to close due to unfinalised statements W/System.err( 7001):    at android.database.sqlite.SQLiteDatabase.dbclose(Native  Method) W/System.err( 7001):    at android.database.sqlite.SQLiteDatabase.onAllReference sReleased(SQLiteDatabase.java:320) W/System.err( 7001):    at android.database.sqlite.SQLiteClosable.releaseReferen ce(SQLiteClosable.java:45) W/System.err( 7001):    at com.pascal.lcltest.LCLActivity.LCLOnTouch(Native Meth od) W/System.err( 7001):    at com.pascal.lcltest.LCLActivity$LCLSurface.onTouchEven t(LCLActivity.java:184) W/System.err( 7001):    at android.view.View.dispatchTouchEvent(View.java:3807) W/System.err( 7001):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 7001):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 7001):    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.j ava:936) W/System.err( 7001):    at com.android.internal.policy.impl.PhoneWindow$DecorVie w.superDispatchTouchEvent(PhoneWindow.java:1671) W/System.err( 7001):    at com.android.internal.policy.impl.PhoneWindow.superDis patchTouchEvent(PhoneWindow.java:1107) W/System.err( 7001):    at android.app.Activity.dispatchTouchEvent(Activity.java :2086) W/System.err( 7001):    at com.android.internal.policy.impl.PhoneWindow$DecorVie w.dispatchTouchEvent(PhoneWindow.java:1655) W/System.err( 7001):    at android.view.ViewRoot.handleMessage(ViewRoot.java:178 5) W/System.err( 7001):    at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err( 7001):    at android.os.Looper.loop(Looper.java:123) W/System.err( 7001):    at android.app.ActivityThread.main(ActivityThread.java:4 627) W/System.err( 7001):    at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 7001):    at java.lang.reflect.Method.invoke(Method.java:521) W/System.err( 7001):    at com.android.internal.os.ZygoteInit$MethodAndArgsCalle r.run(ZygoteInit.java:868) W/System.err( 7001):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja va:626) W/System.err( 7001):    at dalvik.system.NativeStart.main(Native Method) I/lclapp  ( 7001): TApplication.HandleException JNI Exception! See adb logcat fo r more details. I/lclapp  ( 7001):   Stack trace: I/lclapp  ( 7001):   $81147158 I/lclapp  ( 7001): WARNING: TLCLComponent.Destroy with LCLRefCount>0. Hint: Mayb e the component is processing an event? --------- beginning of /dev/log/system I/WindowManager( 2035): WIN DEATH: Window{4618f720 com.pascal.lcltest/com.pascal .lcltest.LCLActivity paused=false} I/ActivityManager( 2035): Process com.pascal.lcltest (pid 7001) has died. I/WindowManager( 2035): WIN DEATH: Window{4618e9b8 com.pascal.lcltest/com.pascal .lcltest.LCLActivity paused=false} I/UsageStats( 2035): Unexpected resume of com.android.launcher while already resumed in com.pascal.lcltest W/InputManagerService( 2035): Got RemoteException sending setActive(false) notification to pid 7001 uid 10054 ---------------------------------------------------------------------- xinyiman · 2014-09-30 10:21 Guys I have the same problem too, I can create the database but I can not read it. You've solved as ?! ---------------------------------------------------------------------- xinyiman · 2014-10-01 02:41 no idea?! no solution?! ---------------------------------------------------------------------- irw10062 · 2014-10-01 14:27 i never touch this again, except develop using raudus in linux, too long wait for development, i prefer use delphixe5 for $1500 compiler, i sell my application twice for $2000 i think its enough and my customer is happy or use appmethod for android, it's cheap price ---------------------------------------------------------------------- xinyiman · 2014-10-01 14:37 thanks, it seems impossible to save data on android app through a lazarus. The thing is unnerving