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 学习随笔四(数据库存储)的更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  5. [Android]Android数据的四种存储方式

    存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...

  6. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  7. [转][Android]Android数据的四种存储方式

    android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...

  8. 五、Android学习第四天补充——Android的常用控件(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...

  9. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

随机推荐

  1. imx6 lvds 代码分析

    查看imx6 kernel中lvds设备和驱动的初始化过程. 相关文档: arm/arm/mach-mx6/board-mx6q_sabresd.c kernel/drivers/video/mxc/ ...

  2. SwipeRefreshLayout实现上拉加载下拉刷新

    package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...

  3. Android --账户注销

    参考博客:android如何实现注销功能 Intent logoutIntent=new Intent(SettingActivity.this,LoginActivity.class); //在执行 ...

  4. Jboss消息 异常

    org.jboss.mq.SpyJMSException: Could not update message: 1 msg=13 hard STORED PERSISTENT queue=QUEUE. ...

  5. nsstring打印结构体

    // //  main.m //  09-常用结构体 // //  Created by apple on 14-3-20. //  Copyright (c) 2014年 apple. All ri ...

  6. Windows下MongoDB安装与PHP扩展

    MongoDB是什么就不再累述了,下面只写MongoDB安装与PHP扩展的方法. 一,安装准备 MongoDB 如果网速慢,可以到MongoDB中文社区的百度网盘下载,密码3gun.(根据你的操作系统 ...

  7. MAX(A,B)

    MAX(A,B)  可以把x,或者y的变量扔进去比较,会自动放出比较结果,这样就避免的三目运算.

  8. CheckBox的用法

    if (window.pageConfig["IsCommend"] == "True") {      $("#IsCommend").v ...

  9. Groupon面经Prepare: Max Cycle Length

    题目是遇到偶数/2,遇到奇数 *3 + 1的题目,然后找一个range内所有数字的max cycle length.对于一个数字,比如说44,按照题目的公式不停计算,过程是 44, 22, 11, 8 ...

  10. Leetcode: Word Pattern II

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...