数据储存之SQLite(单例模式)

1.sqlite数据库简介

在某些情况下,文件不是有效的
� 如果多线程数据访问是相关的
� 如果应用程序处理可能变化的复杂数据结构
� 等等
� 因此,Android带来了内置sqlite数据库支持
数据库对于创建它们的包套件是私有的
数据库不应该用来存贮文件
提示:在SDK中的samples/NotePad下可以找到关于如何使用数据库的例子
sqlite是一个轻量级的软件库
� 实现了一个完全适应严峻环境的数据库
� 原子量性
� 坚固性
� 独立性
� 耐久性
� 体积大小只用几千字节
� 一些sql的指令只是部分支持,例如:ALTER、TABLE
� 参阅http://www.sqlite.org 获取更多信息

2.单例模式简介

单例模式(singleton)顾名思义,就是只有一个实例。

  作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

单例模式在Java中的使用,Java中单例模式实例:

Java中的单例模式

  在java中,可以使用以下这种方式使用单例模式创建类的实例: 

 public class MyBean {  

private static MyBean instance = null;  

//构造方法权限为 private

private MyBean(){  

//do something 

  } 

//在程序中可以直接使用MyBean.getInstance()获得MyBean的实例

  public static synchronized MyBean getInstance(){  

if(instance == null){  

instance = new MyBean(); 

 } 

 return instance; 

  } 

 }


3.sqlite继承sqliteOpenHelper类单例模式的实现:


public class DBHelper extends sqliteOpenHelper {

private final static String DB_NAME="my_info";
private final static int VERSION =1;

private static DBHelper instance=null;
public static DBHelper getInstance(Context context){

if(instance==null){

instance=new DBHelper(context);
}

return instance;
}
private DBHelper(Context context){

super(context,DB_NAME,null,VERSION);

}

........

}


4.建表语句在onCreate()方法中的实现:

@Override
public void onCreate(sqliteDatabase db) {
// Todo Auto-generated method stub

//建表语句直接使用db.execsql(String sql)方法执行sql建表语句

String createTable="create table user(id integer primary key,name text,age integer);";
db.execsql(createTable);

}

5.sqlite增删改查的实现


public static void insertInfo(Context context,Info info) {
sqliteDatabase db=DBHelper.getInstance(context).getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",info.getName());
values.put("age",info.getAge());

db.insert("user",values);
db.close();
}
//删除信息
public static void deleteInfo(Context context,int id) {
sqliteDatabase db=DBHelper.getInstance(context).getWritableDatabase();

db.delete("user","id=" + id,null);
db.close();
}
//更新信息
public static void updateInfo(Context context,int id,info.getAge());
db.update("user",values,"id="+id,null);
db.close();
}


// 查找所有用户信息

public List<Info> queryAllInfo(Context context) {
sqliteDatabase db=DBHelper.getInstance(context).getWritableDatabase();
List list = new ArrayList<Info>();

Cursor cursor = db.query("user",null);
if (cursor.movetoFirst()) {

do {
int age = cursor.getInt(cursor.getColumnIndex("age"));
String name = cursor.getString(cursor.getColumnIndex("name"));
Info info=new Info();
info.setName(name);
info.setAge(age);
list.add(info);

} while (cursor.movetoNext());

}
db.close();
return list;

}









6.插入一条测试数据


点击按钮:

按钮的事件处理如下:

private OnClickListener listener=new OnClickListener(){

@Override
public void onClick(View v) {
// Todo Auto-generated method stub


Info info=new Info("Jun",21);
DBHelper.getInstance(ShowActivity.this).insertInfo(ShowActivity.this,info);
Toast.makeText(ShowActivity.this,"insert data success!",Toast.LENGTH_SHORT).show();

}};


数据库sqlite数据库中user表中的信息为:

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能