SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。做蛋挞的视频教程
因为Android已经集成了SQLite,所以开发人员无需引入任何JAR包,而且Android也针对SQLite封装了专属的API,调用起来非常快捷方便。
我也是第一次接触SQLite,感受到它的一些不同之处,作为一门简易实用的数据库,它的学习周期其实蛮短的。对于懂关系型数据库的人来说,使用SQLite应该是得心应手的。
Android支持很多类型的存储方式,比如File文件、sharedPreference和数据库等,因为我做的应用涉及到频繁的更新操作,而且数据组成较为复杂,所以最终选择了SQLite数据库作为应用的存储方式。但是听有经验的开发人员说,在Android上使用数据文件存储极其不好,只要有ROOT权限就可以随意删除文件,所以如果你的应用属于商业性质,我推荐你做一个网络站点将数据存储于网络服务器上最好。
特性
不需要配置,不需要安装,也不需要管理员。SQLite不需要安装任何数据库相关的服务器,
一个完整的数据库保存在磁盘上面一个文件,要想用数据库工具查看SQLite只需要将它指向那个数据库文件即可!
源代码开放, 代码95%有较好的注释。
完美支持大部分的标准SQL语句。如果你懂得MYSql、Oracle等关系型数据的使用,那么用SQLite也是得心应手。
SQLite最大的特点是,数据表中的字段是无类型的,这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中(除了integer Primary Key)。我的理解是:一张表上的主键必须指定数据类型,而且存储更新时,主键的数据类型一定要对应;而其它的字段全部都是无类型的,你可以存字符串,也可以存int整数。
所以在建表的时候你可以这样写:
CREATE TABLE IF NOT EXISTS user_info (id INTEGER PRIMARY KEY,name,sex)
除了主键外,其它字段均不用定义数据类型,即使定义了数据类型,SQLite也会忽略掉。
web源码selenium
但是很多人还是建议带上数据类型,一来尽量让建表语句标准化便于迁移,二来让后面维护的开发人员理解每个字段到底是什么类型。
CREATE TABLE IF NOT EXISTS user_info (id INTEGER PRIMARY KEY,name VARCHAR(99),sex INTEGER )
假设主键是自增的,当insert一条数据到数据库中,获取自增主键的值可以这样写:
SELECT last_insert_rowid()
新增数据库
任何数据库都要先从建库和建表开始,因为我是做Android应用,所以直接通过JAVA程序来建库和建表,以后表的更新也是通过程序实现,这些功能都基于Android SQLite的SQLiteOpenHelper实现,非常地方便。jsonp跨域同步
首先要了解这个核心抽象类SQLiteOpenHelper,既然是抽象类,我们就要创建一个实体类继承并实现SQLiteOpenHelper。
t.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
public SQLHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqlitedatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqlitedatabase, int i, int j) {
}
}
构造方法四个参数:
Context指Android的上下文,Activity就继承了Context,所以在Activity中可以将对象传入构造方法中;
name指数据库名称,所以一个实体类操作一个数据库;
CursorFactory游标工厂,用于执行查询操作时控制Cursor游标对象的,传入null就表示使用系统默认游标工厂;
linux 删除多个
version当前数据库版本,这个很重要,涉及到后面的onCreate和onUpgrade方法调用,这个必须是一个整数,没有特别要求你一定必须是哪个值,我的个人建议是第一次创建时设置version为1,随后每次更新表和字段时+1。(这个下面会说怎么回事)
关于构造函数的实现,我的代码是这么做的(实例化对象时,直接调用DBHelper(Context context)这个构造函数):
private static final String DATABASE_NAME = "bless_crm.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
//CursorFactory设置为null,使用默认值
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
要注意,并不是new DBHelper就创建了数据库,第一次创建表必须调用DBHelper的getWritableDatabase()或getReadableDatabase()方法。这个两个方法除了可以创建数据库以外,还可以更新数据库下数据表的信息,所以我建议每次打开Android应用实例化DBHelper时都调用下这个方法,这个不会对应用造成什么特殊影响。
下面是在主Activity上实例化DBHelper,启动Android应用,会首先执行这个Activity,所以在这个类里初始化SQLite数据库是最佳的。
public class MainActivity extends Activity{
DBHelper helper = null;
protected void onCreate(Bundle savedInstanceState) {
helper = new DBHelper(MainActivity.this);
//第一次使用时创建数据库
//后面使用时更新数据表信息
WritableDatabase();
}
}
注:最好是在onCreate方法中实例化DBHelper并调用getWritableDatabase()方法,如果在Activity构造函数或者其它地方调用getWritableDatabase()很可能会报错。我的理解是Context一定是在执行onCreate时才最完整,所以大家以后涉及到Context最好在onCreate中调用。
新增/更新数据表
完成数据库创建之后,就该做数据表的创建了。
接上面的DBHelper类,该类有两个必须实现的方法onCreate和onUpgrade,顾名思义,onCreate表示第一个数据库版本时执行的方法,onUpgrade表示随后每更新一次version版本就执行的方法。
之所以SQLiteOpenHelper构造函数中的version非常重要,就是因为它用来管理onCreate和onUpgrade的。我的理解是这样的:
当数据库创建时会设置当前数据库版本(比如我们第一次设置为version=1),这时Android就会同时执行onCreate方法,所以所有初始化表的SQL语句都得在onCreate中实现。
而假设你的Android应用有代码更新,数据库字段也需要更新,那么这时就要将更新字段的SQL写到onUpgrade中,同时要将version版本改变一下,这样SQLite就知道version有改变,去执行onUpgrade方法。
以前面SQL为例,我希望在最初版本创建一张user_info表,就可以这样写:
private static final String DATABASE_NAME = "bless_crm.db";
private static final int DATABASE_VERSION = 1;
public SQLHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
jquery下载的文件怎么使用 @Override
public void onCreate(SQLiteDatabase sqlitedatabase) {
String user_info = "CREATE TABLE IF NOT EXISTS user_info (id INTEGER PRIMARY KEY,name VARCHAR(99),sex INTEGER )";
SQL(user_info);
}
@Override
public void onUpgrade(SQLiteDatabase sqlitedatabase, int i, int j) {
iframe滚动条怎么设置
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论