版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android中每一个数据库对创建它的应用程序包套件来说都是私有的,默认情况下其他应用程序无法直接访问此私有数据库。所有的数据库文件存放在手机中的/data/data/package_name/databases路径下,以下是常用的与数据库相关的函数: 返回值函数备注static SQLiteDatabasecreate(SQLiteDatabase.CursorFactory factory)创建一个数据库 factory:可选的数据库游标工厂类,当查询(query)被提交时,该对象会被调用来实例化一个游标。static SQLiteDatabaseopenDatabase(String p
2、ath,SQLiteDatabase.CursorFactory factory,int flags)根据提供的模式打开一个数据库 path:打开或创建的数据库文件 factory:可选的数据库游标工厂类,当查询(query)被提交时,该对象会被调用来实例化一个游标。默认为null。 flags:控制数据库的访问模式。主要有以下几种模式: l OPEN_READWRITE l OPEN_READONLY l CREATE_IF_NECESSARY l NO_LOCALIZED_COLLATORSstatic SQLiteDatabaseopenOrCreateDatabase(File fil
3、e, SQLiteDatabase.CursorFactory factory)等同于openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY)static SQLiteDatabaseopenOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)等同于openDatabase(path,factory, CREATE_IF_NECESSARY)voidclose()关闭数据库booleandeleteDatabase(String name)删除指定的数据
4、库 name:要关闭的数据库的名字示例代码如下: /创建数据库 SQLiteDatabase mydataBase=SQLiteDatabase.create(new CursorFactory() /工厂类,一个可选工厂类,当查询时调用来实例化一个游标 Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) / TODO Auto-generated method stub return null; ); /
5、创建或打开数据库 SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db", MODE_PRIVATE, new CursorFactory() /创建新的数据库,名称myDatabase,模式MODE_PRIVATE,可选的游标工厂类 Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) / TODO Auto
6、-generated method stub return null; ); SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db",MODE_PRIVATE,null); /关闭数据库 myDataBase.close(); /删除指定名称的数据库 this.deleteDatabase(“myDatabase.db”);在对数据库中的表进行相关操作时,可以使用非查询的execSQL(String sql)来执行。示例代码如下: String CREATE_TABLE = “create ta
7、ble table1 (_id integer primary key autoincrement,number integer,data text)”; /创建表 myDataBase.execSQL(CREATE_TABLE); Android提供了非SQL指令的对数据表进行操作的方法,以下表格是一些常用方法: 返回值函数备注longinsert(String table, String nullColumnHack, ContentValues values)向表中插入一条数据 table:想要插入数据的表名 nullColumnHack:SQL不允许插入空行,初始化值为空时,这一列将会
8、被显示地赋一个null值 values:要插入的值,具体解释见表格后的解释intdelete(String table, String whereClause, String whereArgs)从表中删除一行数据 table:想要删除数据的表名 whereClause:可选的where子句,如果其值为null,将会删除所有的行。 whereArgs:当在whereClause中包含”?”时,如果whereArgs的值不为null,则这个数组中的值将依次替换whereClause中出现的”?”Cursorquery(String table, String columns, String se
9、lection, String selectionArgs, String groupBy, String having, String orderBy, String limit)查询数据表 table:要查询数据的表名 columns:要返回的列的列名数组 selection:可选的where子句 ,如果其值为null,将会返回所有的行 selectionArgs:当在selection中包含”?”时,如果selectionArgs的值不为null,则这个数组中的值将依次替换selection中出现的”?” groupBy:可选的group by子句,如果其值为null,将不会对行进行分组
10、 having:可选的having子句,如果其值为null,将会包含所有的分组 orderBy:可选的order by子句,如果其值为null,将会使用默认的排序规则 limit:可选的limit子句,如果其值为null,将不会包含limit子句 关于返回值类型Cursor将在表格后面进行解释intupdate(String table, ContentValues values, String whereClause, String whereArgs)修改表中的数据 table:想要修改数据的表名 values:要更新的值,具体解释见表格后的解释 whereClause:可选的where子
11、句,如果其值为null,将会修改所有的行。 whereArgs:当在whereClause中包含”?”时,如果whereArgs的值不为null,则这个数组中的值将依次替换whereClause中出现的”?”ContentValues主要是存放表中的数据段,以及其对应的值,与Hashtable一样采用名值对的形式存储,但是它存储的名值对中,名是一个String类型,值是基本数据类型。其使用示例如下: ContentValues args = new ContentValues(); args.put(KEY_TITLE, title); args.put(KEY_BODY, body); my
12、DataBase.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null); _idsomeNumber18 210 32Cursor类常见的方法如下: 返回值函数备注booleanmove(int offset)以当前位置为参考,将Cursor移动指定数目的位置(相对位置)booleanmoveToPosition(int position)将Cursor移动到指定位置(绝对位置)booleanmoveToNext()将Cursor向前移动一个位置booleanmoveToLast
13、()将Cursor向后移动一个位置booleanmoveToFirst()将Cursor移动到第一行booleanisBeforeFirst()返回Cursor是否指向第一项数据之前booleanisAfterLast()返回Cursor是否指向最后一项数据之后booleanisClosed()返回Cursor是否关闭booleanisFirst()返回Cursor是否指向第一项数据booleanisLast()返回Cursor是否指向最后一项数据booleanisNull(int columnIndex)返回指定位置的值是否为nullintgetCount()返回总的项目总数intgetIn
14、t(int columnIndex)返回指定列中的数据的int型表示intgetColumnIndex(String columnName)按给定的列的名字返回列的索引值,如果不存在则返回 -1要创建一个Cursor(游标),必须执行一个查询,通过SQL使用rawQuery()方法或是更精心的query()方法,而不能使用execSQL(String sql)方法。以下为Cursor的使用示例: Cursor cur=myDataBase.rawQuery("select * from test", null); if(cur!=null)/游标不为空 /返回给定名称的列的
15、基于0开始的index,如果该属性列不存在则返回-1 /通过它们的index来检索属性值 int numColumn=cur.getColumnIndex("someNumber"); if(cur.moveToFirst() /cur.moveToFirst()让游标指向第一行,如果游标指向第一行,则返回true do int num=cur.getInt(numColumn);/获得当前行该属性的值 /*Cursor提供了不同的方法来回索不同的数据类型,例如getInt(int index)/getString(int index)等等*/ /*做一些事情*/ whil
16、e (cur.moveToNext(); /*游标移动到下一行,如果游标已经到达结果集中的最后,即没有行可以移动时,则返回false*/ /其他可能移动的是 moveToPrevious() 和moveToFirst()方法 在实际使用的时候,通常都要封装一个继承SQLiteOpenHelper类的数据库操作类。SQLiteOpenHelper类是一个抽象的辅助类,主要用来生成一个数据库并对数据库的版本进行管理,在SQLiteOpenHelper类的构造方法中分别传入Context、数据库名称,CursorFactory(一般传入null,否则为默认数据库),数据库版本号(不能为负数)。在SQ
17、LiteOpenHelper中首先执行的是onCreate方法(当数据库第一次创建时),一般在这个方法里生成数据表。要注意的是,在构造函数时并没有真正创建数据库,而是在调用getWriteableDatabase()或者getReadableDatabase()方法的时候系统才会真正创建数据库,如果当时系统中不存在这个数据库,系统会自动生成一个数据库,然后返回SQLiteDatabase对象。在继承这个类的时候,要实现里面的3个方法,其中前两个方法是必须重写的。见如下表格: 返回值函数备注public voidonCreate(SQLiteDatabase db)在数据库第一次生成时会调用这个
18、方法,一般我们在这个方法里生成数据表public voidonUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)当数据库需要升级时,系统会自动调用这个方法,一般我们在这个方法里删除数据表,并建立新的数据表,并根据实际需求做其他的操作public voidonOpen(SQLiteDatabase db)这是打开数据库时的回调函数,一般不会用到以下示例代码详细给出一封装好的数据库操作类: public class MyDbHelper public static final String KEY_TITLE = "title
19、" /数据表字段 public static final String KEY_BODY = "body" /数据表字段 public static final String KEY_ROWID = "_id" /数据表字段 private DatabaseHelper mDbHelper; /SQLiteOpenHelper实例对象 private SQLiteDatabase mDb; /数据库实例对象 /数据表创建语句 private static final String DATABASE_CREATE = "cr
20、eate table notes (_id integer primary key autoincrement, " + "title text not null, body text not null);" private static final String DATABASE_NAME = "data" /数据库名 private static final String DATABASE_TABLE = "notes" /数据库表名 private static final int DATABASE_VER
21、SION = 2; /数据库版本号 private final Context mCtx; /上下文实例 private static class DatabaseHelper extends SQLiteOpenHelper /数据库辅助类 DatabaseHelper(Context context) super(context, DATABASE_NAME, null, DATABASE_VERSION); Override public void onCreate(SQLiteDatabase db) db.execSQL(DATABASE_CREATE); O
22、verride public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) db.execSQL("DROP TABLE IF EXISTS notes");/* * Constructor - takes the context to allow the database to be opened/created * * param ctx the Context within which to work */ public MyDbHelper(Context ctx) this.mC
23、tx = ctx; /* * Open the notes database. If it cannot be opened, try to create a new instance of the database. * If it cannot be created, throw an exception to signal the failure * * return this (self reference, allowing this to be chained in an initialization call) * throws SQLException if th
24、e database could be neither opened or created */ public MyDbHelper open() throws SQLException mDbHelper = new DatabaseHelper(mCtx); mDb = mDbHelper.getWritableDatabase(); return this; public void close() mDbHelper.close(); /* * Create a new note using the title and body provided. If the
25、 note is successfully created * return the new rowId for that note, otherwise return a -1 to indicate failure. * * param title the title of the note * param body the body of the note * return rowId or -1 if failed */ public long createNote(String title, String body) ContentValues initialValues = new
26、 ContentValues(); initialValues.put(KEY_TITLE, title); initialValues.put(KEY_BODY, body); return mDb.insert(DATABASE_TABLE, null, initialValues); /* * Delete the note with the given rowId * * param rowId id of note to delete * return true if deleted, false otherwise */ public boolean deleteNo
27、te(long rowId) return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; /* * Return a Cursor over the list of all notes in the database * * return Cursor over all notes */ public Cursor fetchAllNotes() return mDb.query(DATABASE_TABLE, new String KEY_ROWID, KEY_TITLE,KEY_BODY, null, null, null, null, null); /* * Return a Cursor positioned at the note that matches the given rowId * * param rowId id of note to retrieve * return Cursor positioned to matching note, if found * throws SQLException if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年杭州科技职业技术学院单招职业技能测试题库附答案
- 2026年经典心理考试题库及答案1套
- 2026年检察保密知识测试题完整参考答案
- 2026年四川艺术职业学院单招职业适应性测试模拟测试卷及答案1套
- 2026年团员入团知识测试题及一套答案
- 2026云南昭通市水富市文化馆城镇公益性岗位人员招聘1人笔试备考题库及答案解析
- 2026年吕梁师范高等专科学校单招职业倾向性测试题库附答案
- 2026年天津医学高等专科学校单招职业适应性测试题库及答案1套
- 2026年新乡医学院三全学院单招综合素质考试模拟测试卷附答案
- 2026广东茂名市化州市投资审核中心招聘合同制工作人员5人笔试备考试题及答案解析
- 2025年人工智能训练师(三级)职业技能鉴定理论考试题库(含答案)
- 智慧产业园仓储项目可行性研究报告-商业计划书
- 财务部门的年度目标与计划
- 消防管道拆除合同协议
- 四川省森林资源规划设计调查技术细则
- 银行外包服务管理应急预案
- DB13T 5885-2024地表基质调查规范(1∶50 000)
- 2025年度演出合同知识产权保护范本
- 青少年交通安全法规
- 区块链智能合约开发实战教程
- 2025年校长考试题库及答案
评论
0/150
提交评论