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表中的信息为:
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|