第一步继承 SQLiteOpenHelper 在构造方法里面 创建数据库这个类提供了创建 数据库 、数据表、更新数据表结构的功能,
第二步,创建数据表,我选择在onCreate()方法里面
第三步 更新表的结构, 需要特别注意,覆盖一个原本安装的程序时并不会改变旧数据库的表结构,此时如果增大数据库版本号
就能调用onUpgrade()方法来重新建立数据表,具体实施看下面的代码。
public class DBHelper extends SQLiteOpenHelper { // 数据库名 private final static String DATABASE_NAME = "health"; // 数据库版本 private final static int DATABASE_VERSION = 1; // 用户表名 private final static String TABLE_NAME = "user"; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * * 当第一次创建数据库时调用此方法 * * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase) * @date: Created on 2012-7-4 下午1:36:16 */ @Override public void onCreate(SQLiteDatabase db) { // 用户表 String sql = "CREATE TABLE USER (_ID INTEGER PRIMARY KEY AUTOINCREMENT,UID text,NAME text,UDEFAULT text,UIAMGE text,UDUSER text)"; db.execSQL(sql); } /** * * 当对数据库进行更新修改新增操作时 调用此方法 * * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, * int, int) * @date: Created on 2012-7-4 下午1:36:01 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql = " DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } }
查询数据
SQLiteDatabase db = dbHelper.getReadableDatabase(); cursor = db.rawQuery("select * from advice where userId = ? and signId = ? limit " + startPosition + ",20",new String[] { userId, signId });时间查询
查询出来的时间字段数据加一秒
cursor = db.rawQuery("select datetime(time,'+1 seconds') time from waf where attentionId = ? order by time desc",new String[] { attentionId });查询两个时间段之间的数据sb.append("select * from BP_DATA where PersonID = "+ personId+ " and AddDate between datetime('"+ begin+ "') and datetime('" + end + "') ORDER BY AddDate DESC ");
插入数据 建议用数据库直接定义好的方法,和查询数据比较不用写SQL语句非常方便
db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("content", advice.advice); db.insert("advice", null, values);
更新数据db = dbHelper.getWritableDatabase(); db.execSQL("update advice set flag=? where userId = ? and signId = ? and time = ?", new Object[] { advice.flag, userId, advice.signId, advice.adviceDate });删除数据db.delete(SqliteHelper. TB_NAME,UserInfo. USERID + "=?", new String[]{UserId})清空数据库db.execSQL("delete from advice");
删除数据库String sql = " DROP TABLE IF EXISTS " + TABLE_NAME;
最后请不要忘记使用完数据库之后一定要关闭游标和数据库/** * * 游标 数据库的关闭操作 * * @see android.app.Activity#onDestroy() * @author: 刘斌 - [email protected] * @date: Created on 2012-6-25 下午3:24:38 */ public void closeDB(Cursor cursor, SQLiteDatabase db) { if (cursor != null) { cursor.close(); cursor = null; } if (db != null && db.isOpen()) { db.close(); db = null; } }
一个完整操作的代码public synchronized void updateAdvice(Advice advice, String userId) { try { db = dbHelper.getWritableDatabase(); db.execSQL("update advice set flag=? where userId = ? and signId = ? and time = ?", new Object[] { advice.flag, userId, advice.signId, advice.adviceDate }); } catch (Exception e) { e.printStackTrace(); } finally { closeDB(null, db); } }
2.SD卡存储
sd卡中前面加点.的文件是隐藏文件系统缓存路径Environment.getDataDirectory()+ "/data/