版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android创立和使用数据库具体指南(1)--免费版摘要:每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库--SQLite,本文介绍的就是如何为你的AndroidSQLite数据库。数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简洁的数据,数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简洁的数据,那么就需要一个数据库系统存储你的构造化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库,在很多领域广泛使用,如MozillaFireFox就是使SQLite来存储配置数据的,iPhone也是使用SQLite来存储数据的。在android中,你为某个应用程序创立的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data/package_name/databases文件夹中,在这篇文章中,你将会学习到如何在Android中创立和使用数据库。SQLite使用使用Eclipse创立一个Android工程,取名为Database1所示:图图1数据库-使用Eclipse创立你的Android工程DBAdapter关心类操作数据库的最正确实践是创立一个关心类,由它封装全部对数据库的简单访问,对于操作数据库的最正确实践是创立一个关心类,由它封装全部对数据库的简单访问,对于调用代码而言它是透亮的,因此我创立了一个DBAdapter的关心类,由它创立、翻开、关闭和使用SQLite数据库。首先,在src/文件夹(在这个例子中是src/net.learn2develop.Database)下添加一个DBAdapter.java文件。在DBAdapter.java文件中,导入全部你要使用到的命名空间:接下来创立一个数据库,取名为接下来创立一个数据库,取名为bookstitles,字段如图2所示。1中的常量。1定义DBAdapter.java文件中的常量packagenet.learn2develop.Database;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.SQLException;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;public{classDBAdapterpublicstaticfinalStringKEY_ROWID=“_id“;publicstaticfinalStringKEY_ISBN=“isbn“;publicstaticfinalStringKEY_TITLE=“title“;publicstaticfinalStringKEY_PUBLISHER=“publisher“;staticfinalStringTAG=“DBAdapter“;staticfinalStringDATABASE_NAME=“books“;staticfinalStringDATABASE_TABLE=“titles“;staticfinal=1;staticfinalStringDATABASE_CREATE=“createtabletitles(_idintegerprimarykeyautoincrement,“+“isbntextnotnull,titletextnotnull,“+“publishertextnotnull);“;privatefinalContextcontext;}DATABASE_CREATEtitles表的SQL语句。DBAdapter类中,你可以扩展SQLiteOpenHelper类,它是一个Android关心类,主要用于数据库创立和版本治理。实际上,你可以掩盖onCreate和onUpgrade方法,如清2所示。2在DBAdapter类中,扩展SQLiteOpenHelper类掩盖onCreate和onUpgrade方法packagenet.learn2develop.Database;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.SQLException;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;publicclassDBAdapter{publicstaticfinalStringKEY_ROWID=“_id“;publicstaticfinalStringKEY_ISBN=“isbn“;publicstaticfinalStringKEY_TITLE=“title“;publicstaticfinalStringKEY_PUBLISHER=“publisher“;privatestaticfinalStringTAG=“DBAdapter“;privatestaticfinalStringDATABASE_NAME=“books“;privatestaticfinalStringDATABASE_TABLE=“titles“;privatestaticfinal=1;privatestaticfinalStringDATABASE_CREATE=“createtabletitles(_idintegerprimarykeyautoincrement,“+“isbntextnotnull,titletextnotnull,“+“publishertextnotnull);“;privatefinalContextcontext;privateDatabaseHelperDBHelper;privateSQLiteDatabasedb;publicDBAdapter(Contextctx){this.context=ctx;DBHelper=newDatabaseHelper(context);}privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{DatabaseHelper(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);}@OverridepublicvoidonCreate(SQLiteDatabasedb){}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Log.w(TAG,“Upgradingdatabasefromversion“+oldVersion+“to“+newVersion+“,whichwilldestroyallolddata“);db.execSQL(“DROPTABLEIFEXISTStitles“);onCreate(db);}}}onCreate方法创立一个的数据库,onUpgrade方法用于升级数据库,这可以通过检查DATABASE_VERSION常量定义的值来实现,对于onUpgrade方法而言,只不过是简洁地删除表,然后在创立表而已。现在你可以定义不同的方法来翻开和关闭数据库,如清单3中的添加/编辑/删除/行的函数。3定义翻开和关闭数据库以及增加/编辑/删除表中行的方法publicclassDBAdapter{//...//...//---翻开数据库---publicDBAdapteropenthrowsSQLException{db=DBHelper.getWritableDatabase;returnthis;}//---关闭数据库---publicvoidclose{DBHelper.close;}//---向数据库插入一个标题---publiclonginsertTitle(Stringisbn,Stringtitle,Stringpublisher){ContentValuesinitialValues=newContentValues;initialValues.put(KEY_ISBN,isbn);initialValues.put(KEY_TITLE,title);initialValues.put(KEY_PUBLISHER,publisher);returndb.insert(DATABASE_TABLE,null,initialValues);}//---删除一个指定的标题---publicbooleandeleteTitle(longrowId){null)>0;}//---检索全部标题---publicCursorgetAllTitles{returndb.query(DATABASE_TABLE,newString[]{KEY_ROWID,KEY_ISBN,KEY_TITLE,null,null,null,null,null);}//---检索一个指定的标题---publicCursorgetTitle(longrowId)throwsSQLException{CursormCursor=db.query(true,DATABASE_TABLE,newString[]{KEY_ROWID,KEY_ISBN,KEY_TITLE,KEY_PUBLISHER},KEY_ROWID+“=“+rowId,null,null,null,null,null);if(mCursor!=null){}returnmCursor;}//---更一个标题---publicbooleanupdateTitle(longrowId,Stringisbn,Stringtitle,Stringpublisher){ContentValuesargs=newContentValues;args.put(KEY_ISBN,isbn);args.put(KEY_TITLE,title);args.put(KEY_PUBLISHER,publisher);returndb.update(DATABASE_TABLE,args,null)>0;}}留意Android使用Cursor类返回一个需要的值,Cursor作为一个指针从数据库查询返回结果集,使用Cursor允许Android更有效地治理它们需要的行和列,你使用ContentValues对象存储键/值对,它的put方法允许你插入不同数据类型的键值。4显示了完整的DBAdapter.java源代码。4DBAdapter.java完整源代码packagenet.learn2develop.Database;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.SQLException;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;importandroid.util.Log;publicclassDBAdapter{publicstaticfinalStringKEY_ROWID=“_id“;publicstaticfinalStringKEY_ISBN=“isbn“;publicstaticfinalStringKEY_TITLE=“title“;publicstaticfinalStringKEY_PUBLISHER=“publisher“;privatestaticfinalStringTAG=“DBAdapter“;privatestaticfinalStringDATABASE_NAME=“books“;privatestaticfinalStringDATABASE_TABLE=“titles“;privatestaticfinal=1;privatestaticfinalStringDATABASE_CREATE=“createtabletitles(_idintegerprimarykeyautoincrement,“+“isbntextnotnull,titletextnotnull,“+“publishertextnotnull);“;privatefinalContextcontext;privateDatabaseHelperDBHelper;privateSQLiteDatabasedb;publicDBAdapter(Contextctx){this.context=ctx;DBHelper=newDatabaseHelper(context);}privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{DatabaseHelper(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);}@OverridepublicvoidonCreate(SQLiteDatabasedb){}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){Log.w(TAG,“Upgradingdatabasefromversion“+oldVersion+“to“+newVersion+“,whichwilldestroyallolddata“);db.execSQL(“DROPTABLEIFEXISTStitles“);onCreate(db);}}//---翻开数据库---publicDBAdapteropenthrowsSQLException{db=DBHelper.getWritableDatabase;returnthis;}//---关闭数据库---publicvoidclose{DBHelper.close;}//---向数据库中插入一个标题---publiclonginsertTitle(Stringisbn,Stringtitle,Stringpublisher){ContentValuesinitialValues=newContentValues;initialValues.put(KEY_ISBN,isbn);initialValues.put(KEY_TITLE,title);initialValues.put(KEY_PUBLISHER,publisher);returndb.insert(DATABASE_TABLE,null,initialValues);}//---删除一个指定标题---publicbooleandeleteTitle(longrowId){returndb.delete(DATABASE_TABLE,KEY_ROWID+“=“+rowId,null)>0;}//---检索全部标题---publicCursorgetAllTitles{returndb.query(DATABASE_TABLE,newString[]{KEY_ROWID,KEY_ISBN,KEY_TITLE,null,null,null,null,null);}//---检索一个指定标题---publicCursorgetTitle(longrowId)throwsSQLException{CursormCursor=db.query(true,DATABASE_TABLE,newString[]{KEY_ROWID,KEY_ISBN,KEY_TITLE,KEY_PUBLISHER},KEY_ROWIDKEY_ROWID+“=“+rowId,null,null,null,null,if(mCursor!=null){}returnmCursor;}//---更一个标题---publicbooleanupdateTitle(longrowId,Stringisbn,Stringtitle,Stringpublisher){ContentValuesargs=newContentValues;args.put(KEY_ISBN,isbn);args.put(KEY_TITLE,title);args.put(KEY_PUBLISHER,publisher);returndb.update(DATABASE_TABLE,args,KEY_ROWID+“=“+rowId,null)>0;}}使用数据库现在你已经可以利用创立的关心类来使用数据库了,在现在你已经可以利用创立的关心类来使用数据库了,在DatabaseActivity.java文件中,创立一个DBAdapter类的实例:增加一个标题假设想在假设想在titles表中增加一个标题,可以使用DBAdapterinsertTitle方法:@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);DBAdapterdb=newDBAdapter(this);//---add2titles---longid;id=db.insertTitle(“0470285818“,“C#2008Programmer”sReference“,“Wrox“);id=db.insertTitle(“047017661X“,“ProfessionalWindowsVistaGadgetsProgramming“,“Wrox“);db.close;}insertTitle方法返回插入行的ID,假设在添加过程中遇到错误,它就返回-1。假设你分析Android设备/模拟器的文件系统,你可以看到book数据库创立在database3所示。3database文件夹检索全部标题想要检索titles表中的全部标题,可以使用DBAdapter类的getAllTitles方法,如清单5所示。5使用DBAdapter类的getAllTitlestitles表中的全部标题importandroid.app.Activity;importandroid.database.Cursor;importandroid.os.Bundle;importandroid.widget.Toast;publicclassDatabaseActivityextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){setContentView(R.layout.main);DBAdapterdb=newDBAdapter(this);//---猎取全部标题---db.open;Cursorc=db.getAllTitles;if(c.moveToFirst){do{}while(c.moveToNext);}db.close;}}返回的结果是一个Cursor对象,假设要显示全部标题,你首先应当调用Cursor对象的moveToFirst方法,假设它成功(意味着至少有一行有效)DisplayTitle方法显示具体的标题,要移动到下一个标题,可以调用的标题,要移动到下一个标题,可以调用Cursor对象的moveToNext方法,下面是DisplayTitle方法的定义:4显示Toast类,它从数据库中检索并显示一个标题。检索单个标题想要通过想要通过ID检索单个标题,可以使用DBAdapter类的getTitle方法:返回的结果是一个返回的结果是一个Cursor对象,假设返回一行,可以使用DisplayTitle方法显示标题的具体信息,否则就使用Toast类显示一个错误消息。更一个标题要更一个特定的标题,可以调用要更一个特定的标题,可以调用DBAdapter的updateTitle方法,传递想要更的标ID6所示。6调用DBAdapter类的updateTitle方法更标题@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);DBAdapterdb=newDBAdapter(this);//---更标题---db.open;if(db.updateTitle(1,“0470285818“,“C#2008Programmer”sReference“,“WroxPress“))Toast.makeText(this,“Updatesuccessful.“,Toast.LENGTH_LONG).show;elseToast.makeText(this,“Updatefailed.“,Toast.LENGTH_LONG).show;//-------------------//---检索一样的标题---Cursorc=db.getTitle(1);if(c.moveToFirst)elseToast.makeText(this,“Notitlefound“,Toast.LENGTH_LONG).show;//-------------------db.close;}假设更成功会显示一条表示成功的消息,同时,你可以检索刚刚更的标题看更结果是否正确。删除一个标题想要删除一个标题,可以调用想要删除一个标题,可以调用DBAdapter类的deleteTitle方法,传递你想要删除的标ID即可:@OverridepublicvoidonCreate(BundlesavedInstanceState){super.on
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年北京安全员B证考试题库(附答案)
- 2026职场半年工作总结报告 完整版可直接套用
- 职业教育现代产业学院建设申报书
- 公关危机处理创新创业项目商业计划书
- 创意设计创新创业项目商业计划书
- 2025-2030年心理咨询在线服务行业深度调研及发展战略咨询报告
- 2026年简化版旅游意外保险合同协议
- 石油钻井工程监督手册
- 环保大赛题目及答案英语
- 2026年理想汽车校招技术试题
- 煤矿探放水实操培训课件
- 建筑工程企业中层管理人员培训体系优化路径探索-以HX企业为样本的深度剖析
- 自我探索之旅-发现另一个自己+说课课件-2025-2026学年高二上学期心理健康主题班会
- 山东滨州市无棣县财金投资集团有限公司招聘笔试题库2026
- 机电安装施工安全专项方案
- 数学教师专业成长培训
- 2025年6月浙江省高考历史试卷(含答案详解)
- 母婴护理师管理手册
- 绵阳地理考试题及答案
- 不锈钢水箱生产质量标准手册
- 空分三级安全培训试题及答案解析
评论
0/150
提交评论