这篇文章主要围绕android–SQLiteDB的版本号展开,旨在为您提供一份详细的参考资料。我们将全面介绍android–SQLiteDB的版本号,同时也会为您带来AndroidL为什么不用Andr
这篇文章主要围绕android – SQLite DB的版本号展开,旨在为您提供一份详细的参考资料。我们将全面介绍android – SQLite DB的版本号,同时也会为您带来Android L 为什么不用 Android 5.0 的版本号?、android sqlite *.db-journal、Android SQLite DB必须关闭哪些对象、Android SQLiteException:无法将db的区域设置更改为“en_US”的实用方法。
本文目录一览:- android – SQLite DB的版本号
- Android L 为什么不用 Android 5.0 的版本号?
- android sqlite *.db-journal
- Android SQLite DB必须关闭哪些对象
- Android SQLiteException:无法将db的区域设置更改为“en_US”
android – SQLite DB的版本号
我正在做db.getVersion()来获取我的数据库的当前版本.
它在logcat中显示3.
即使在构造函数中,我设置4作为版本号.
public Helper(Context context) { super(context,DATABASE_NAME,null,4); }
我给4,它应该是4作为版本号.
但它的行为不如此.它显示3作为版本号.
请任何建议.
更新: –
public class Helper extends sqliteOpenHelper { public static final String DATABASE_NAME = "helper.db"; public static final String TITLE = "title"; public static final String AUTHOR = "author"; public static final String ISBN = "isbn"; public Helper(Context context) { super(context,4); } @Override public void onCreate(sqliteDatabase db) { db.execsql( "CREATE TABLE book1(_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT,author TEXT,isbn INTEGER);"); Log.v("Create Table","CREATE TABLE book1(_id INTEGER PRIMARY KEY AUTOINCREMENT,isbn INTEGER);"); Log.v("version ","Version number is "+db.getVersion()); }
解决方法
在创建数据库后,您可以尝试检查数据库版本,并要求获取可读或可写的实例吗?
sqliteDatabase db = new Helper(context).getWritableDatabase(); db.getVersion(); // what value do you get here?
查看android 4.1.1的sql代码源代码,sqliteOpenHelper,在这里似乎db版本应该是0的onCreate函数,我想这可能是以另一种方式在您正在测试的版本上实现的.
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/database/sqlite/SQLiteOpenHelper.java#242
Android L 为什么不用 Android 5.0 的版本号?
在上个月的 Google I/O 2014 开发者年会上谷歌新发布的 Android L 系统为什么不用使用以往用数字命名的系统版本号?Android L 不应该是 Android 5.0 吗?为什么要命名为 Android L 呢?
谷歌没有对外界解释过 Android L 的 “L” 的含义,0 按以往的惯例,谷歌有把 Android 历代以来按字母顺序以甜食命名的传统,新版本 Android L 系统中 L 应该来自 5.0 的版本代号 “Lollipop”(棒棒糖)。
Android 历代版本号的命名:
——Android 1.5 Cupcake
——Android 1.6 Donut
——Android 2.1 Eclair
——Android 2.2 Froyo
——Android 2.3 Gingerbread
——Android 3.0 Honeycomb
——Android 4.0 Ice Cream Sandwich
——Android 4.1 ~ 4.3 Jelly Bean
——Android 4.4 KitKat
——Android 5.0 Lollipop
但是在科技行业,对产品命名的向来都是一件比较主观的事情,并没有外界想象的那样有多么深的含义和层次。有另一个说法,L 在罗马数字中代表 50,所以才有了 Android L 的命名。
其 实在 Android 4.4 Kitkat 在正式发表以前,也是用 Android K-build 来称呼 Android 4.4 APIv19。 在正式使用 Kitkat 这个代号之前 Android APIv19 的代号确实叫做 Key lime pie,在 AOSP 的 commit 记 录上可以找到。
还有一种情况,Google IO 大会上,谷歌发布的不仅有面向移动设备的系统,也有面向家庭娱乐的系统,更有面向便捷的 穿戴设备的系统,甚至还有面向车载系统的系统。但是在这几个系统平台中 Android Wear、Android Auto 、 Android TV 都没有强调版本号,谷歌有意在弱化系统中的版本号。
也许在正式版的 Android L 发布之后,Android L 依然会沿用 Android 5.0 的称号。
android sqlite *.db-journal
这两天由于项目需要开始使用sqlite数据库,可是在操作过程中,在databases文件下生成*.db的同时总会对应生成一个*.db-journal。刚开始在网上查找原因,网上有人说是数据库操作错误时生成的日志,可是再怎么仔细检查,都发现我对数据库的操作都是正确的,不会有异常,而且*.db-journal文件的大小一直是0.
后来看了下sqlite的官方文档,发现该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚操作了。在事务开始时产生,在事务操作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。
而android自己的一些机制,又使*.db-journal一直存在。即第一次操作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有操作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销
Android SQLite DB必须关闭哪些对象
我在Android应用程序中使用sqlite DB.我无法100%确定在完成对数据库的读/写操作后必须关闭哪些数据库对象:
例如此代码:
public int getLocalSavedPartsAmount() {
int partsAmount;
PartsAppDbHelper dbHelper = new PartsAppDbHelper(context);
sqliteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {...};
Cursor cursor = db.(...);
partsAmount = cursor.getCount();
//which one do I have to close here?
cursor.close(); //1
dbHelper.close(); //2
db.close(); //3
return partsAmount ;
}
我需要关闭1、2和3吗?关闭顺序重要吗?
解决方法:
完成游标后,应始终关闭它,游标还要求数据库已打开.
您实际上根本不需要关闭数据库.
dbHelper.close关闭数据库.
当您调用getWritableDatabase或getReabableDatabase(无论如何通常都会得到一个可写数据库)时,它将打开数据库并对其进行缓存,因此通常使用相同的打开方式,直到关闭它.
打开数据库可能会非常繁琐,因此您应尽量减少关闭,这样就不必再次打开它.
Cusror,每个都有一个基础文件槽.文件插槽受到限制,请全部使用它们,应用程序将崩溃.
所以
public int getLocalSavedPartsAmount() {
int partsAmount;
PartsAppDbHelper dbHelper = new PartsAppDbHelper(context);
sqliteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {...};
Cursor cursor = db.(...);
partsAmount = cursor.getCount();
//which one do I have to close here?
cursor.close(); //1
return partsAmount ;
}
就足够了.
Android SQLiteException:无法将db的区域设置更改为“en_US”
android.database.sqlite.sqliteDatabaseLockedException:数据库被锁定(代码5)
接着
导致:android.database.sqlite.sqliteException:无法将db’/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db’的区域设置更改为“en_US”.
这是在Android 2.3 – 4.2.1的设备上,以及在我尝试连接到数据库的应用程序的多个位置.我使用它后关闭数据库.
我找不到关于“无法更改数据库区域设置”异常的信息.当我看到source for SQLiteConnection (line 386)时,似乎是“android_Metadata”表或“使用新的区域设置更新索引”的问题.
Here is the code that’s causing the exception (on Github).
java.lang.RuntimeException: An error occured while executing doInBackground() at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) at java.util.concurrent.FutureTask.setException(FutureTask.java:219) at java.util.concurrent.FutureTask.run(FutureTask.java:239) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:856) Caused by: android.database.sqlite.sqliteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'. at android.database.sqlite.sqliteConnection.setLocaleFromConfiguration(sqliteConnection.java:386) at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:218) at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:193) at android.database.sqlite.sqliteConnectionPool.openConnectionLocked(sqliteConnectionPool.java:463) at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:185) at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:177) at android.database.sqlite.sqliteDatabase.openInner(sqliteDatabase.java:804) at android.database.sqlite.sqliteDatabase.open(sqliteDatabase.java:789) at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:694) at android.app.ContextImpl.openorCreateDatabase(ContextImpl.java:854) at android.content.Contextwrapper.openorCreateDatabase(Contextwrapper.java:229) at android.database.sqlite.sqliteOpenHelper.getDatabaseLocked(sqliteOpenHelper.java:224) at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:164) at com.airlocksoftware.database.DbInterface.(DbInterface.java:28) at com.airlocksoftware.hackernews.loader.StoryLoader.loadStories(StoryLoader.java:62) at com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:54) at com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:1) at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40) at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123) at java.util.concurrent.FutureTask.run(FutureTask.java:234) ... 3 more Caused by: android.database.sqlite.sqliteDatabaseLockedException: database is locked (code 5) at android.database.sqlite.sqliteConnection.nativeExecute(Native Method) at android.database.sqlite.sqliteConnection.execute(sqliteConnection.java:548) at android.database.sqlite.sqliteConnection.setLocaleFromConfiguration(sqliteConnection.java:364) ... 24 more
解决方法
Failed to change locale for db ‘/data/data/my.easymedi.controller/databases/EasyMediInfo.db’ to ‘en_US’
关于android – SQLite DB的版本号的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android L 为什么不用 Android 5.0 的版本号?、android sqlite *.db-journal、Android SQLite DB必须关闭哪些对象、Android SQLiteException:无法将db的区域设置更改为“en_US”等相关知识的信息别忘了在本站进行查找喔。
本文标签: