第四章 访问SQLite数据库
访问SQLite数据库:
自定义类 继承SQLiteOpenHelper 覆写2个抽象方法
onCreate方法------数据库第一次创建时执行
onUpgrade方法-----数据库版本号发生改变时执行
OpenHelper所实例化出来的对象来获取SQLiteDatabase对象
.getWritableDatabase() 可读可写
.getReadableDatabase() 只读
执行Sql语句:db.execSQL(Sql语句);
数据库的默认保存路径:data/data/<包名>/databases/....
数据库的关闭操做 一般在Activity的onDestory中关闭。
增:使用db.insert(表名,null,ContentValues);
向contentValues.put(KEY,VALUE);
KEY字段名,VALUE即插入该字段中的数据
向主键插入null用:contentValues.putNull(主键);
返回值:行号!不是_id主键!
查:使用db.query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having, String orderBy);
第一个参数:表名
第二个参数:所要查询的字段数组 如果查询所有则为null
第三个参数:相当于where之后的过滤条件 值用?代替
第四个参数:数组中的每一个元素与之前的?一一对应
。
关于Cursor的方法:
有关Cursor指针移动的方法:
movetoFirst —- 将Cursor移到第一条记录
moveToLast —-- 将Cursor移到最后一条记录
moveToPrevious --— 将Cursor向前移动一个位置
moveToNext —-- 将Cursor向后移动一个位置
moveToPosition —-- 将Cursor移动到指定的位置
有关获取数据的方法:
getCount — 返回结果集中的记录总数
getInt/getString/getFloat() …… — 返回当前记录中指定字段的值(对应字段应为int/String/Float等类型)里面传的参数是我所要查询的字段索引
getColumnCount — 返回当前记录的字段数量
getColumnName — 返回当前记录的字段名称
有关判断Cursor位置的方法:
isBeforeFirst — 判断Cursor是否指向空白位
isAfterLast — 判断Cursor是否指向最后一条记录之后
isClosed — 判断Cursor是否关闭
isFirst — 判断Cursor是否指向第一条记录
isLast — 判断Cursor是否指向最后一条记录
isNull — 判断指定位置的值是否为null
游标使用完毕以后要做关闭操作
改:db.update(String table, ContentValues values, String whereClause, String[] whereArgs)
第一个参数:表名
第二个参数:要修改的字段名和值
第三个参数:过滤条件
第四个参数:数组中的每一个元素与之前的?一一对应
删:db.delete(String table, String whereClause, String[] whereArgs)
第一个参数:表名
第二个参数:过滤条件
第三个参数:数组中的每一个元素与之前的?一一对应
案例代码:
1.在package com.example.administrator.dbdemo.model创建MusicDBHelper extends SQLiteOpenHelper
1 public class MusicDBHelper extends SQLiteOpenHelper 2 { 3 private static final String DATABASE_NAME = "music.db"; 4 private static final int VERSION = 1; 5 6 /** 7 * 构造器 8 * 9 * @param context 10 * @param name 11 * @param factory 游标工厂,通常null 12 * @param version 13 */ 14 public MusicDBHelper(Context context) 15 { 16 super(context, DATABASE_NAME, null, VERSION); 17 } 18 19 /** 20 * 创建数据库时调用本方法(只有没有该数据库时才运行) 21 * @param db 22 */ 23 @Override 24 public void onCreate(SQLiteDatabase db) 25 { 26 String sqlCreateTable = 27 "create table " + CommonData.TABLE_NAME + "(" + 28 CommonData.FIELD_ID + " integer primary key autoincrement, " + 29 CommonData.FIELD_NAME + " char(20), " + 30 CommonData.FIELD_PLAYER + " char(20), " + 31 CommonData.FIELD_PATH + " char(80) " + 32 ")"; 33 db.execSQL(sqlCreateTable); 34 Log.e("MusicDBHelper", "sqlCreateTable"); 35 36 String[] sqlInsert = 37 { 38 " values(1,'传奇','王菲','chuanqi.mp3')", 39 " values(2,'小酒窝','蔡卓妍','xiaojiuwo.mp3')", 40 " values(3,'分吹麦浪','李健','fengchuimailang.mp3')", 41 " values(4,'荷塘月色','凤凰传奇','hetangyuese.mp3')", 42 " values(5,'蓝莲花','许巍','lanlianhua.mp3')", 43 " values(6,'兰亭序','周杰伦','lantingxu.mp3')", 44 }; 45 for(String sql : sqlInsert) 46 { 47 db.execSQL("insert into " + CommonData.TABLE_NAME + sql); 48 } 49 Log.e("MusicDBHelper", "sqlInsert"); 50 } 51 52 /** 53 * 更新数据库时调用本方法 54 * @param db 55 * @param oldVersion 56 * @param newVersion 57 */ 58 @Override 59 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 60 { 61 Log.e("MusicDBHelper", "onUpgrade"); 62 } 63 }
2.在package com.example.administrator.dbdemo.model创建MusicModel.java
1 public class MusicModel 2 { 3 private SQLiteOpenHelper dbHelper; 4 private SQLiteDatabase database; 5 6 /** 7 * 通过构造器得到dbHelper 8 * @param context 9 */ 10 public MusicModel(Context context) 11 { 12 this.dbHelper = new MusicDBHelper(context); 13 } 14 15 /** 16 * 创建database数据库对象(打开database数据库对象) 17 */ 18 public void openDatabase() 19 { 20 if (database != null) 21 { 22 return; 23 } 24 database = dbHelper.getWritableDatabase(); 25 } 26 27 /** 28 * 关闭database 29 */ 30 public void closeDatabase() 31 { 32 database.close(); 33 database = null; 34 } 35 36 /** 37 * 插入music数据 38 * 39 * @param music 40 */ 41 public void insertDB(Music music) 42 { 43 //values---对于插入记录数据, 需通过ContentValues对象来提供 44 ContentValues values = new ContentValues(); 45 //在values中放入数据 46 values.put(CommonData.FIELD_ID, music.getId()); 47 values.put(CommonData.FIELD_NAME, music.getName()); 48 values.put(CommonData.FIELD_PLAYER, music.getPlayer()); 49 values.put(CommonData.FIELD_PATH, music.getFilepath()); 50 //将数据插入数据库 51 //参数: 表格名 通常为null(如果所插入的记录都为null) values 52 database.insert(CommonData.TABLE_NAME, null, values); 53 } 54 55 /** 56 * 查询 query 疑问n 57 * 58 * @param columns 59 * @param selection 60 * @param selectionArgs 61 * @return list 62 */ 63 public List<Music> queryDB(String[] columns, String selection, String[] selectionArgs) 64 { 65 String groupBy = null, having = null, orderBy = null; 66 //参数: 表名,查询要返回的列,查询条件(对应SQL where语句),指定查询条件中参数的值........ 67 Cursor cursor = database.query( //cursor 游标 68 CommonData.TABLE_NAME, columns, selection, selectionArgs, groupBy, having, orderBy 69 ); 70 List<Music> list = new ArrayList<Music>(); 71 //通过cursor对象获取查询对象的值 72 if (cursor != null) 73 { 74 while (cursor.moveToNext()) 75 { 76 Music music = new Music( 77 cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3)); 78 list.add(music); 79 } 80 cursor.close();//TODO 关闭游标 81 } 82 return list; 83 } 84 85 /** 86 * 修改(更新)表格内容 87 * 88 * @param music 89 */ 90 public void updateDBById(Music music) 91 { 92 if (music.getId() <= 0) 93 { 94 return; 95 } 96 ContentValues values = new ContentValues(); 97 if (music.getName() != null) 98 { 99 values.put(CommonData.FIELD_NAME, music.getName()); 100 } 101 if (music.getPlayer() != null) 102 { 103 values.put(CommonData.FIELD_PLAYER, music.getPlayer()); 104 } 105 if (music.getFilepath() != null) 106 { 107 values.put(CommonData.FIELD_PATH, music.getFilepath()); 108 } 109 110 String where = CommonData.FIELD_ID + "=?"; 111 String[] args = {"" + music.getId()}; 112 //参数: 1.表格名 2.新的记录数据values(ContentValues) 3.过滤条件 4.过滤条件中站位符的值 113 database.update(CommonData.TABLE_NAME, values, where, args); 114 } 115 116 /** 117 * 删除表格中的数据 118 * @param id 119 */ 120 public void daleteDBById(int id) 121 { 122 if (id <= 0) 123 { 124 return; 125 } 126 String where = CommonData.FIELD_ID + "=?"; 127 String[] args = {"" + id}; 128 //参数: 表名 过滤条件 过滤条件中参数的值 129 database.delete(CommonData.TABLE_NAME, where, args); 130 } 131 132 /** 133 * 获取表格中有多少条记录 134 * @return count 135 */ 136 public int getRowCount()//row 行n 137 { 138 String sqlStr = "select * from " + CommonData.TABLE_NAME; 139 //TODO rawQuery()方法 raw 未加工的adj 140 Cursor cursor = database.rawQuery(sqlStr, null); 141 int count = cursor.getCount(); 142 cursor.close(); 143 return count; 144 } 145 }
3.编辑activity中的代码,通过调用new MusicModel 对象,调用其方法完成页面显示内容
1 public class MainActivity extends Activity 2 { 3 private MusicModel model; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) 7 { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_main); 10 11 model = new MusicModel(this); 12 initView(); 13 initData(); 14 } 15 16 /** 17 * 活动开始时打开数据库 TODO 18 */ 19 @Override 20 protected void onStart() 21 { 22 super.onStart(); 23 model.openDatabase(); 24 } 25 26 /** 27 * huodo结束时关闭数据库 TODO 28 */ 29 @Override 30 protected void onStop() 31 { 32 super.onStop(); 33 model.closeDatabase(); 34 } 35 36 private void initData() 37 { 38 //............ 39 } 40 41 private void initView() 42 { 43 //............ 44 } 45 }
posted on 2015-12-05 20:26 starFarming 阅读(255) 评论(0) 编辑 收藏 举报