android 数据存储技术(1/4)androidSQLite数据库存储

来源:互联网 发布:数据离差标准化 编辑:程序博客网 时间:2024/06/16 17:27

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

特点:

面向资源有限的设备,

没有服务器进程,

所有数据存放在同一文件中跨平台,

可自由复制。


SQLiteOpenHelper 的子类,至少需要实现三个方法:

1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面展示下创建数据库所需用的三个类:

package com.lsj.icempus.db;public interface Dbtable {public static final String DB_NAME ="notes.db"; public static final int DB_VERSION = 1;//字段idpublic static final String NOTE_ID = "sid";//表名字public static final String NOTE_NAME = "note";//字段titlepublic static final String NOTE_TILE = "title";//字段内容public static final String  NOTE_NOTE  = "note";//字段时间public static final String  NOTE_DATA  = "data";//字段索引public static final int INDEX_ID = 0;public static final int INDEX_TITLE = 1;public static final int INDEX_NOTE = 2;public static final int INDEX_DATE = 3;//刪除表的调用sqlpublic static final String SQL_TABLE_DROP = String.format("DROP TABLE IF EXISTS %s;", DB_NAME);//创建表调用sqlpublic static final String SQL_TABLE_CREATE = new StringBuilder().append("CREATE TABLE IF NOT EXISTS ") .append(NOTE_NAME).append("(").append(NOTE_ID).append(" INTEGER PRIMARY KEY,").append(NOTE_TILE).append(" TEXT,").append(NOTE_NOTE).append(" TEXT,").append(NOTE_DATA).append(" INTEGER").append(");").toString();}
<span style="font-family: 宋体; text-indent: 2em;"></span>
<span style="font-family: 宋体; text-indent: 2em;">import android.content.Context;</span>
import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper; public class Mydbopenhelp implements Dbtable{<span style="white-space:pre"></span> <span style="white-space:pre"></span>private static GetSQLiteraw sqlraw = null ;<span style="white-space:pre"></span>private static SQLiteDatabase mdb = null;<span style="white-space:pre"></span>private static Mydbopenhelp mydbopenhelp=null;    private Mydbopenhelp(Context context){<span style="white-space:pre"></span>   if(sqlraw==null){<span style="white-space:pre"></span>   sqlraw = new GetSQLiteraw(context);<span style="white-space:pre"></span>   }<span style="white-space:pre"></span>   if(mdb == null){<span style="white-space:pre"></span>   mdb = sqlraw.getWritableDatabase();<span style="white-space:pre"></span>   }<span style="white-space:pre"></span>   if(mdb!=null&&mdb.isOpen()){<span style="white-space:pre"></span>   return;<span style="white-space:pre"></span>   }    }<span style="white-space:pre"></span>     public synchronized static Mydbopenhelp getInstance(Context context){    <span style="white-space:pre"></span>if(mydbopenhelp == null){    <span style="white-space:pre"></span>mydbopenhelp = new Mydbopenhelp(context);    <span style="white-space:pre"></span>}    <span style="white-space:pre"></span>return mydbopenhelp;    }    public SQLiteDatabase getdb(){    <span style="white-space:pre"></span>    <span style="white-space:pre"></span>return mdb;    }        public void close(){    <span style="white-space:pre"></span>sqlraw.close();    <span style="white-space:pre"></span>mdb.close();    }<span style="white-space:pre"></span> <span style="white-space:pre"></span> private class GetSQLiteraw extends SQLiteOpenHelper{<span style="white-space:pre"></span>public GetSQLiteraw(Context context) {<span style="white-space:pre"></span>super(context, DB_NAME, null, DB_VERSION);<span style="white-space:pre"></span>}         //oncreate<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void onCreate(SQLiteDatabase db) {<span style="white-space:pre"></span>db.execSQL(SQL_TABLE_CREATE);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {<span style="white-space:pre"></span><span style="white-space:pre"></span>}     }  }            
public class NoteDao implements Dbtable {private SQLiteDatabase mydDatabase = null;public NoteDao(Context context) {mydDatabase = Mydbopenhelp.getInstance(context).getdb();System.out.println("数据库链接成功");if(mydDatabase == null){System.out.println("数据库链接失败");} }public long add(MyStudy mStudy){long id = -1;if(mStudy == null){return id;}else{ContentValues values = new ContentValues();values.put(NOTE_TILE,mStudy.getLocaname());values.put(NOTE_DATA,mStudy.getData());values.put(NOTE_NOTE,mStudy.getNameitem());id =mydDatabase.insert(NOTE_NAME,null, values);}return id;} public int udpate(int id,MyStudy mStudy){int updateCount = 0;if(id<0||mStudy==null){return updateCount;}String whereClause = String.format("%s=?", Dbtable.NOTE_ID);String[] whereArgs = new String[] {String.valueOf(id)};//入库值ContentValues values = new ContentValues();values.put(NOTE_TILE,mStudy.getLocaname());values.put(NOTE_DATA,mStudy.getData());values.put(NOTE_NOTE,mStudy.getNameitem());updateCount = mydDatabase.update(Dbtable.NOTE_NAME, values, whereClause, whereArgs);return updateCount;}public MyStudy query(int id){if(id<0){return null;}MyStudy study = new MyStudy();String selection = String.format(Locale.US, "%s='%s'", Dbtable.NOTE_ID, id);Cursor cursor = mydDatabase.query(Dbtable.NOTE_NAME, null, selection, null, null, null, null);if(cursor!=null&&cursor.moveToFirst()){int noteid = cursor.getInt(INDEX_ID);String title = cursor.getString(INDEX_TITLE);String content = cursor.getString(INDEX_NOTE);long date = cursor.getLong(INDEX_DATE);//赋值study.setSetLocapohotid(noteid);study.setLocaname(title);study.setNameitem(content);study.setData(date);}if(cursor!=null){cursor.close();}return study;}public int delete(int id){int delCount = 0;//参数检查if (id < 0) {return delCount;}String whereClause = String.format("%s=?", Dbtable.NOTE_ID);String[] whereArgs = new String[] {String.valueOf(id)};delCount =mydDatabase.delete(Dbtable.NOTE_NAME, whereClause, whereArgs);return delCount;}public ArrayList<MyStudy> queryALL(){ArrayList<MyStudy> studylist = new ArrayList<MyStudy>();// 查询条件String order = Dbtable.NOTE_DATA +" DESC";// 获取游标Cursor cursor = null;try {cursor =mydDatabase.query(Dbtable.NOTE_NAME, null,  null,  null,  null,  null, order);if(cursor!=null&&cursor.moveToFirst()){do {int id = cursor.getInt(INDEX_ID);String title = cursor.getString(INDEX_TITLE);String content = cursor.getString(INDEX_NOTE);long date = cursor.getLong(INDEX_DATE);//赋值MyStudy  study = new MyStudy();study.setSetLocapohotid(id);study.setLocaname(title);study.setNameitem(content);study.setData(date);// 添加到集合中studylist.add(study);} while (cursor.moveToNext());}} catch (Exception e) {if(cursor!=null){cursor.close();}System.out.println("查询失败");e.printStackTrace();}return studylist;}}
通过以上三个类就可以实现数据库的创建和操作所有操作只需要在第三个类些方法调用即可并且可以数据库的批量创建(就是简单的复制粘贴啦只要改改名字就完了)。。



0 0
原创粉丝点击