vals-productions / sqlighter Goto Github PK
View Code? Open in Web Editor NEWSQLite database implementation with ORM features for Android and iOS. J2ObjC compatible.
License: Apache License 2.0
SQLite database implementation with ORM features for Android and iOS. J2ObjC compatible.
License: Apache License 2.0
The current api is nice but it is still very basic and error prone.
I was thinking more of something more type save like this in Java: https://github.com/stephencelis/SQLite.swift
What do you think about this?
In AppDelegate
you have:
[db setReplaceDatabase:TRUE];
This method is not available.
Is is possible to get an error message when something goes wrong like when you have a wrong SQL statement?
If you do: public void commitTransaction();
how do you know when a transaction fails and when to rollback? Shouldn't there be an Exception thrown?
setReplaceDatabase Is is used in Readme but does not exist.
Could you please add an example in the Android Demo when you compile two queries ore mor in a transaction and force the transaction to fail.
I think this would be a good example.
subj
I get the following error in my release build:
10-11 03:06:28.766 1346-1357/? E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
10-11 03:06:28.766 1346-1357/? E/StrictMode: java.lang.Throwable: Explicit termination method 'close' not called
10-11 03:06:28.766 1346-1357/? E/StrictMode: at dalvik.system.CloseGuard.open(CloseGuard.java:184)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:170)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:190)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1148)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:268)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at com.google.android.gms.googlehelp.search.a.a(SourceFile:55)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at com.google.android.gms.googlehelp.d.a.b(SourceFile:49)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at com.google.android.gms.googlehelp.search.a.e(SourceFile:113)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at com.google.android.gms.googlehelp.service.ClearHelpHistoryIntentService.onHandleIntent(SourceFile:49)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.os.Handler.dispatchMessage(Handler.java:102)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.os.Looper.loop(Looper.java:135)
10-11 03:06:28.766 1346-1357/? E/StrictMode: at android.os.HandlerThread.run(HandlerThread.java:61)
Could you please explain how boolean values are stored and retrieved from the SQLighterRs?
When running the following code:
println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb()")
let dbImpl: SQLighterDbImpl = SQLighterDbImpl()
dbImpl.setDbNameWithNSString(MMDatabase.databaseName)
let isDbFileDeployed: Bool = dbImpl.isDbFileDeployed()
if !isDbFileDeployed {
println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database not deployed")
}
else {
println("DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database deployed")
}
dbImpl.setOverwriteDbWithBoolean(false)
dbImpl.copyDbOnce()
dbImpl.openIfClosed()
I get the following output:
DatabaseAdapterImpl - setDatabaseWithSQLighterDb()
DatabaseAdapterImpl - setDatabaseWithSQLighterDb(): database not deployed
2015-09-21 19:44:21.126 TestApp[62389:994686]
Source db path:
/Users/mg/Library/Developer/CoreSimulator/Devices/AE4833C1-296D-41C4-A587-131C9940F3FB/data/Containers/Bundle/Application/44814519-3190-4FC7-A385-3E8F17C21716/TestApp.app/buddyisDB.sqlite3
Dest db path:
/Users/mg/Library/Developer/CoreSimulator/Devices/AE4833C1-296D-41C4-A587-131C9940F3FB/data/Containers/Data/Application/0630F3FA-A019-4DE5-B4EC-A67F76CFCA87/Documents/buddyisDB.sqlite3
2015-09-21 19:44:21.126 TestApp[62389:994686] Could not copy database
It seems that the database could not be created. Could you please fix that?
hi,
i can't seems to access my sqlite.db in the assets folder for my android application. It always throw me "DB file is not deployed" whereby it is not able to access to my sqlite.db resided in my assets folder. Any help is greatly appreciated..thanks very much :)
SQLighterDbImpl db = new SQLighterDbImpl();
String dbPath =
this.getApplication().getApplicationContext().getFilesDir()
.getParentFile().getPath() + "/databases/";
db.setDbPath(dbPath);
db.setDbName("sqlite.sqlite");
boolean isDbFileDeployed = db.isDbFileDeployed();
if(!isDbFileDeployed) {
System.out.println("DB file is not deployed");
} else {
System.out.println("DB file is deployed");
}
I made a wrapper for insert and update so far.
If you like it you can integrate it in your code or make improvements.
You find it here: https://gist.github.com/confile/a8f74bf355e22b052f47
Looking forward for your comments.
Have you tried using your lib with https://github.com/j2objc-contrib/j2objc-gradle?
I still have problems with the integration.
When compiling I get the following error:
:sqlighter:ios_arm64DebugSqlighterlibSharedLibrary SKIPPED
:sqlighter:compileIos_arm64DebugSqlighterlibStaticLibrarySqlighterlibObjcpp
/Users/mg/Downloads/Majestella/sqlighter/src/sqlighterlib/objc/SQLighterRsImpl.m:76:54: error: cannot initialize a parameter of type 'const jbyte *' (aka 'const signed char *') with an rvalue of type 'const void *'
IOSByteArray *ba = [IOSByteArray arrayWithBytes: [ d bytes] count:(int)[d length]];
^~~~~~~~~~
/Applications/J2Objc/j2objc-0.9.8b/include/IOSPrimitiveArray.h:152:1: note: passing argument to parameter 'buf' here
PRIMITIVE_ARRAY_INTERFACE(byte, Byte, jbyte)
^
/Applications/J2Objc/j2objc-0.9.8b/include/IOSPrimitiveArray.h:61:54: note: expanded from macro 'PRIMITIVE_ARRAY_INTERFACE'
+ (instancetype)arrayWith##U_NAME##s:(const C_TYPE *)buf count:(NSUInteger)count; \
^
1 error generated.
:sqlighter:compileIos_arm64DebugSqlighterlibStaticLibrarySqlighterlibObjcpp FAILED
FAILURE: Build failed with an exception.
The first time I start the Android demo project I get the following error:
09-18 17:08:14.663 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: Late-enabling CheckJNI
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 13345: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V
09-18 17:08:14.903 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6f at 0x0007
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 411: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj W/dalvikvm: VFY: unable to resolve virtual method 433: Landroid/content/res/TypedArray;.getType (I)I
09-18 17:08:14.913 3336-3336/com.prod.vals.andr_demo_prj D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
09-18 17:08:15.003 3336-3336/com.prod.vals.andr_demo_prj W/System.err: java.io.FileNotFoundException: /data/data/com.prod.vals.andr_demo_prj/databases/sqlite.sqlite: open failed: ENOENT (No such file or directory)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at libcore.io.IoBridge.open(IoBridge.java:416)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:117)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.vals.a2ios.sqlighter.impl.SQLighterDbImpl.copyDbOnce(SQLighterDbImpl.java:140)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.prod.vals.andr_demo_prj.MainActivity.onCreate(MainActivity.java:26)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.Activity.performCreate(Activity.java:5047)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.access$700(ActivityThread.java:134)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.os.Looper.loop(Looper.java:137)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4867)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at dalvik.system.NativeStart.main(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at libcore.io.Posix.open(Native Method)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at libcore.io.IoBridge.open(IoBridge.java:400)
09-18 17:08:15.013 3336-3336/com.prod.vals.andr_demo_prj W/System.err: ... 19 more
09-18 17:08:15.154 3336-3339/com.prod.vals.andr_demo_prj D/dalvikvm: GC_CONCURRENT freed 195K, 11% free 9533K/10695K, paused 19ms+2ms, total 94ms
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj E/SQLiteLog: (1) no such table: user
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: android.database.sqlite.SQLiteException: no such table: user (code 1): , while compiling: select id, email, name, data, height from user
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1013)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:624)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.vals.a2ios.sqlighter.impl.SQLighterDbImpl.executeSelect(SQLighterDbImpl.java:179)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.prod.vals.andr_demo_prj.Demo.dbOperations(Demo.java:42)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.prod.vals.andr_demo_prj.MainActivity.onCreate(MainActivity.java:36)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.Activity.performCreate(Activity.java:5047)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.access$700(ActivityThread.java:134)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.os.Looper.loop(Looper.java:137)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4867)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
09-18 17:08:15.234 3336-3336/com.prod.vals.andr_demo_prj W/System.err: at dalvik.system.NativeStart.main(Native Method)
09-18 17:08:15.304 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libEGL_mali.so
09-18 17:08:15.314 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so
09-18 17:08:15.324 3336-3336/com.prod.vals.andr_demo_prj D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so
09-18 17:08:15.474 3336-3336/com.prod.vals.andr_demo_prj D/OpenGLRenderer: Enabling debug mode 0
09-18 17:08:43.021 3336-3341/com.prod.vals.andr_demo_prj D/dalvikvm: Debugger has detached; object registry had 1 entries
On the second launch there is no error. Why is this so? Can I prevent this somehow?
Could you please add a size() method for an SQLighterRs this way you can check the number of results in the result set.
https://github.com/vals-productions/sqlighter/tree/master/demo#ios
You should see include nad lib directories here
You should see include and lib directories here
Sqlighter installation would benefit if Android project could import the jar file and Xcode project could include the library and *.h files rather than working with source file inclusion.
It would be a great help if you could use OCN: http://j2objc.org/docs/Writing-Native-Methods.html
to write your native objective-c methods in the Java Impl for ios.
Could you please add these classes? This would make using your lib much better.
rs.hasNext()
should return if there are any more data sets.
Then there should be a method:
rs.next()
which sets the cursor to the next position and returns the next dataset.
Add Date TimeZone support
On test UI there are only 2 groups with final pass/failure status. To check which exact test is failing it is required to open the debugger and dig over the code.
It would be handy to see the status of each test in UI, perhaps the failure of some features is not essential for particular application.
SQLighterDbImpl:
SQLighterDbImpl.m:26:1: Conflicting return type in implementation of 'isDbFileDeployed': 'jboolean' (aka 'bool') vs 'BOOL' (aka 'signed char')
Could you please fix that. Thanks.
You wrote in the Readme:
In either way, both Android and iOS projects should contain your initial SQLite database file.
This is not true. I tested it. You can pretty well work without an initial database file and create the initial database in code.
https://github.com/vals-productions/sqlighter/tree/master/demo
Here your should give the path where to find Demo.java
.
Change the Database path here:
This should be
db.setDbPath(AppController.getInstance().getApplicationContext().getFilesDir().getParentFile().getPath()"/databases/");
I'm trying to make sense of how to work with sqlighter in our Android/iOS app and miss seeing what goes where.
We have the business logic in a shared module, with the UI in iOS and Android. I assume I would have a share sqlighter interface in the business logic, with the platforms telling it where and how to store the DB but else, the business logic should be able to use the DB, right? Could you please shed some light on how that is meant to look like?
Include contents of /ios/impl/ directory SQLighterDbImpl and SQLighterRsImpl .h and *.m files into your iOS project.
What does this mean all from /ios/impl/
or only the two files? Please clarify this.
Is there a better way than doing the following? Is there something like a batch update?
db.executeChage("insert...")
db.executeChage("insert...")
db.executeChage("insert...")
Could you please include ``transactions` for the database queries as well.
You can access result set params like this:
Number pk = rs.getLong(0);
String e = rs.getString(1);
String n = rs.getString(2);
This might lead to runtime errors when you mix the positions. This should be done differently to find error at compile time.
Here is what I suggest:
// define columns
SQLighterExp<String> nameExp = new SQLighterExp<String>();
// create a table
// create statement
// void executeChange(String query, SQLighterExp params...);
db.executeChange("insert into user( name) values (?)", nameExp);
// observe a result set (from a select)
// here I would use the Builder Pattern
SQLighterRs rs = db.select(nameExp)
.from("tableName")
.orderBy(nameExp.asc)
.build();
while (rs.hasNext()) {
SQLighterRow row = rs.next();
String nameFromDb = row.get(nameExp);
}
rs.close();
This would be a much more typ save approach.
If you like this idea I will help you to change the api?
This might be a better notation:
executeChange -> executeUpdate
executeSelect -> executeQuery
This a common convention for example in Grails.
Should dbImpl.copyDbOnce() be used in dev and production?
This sentence does not make any sense
Hi,
I want to update multiple rows with same value. Is this possible to implement?
If not is there another way I can do it?
AnOrm<SomeData> someOrm = (AnOrm<SomeData>) dbInterface.getOrm(SomeData.class);
SomeData someData = new SomeData();
someData.setDetailsAvailable(1);
someOrm.startSqlUpdate(someData);
someOrm.addWhere("owner_id = ?", ownerId);
// Only use this information
someOrm.addInclAttribs("detailsAvailable");
long returnCode = someOrm.apply().longValue();
thanks
Harish
Make it possible to call sqlighter code from multiple threads
Could you please document this function?
Triggered by this issue: #31
Make sure either Exception handling or return type diagnostics regarding query execution results is consistent across Android/iOS platform.
So far the interface SQLighterRs
uses mostly Number as return type. This is not god because you have to cast the results all the time.
Could you please change the following interface methods like this:
public double getDouble(int index);
public long getLong(int index);
public int getInt(int index);
DB recovery itself works, however, database updates after the recovery are not applied properly
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.