android sqlitedatabase update 成功与否

android sqlitedatabase update 成功与否,第1张

Android 不自动提供数据库。

在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。

SQLiteOpenHelper 的子类,至少需要实现三个方法

构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

public class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)

{

super(context, name, cursorFactory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO 创建数据库后,对数据库的 *** 作

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO 更改数据库版本的 *** 作

}

superonOpen(db);

// TODO 每次成功打开数据库后首先被执行

}

}

复制代码

接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db=(new DatabaseHelper(getContext()))getWritableDatabase();

return (db == null) false : true;

复制代码

上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。

当你完成了对数据库的 *** 作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

至少需要实现三个方法:

构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

public class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)

{

super(context, name, cursorFactory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO 创建数据库后,对数据库的 *** 作

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO 更改数据库版本的 *** 作

}

superonOpen(db);

// TODO 每次成功打开数据库后首先被执行

}

}

复制代码

接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db=(new DatabaseHelper(getContext()))getWritableDatabase();

return (db == null) false : true;

复制代码

上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。

当你完成了对数据库的 *** 作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

Android Studio 是可以在线增量更新的,但是可能连不上服务器更新,解决办法如下:

1修改系统hosts文件,添加如下2行

20320846146 dl-sslgooglecom

20320846146 dlgooglecom

2修改Android Studio\bin目录下的studiovmoptions (32位系统) 或者 studio64vmoptions (64位系统)文件,添加如下3行

-DjavanetpreferIPv4Stack=true

-Dideaupdatesurl=>

在网上找了大把大把的资料、还是没能怎么弄清楚关于SQLite升级。固把一些网上找到的资料跟自己摸索出来的东西一起发出来。望有厉害的前辈能够指点一二。 先上网上一些高手的资料:blog/yaya_soft/article/details/17089353 、 /topic/1127838。其中我所在的情况跟第三位前辈所遇到的情况一样, 先说Android SQLite吧, Android系统本身自带了一个建立SQLite的工具SQLiteOpenHelper、我们只要继承它,里面有几个重写的方法。 为了方便快捷、我只列出了onCreate方法跟onUpgrade方法。 onCreate方法是我们第一次创建数据库的时候会调用,onUpgrade()是我们数据库版本号不一样的时候会调用。网上很多资料都说如果要进行数据库升级,那就直接在onUpgrade里面写你所需要的进行的 *** 作。比如:至于里面代码具体的作用可以参照上面第一 第二个链接,里面有详细解释。 本人的情况是:本人使用外带的可视化工具直接把数据库跟表都已经建立好了,直接复制在raw目录下面。就没有通过系统自带的方法来建立数据库跟表。于是网上找资料一直不明白他们所谓的 在onUpgrade里面进行升级。 因为本人代码压根就没onUpgrade方法可以使用。 完了在网上找到各种资料、最终明白:无论你是用系统自带的SQLiteOpenHelper工具建立数据库跟表、还是使用外带工具。如果你要进行数据库升级。你所需要的 *** 作都是一样的。只是系统自带的里面有onUpgrade()方法直接调用。而用外带工具的话你肯定也有一个自己写的SQLite *** 作类、只是使用自己写的 *** 作类的话、onUpgrade()方法也是我们自己写。 反正里面要进行的 *** 作都是一样的。现在就看看如何进行数据库升级。关于这块代码、如果你使用自己写的SQLite *** 作类,那你一看就明白。我们只需要得到db对象。就可以使用 dbexecSQL("ALTER TABLE Subscription ADD COLUMN Activation BLOB"); 这个和SQLiteOpenHelper里面onUpgrade()方法里面的 *** 作是一样的;同样是升级数据库的 *** 作。 接下来就说说怎么判断数据库需要升级、这个就是涉及到版本匹配了、再看这块代码、我们只要拿到db对象、就可以拿到db对应的版本、同时也可以更新db 的版本。完了我们可以参照上面链接中第三位前辈的方法、把我们最新的数据库版本定义在versionCode在AndroidManifestxml文件中。 这样你最新数据库版本跟以前数据库版本都有了 、就可以判断更新不更新。这里解释下关于外带数据库的一些事情: 外带数据即我们通过sqlite expert professional可视化 工具建立一个sqlitedb文件、同时把文件放在raw目录下、我们每次进行数据库 *** 作的时候就会先把raw目录下的sqlitedb复制到手机里面的路径下(如果手机路径里面存在sqlitedb就不复制)、完了以后每次取数据库都是从手机路径里面取的。如果我们raw目录下的sqlitedb进行了更新(我们自己把数据表改下、直接替换 )同时我们的apk版本进行升级更新的时候覆盖安装apk。我们手机目录下的sqlitedb是不会更新的,还是旧版本。 但是我们raw目录下的sqlitedb是新版本。这个时候也不会再复制到手机。 这就需要我们把手机目录下的sqlitedb替换成raw目录下的。 写到这里我又想起一个事情:以前有位同事问为什么要把raw目录下的sqlitedb复制到手机、然后又 *** 作手机路径下的sqlitedb 这不是多此一举吗。他说可以把sqlitedb放在assets目录下、不复制到手机路径。直接就是 *** 作assets目录下的sqlitedb,这样每次数据库更新就直接替换assets目录下的sqlitedb。 我不知道放在assets目录下的好处、同时也不知道放在raw 然后复制到手机路径的好处。 这些我都不知道(望高人指点), 我只知道反正就是不能直接替换salitedb , 直接替换的话就是把旧版本的sqlitedb删除、再安装新版本的sqlitedb。如果这样 *** 作的话好像以前的数据都会丢失、就好像卸载重装一样。 无论何种方式我们要想保留数据都要进行数据的转移。关于数据转移前面给的链接中有。这里就不多讨论了。 发这篇文章只是自己搞这块的时候,一直被网上说的在onUpgrade()方法中直接更新搞糊涂了。 在这里记下来、免得下次不记得。

以上就是关于android sqlitedatabase update 成功与否全部的内容,包括:android sqlitedatabase update 成功与否、为什么androidstudio里的数据库不能更新、怎样使用sqlite expert管理android手机sqlite数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9802567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存