Recent

Author Topic: TSqlitejnidataset failed  (Read 7131 times)

irw10062

  • New Member
  • *
  • Posts: 31
TSqlitejnidataset failed
« on: March 25, 2013, 01:52:56 am »
Hello,
who success tried sqlitejnidataset ??
i test TSqliteJNIDataset in androidlcltest,

i got error when trying to press create db button,

Quote
android.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

Quote
I/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.<init>(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.<init>(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

  • Administrator
  • Hero Member
  • *
  • Posts: 3538
Re: TSqlitejnidataset failed
« Reply #1 on: March 25, 2013, 08:38:23 am »
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-bin/viewvc.cgi/trunk/examples/androidlcl/android/AndroidManifest.xml?view=markup&revision=39427&root=lazarus

Maybe db access requires <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ?

A lot of permissions are unintuitive about when they are actually needed.

irw10062

  • New Member
  • *
  • Posts: 31
Re: TSqlitejnidataset failed
« Reply #2 on: March 25, 2013, 09:48:40 am »
okay sir,

createdb work, table it's now created.

but now on connect button it's failed

Quote
W/System.err( 7001): android.database.sqlite.SQLiteException: unable to close due to unfinalised statements

Quote
Z:\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

  • Hero Member
  • *****
  • Posts: 2256
    • Lazarus and Free Pascal italian community
Re: TSqlitejnidataset failed
« Reply #3 on: September 30, 2014, 12:21:06 pm »
Guys I have the same problem too, I can create the database but I can not read it. You've solved as ?!
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1

xinyiman

  • Hero Member
  • *****
  • Posts: 2256
    • Lazarus and Free Pascal italian community
Re: TSqlitejnidataset failed
« Reply #4 on: October 01, 2014, 04:41:26 am »
no idea?! no solution?!
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1

irw10062

  • New Member
  • *
  • Posts: 31
Re: TSqlitejnidataset failed
« Reply #5 on: October 01, 2014, 04:27:34 pm »
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

  • Hero Member
  • *****
  • Posts: 2256
    • Lazarus and Free Pascal italian community
Re: TSqlitejnidataset failed
« Reply #6 on: October 01, 2014, 04:37:23 pm »
thanks, it seems impossible to save data on android app through a lazarus. The thing is unnerving
Win10, Ubuntu and Mac
Lazarus: 2.1.0
FPC: 3.3.1

 

TinyPortal © 2005-2018