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

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;
	//字段id
	public static final String NOTE_ID = "sid";
	//表名字
	public static final String NOTE_NAME = "note";
	//字段title
	public 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;
	//刪除表的调用sql
	public static final String SQL_TABLE_DROP = String.format("DROP TABLE IF EXISTS %s;", DB_NAME);
	
	//创建表调用sql
	public 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;
		
	}
	
}
通过以上三个类就可以实现数据库的创建和操作所有操作只需要在第三个类些方法调用即可并且可以数据库的批量创建(就是简单的复制粘贴啦只要改改名字就完了)。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值