SQLite数据库(sqliteexpert工具),sqlite数据库是轻量级数据库,对数据类型要求不是很严格,在数据库中处理是按verchar类型处理,一般定义表字段时还是要求严格按照数据类型定义,方便代码阅读。
- 创建数据库
基于android.database.sqlite.SQLiteOpenHelper创建MyOpenHelper,调用SQLiteDatabase db = oh.getWritableDatabase()方法创建数据库,数据库创建后再调用此方法不会再创建数据库,数据库创建只会执行一次,除非升级数据库(系统根据版本号判断)
-----------------------------------------------------------
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context, String name, CursorFactory factory,
int version) {
//arg0:上下文
//arg1:数据库文件名
//arg2:游标工厂,游标等同于结果集,传NULL使用默认工厂
//arg3:版本号不能小于1,用于升级
super(context, name, factory, version);
}
//创建数据库时调用
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("数据库创建");
}
//升级数据库调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("数据库升级");
}
}
------------------------------------------------------------------------------------------------
为防止在调用时写错数据库名、版本号,可以写死数据库名、版本号
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context) {//本来是四个参数,只用一个参数,其他参数不用传递
//arg0:上下文
//arg1:数据库文件名
//arg2:游标工厂,游标等同于结果集,传NULL使用默认工厂
//arg3:版本号不能小于1,用于升级
super(context, "people.db", null, 1);
}
-------------------------------------------------------------------------------------------------
public class Test extends AndroidTestCase {
public void test(){
//获取虚拟上下文
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//如果数据库不存在,先创建数据库,再打开;否则直接打开数据库
SQLiteDatabase db = oh.getWritableDatabase();
}
}
-------------------------------------------------------------------------------------------------------
- 创建表(在创建数据库时创建表)
//创建数据库时调用
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person(_id integer primary key autoincrement,name char(10),phone char(20),salary integer(10))";
//创建表
db.execSQL(sql);
}
- 插入数据
public class Test extends AndroidTestCase {
public void test(){
//获取虚拟上下文
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
//如果数据库不存在,先创建数据库,再打开;否则直接打开数据库
SQLiteDatabase db = oh.getWritableDatabase();
}
public void insert(){
MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
SQLiteDatabase db = oh.getWritableDatabase();
//<!-- $s表示该占位符要求传入字符串,$d表示该占位符要求传入整数 -->
String sql=String.format("insert into person(name,phone,salary)values(%1$s,%2$d,%3$d)","春晓",138438,13000);
db.execSQL(sql);
//或者用如下
db.execSQL("insert into person(name,phone,salary)values(?,?,?)", new Object[]{"春晓",138438,13000});
db.close();
}
}
- 删除、修改、查询数据(结构调整)
--------------------------------------------------------------------------------------------------------------
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context) {
//arg0:上下文
//arg1:数据库文件名
//arg2:游标工厂,游标等同于结果集,传NULL使用默认工厂
//arg3:版本号不能小于1,用于升级
super(context, "people.db", null, 1);
}
//创建数据库时调用
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person(_id integer primary key autoincrement,name char(10),phone char(20),salary integer(10))";
//创建表
db.execSQL(sql);
}
//升级数据库调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("数据库升级");
}
}
-----------------------------------------------------------------------------------------------------------------------------------
public class Test extends AndroidTestCase {
private MyOpenHelper oh;//不能在此NEW此对象,此时测试框架还没有创建,无法提供虚拟上下文
private SQLiteDatabase db;
//测试方法执行之前先执行SETUP
@Override
protected void setUp() throws Exception {
super.setUp();
oh = new MyOpenHelper(getContext());//获取虚拟上下文
//如果数据库不存在,先创建数据库,再打开;否则直接打开数据库
db = oh.getWritableDatabase();
}
//在测试结束之后执行
@Override
protected void tearDown() throws Exception {
super.tearDown();
db.close();
}
public void insert(){
//<!-- $s表示该占位符要求传入字符串,$d表示该占位符要求传入整数 -->
String sql=String.format("insert into person(name,phone,salary)values(%1$s,%2$d,%3$d)","春晓",138438,13000);
db.execSQL(sql);
//或者用如下
db.execSQL("insert into person(name,phone,salary)values(?,?,?)", new Object[]{"春晓",138438,13000});
}
public void delete(){
db.execSQL("delete from person where name=?", new Object[]{"春晓"});
}
public void update(){
db.execSQL("update person set salary=? where name=?", new Object[]{13200,"春晓"});
}
public void select(){
Cursor cursor = db.rawQuery("select * from person", null);
//把指针移动到下一行
while(cursor.moveToNext()){
//先通过列名获取列索引,然后再获取该列的内容
String name = cursor.getString(cursor.getColumnIndex("name"));
}
}
--------------------------------------------------------------------------------------------------------
在实际数据库操作中,基本不用上述方法,而是用谷歌提供的API操作
public void insertApi(){
ContentValues values = new ContentValues();
//字段名,值
values.put("name","杨松");
values.put("phone","138888");
values.put("salary","130201");
//返回值-1,操作失败,第二个参数是values 为空时,给哪个字段插入NULL
long l=db.insert("person", null, values);
}
int i = db.delete("person", "_id=?", new String[]{"6"});
//被修改字段修改后的值
values.put("name","鲁智深");
int c = db.update("person", values, "_id=?", new String[]{"5"});
//表名,字段名(NULL表示所有字段),查询的WHERE条件,WHERE条件的占位符,分组,,排序,分页
//Cursor cursor=db.query("person", new String[]{"name","phone","salary"}, "_id=?", new String[]{"5"}, null, null, null);
Cursor cursor=db.query("person", null, null, null, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
int salary = cursor.getInt(cursor.getColumnIndex("salary"));
}
- 数据库事务操作
public void transaction(){
try {
//开启事务
db.beginTransaction();
ContentValues values=new ContentValues();
values.put("salary", 13199);
db.update("person", values, "name=?", new String[]{"杨松"});
values.clear();
values.put("salary", 13202);
db.update("person", values, "name=?", new String[]{"春晓"});
//设置事务执行成功,提交时如果这行代码没有执行过,就会回滚
db.setTransactionSuccessful();
} finally {
//关闭事务,提交数据
db.endTransaction();
}
}
android 学习随笔四(数据库存储)的更多相关文章
-
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的. ...
-
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
-
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider
ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...
-
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
-
[Android]Android数据的四种存储方式
存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...
-
(转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
-
[转][Android]Android数据的四种存储方式
android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...
-
五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
-
四、Android学习第四天——JAVA基础回顾(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...
随机推荐
-
Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
-
Android中的AlertDialog使用示例二(普通选项对话框)
在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...
-
ShareSDK 集成 Google+ 登录 400. Error:redirect_uri_mismatch 和 Error Domain=ShareSDKErrorDomain Code=204
最近在集成ShareSDK中 Google+ 登录授权时候 出现了如下几个问题 1. 400. Error:redirect_uri_mismatch 出现这种情况, redirectUri应 ...
-
opencv 小任务1 图片的缩放
#include <opencv2/opencv.hpp> using namespace std; int main() { double fScale = 0.2; //缩放倍数 Cv ...
-
LINUX测试环境部署mysql(三)
安装配置mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安 ...
-
CentOS普通用户添加sudo权限
1. 进入超级用户模式 su root 2. 添加sudoers文件写权限. chmod u+w /etc/sudoers 3.添加username到sudoers文件里(参考"root A ...
-
find一些常用参数的一些常用实例和一些具体用法和注意事项。
find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用. 可以使用某种文件名模式来匹配 ...
-
FireFox插件
Firebug和YSlow就不说了,太常用了,开发必备.
-
hadoop异常:java.lang.RuntimeException: java.lang.NoSuchMethodException
出现异常的程序大致框架是这样的: public class getMaxTemperature extends Configured implements Tool { ... class MaxTe ...
- 第11章:DOM扩展