《Android实战基础教程》课件第四章_第1页
《Android实战基础教程》课件第四章_第2页
《Android实战基础教程》课件第四章_第3页
《Android实战基础教程》课件第四章_第4页
《Android实战基础教程》课件第四章_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录4.1SQLiteDatabase简介4.2SQLiteOpenHelper简介4.3SQLite数据库的应用

四、SQLite数据库四、SQLite数据库

Android可以使用SQLiteDatabase来代表一个数据库。可以通过SQLiteDatabase来创建、删除、执行SQL命令,并执行其他常见的数据库管理任务。SQLiteDatabase提供了openOrCreateDatabase等静态方法来打开或者创建数据库。它会自动检测相应的数据库是否存在,如果不存在,则自动创建相应的数据库。4.1SQLiteDatabase简介四、SQLite数据库

一些SQLiteDatabase常用操作的方法:publiclonginsert(Stringtable,StringnullColumnHack,ContentValuesvalues):将行插入到数据库的简便方法。publicintupdate(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs):数据库中的行更新的简便方法。publicintdelete(Stringtable,StringwhereClause,String[]whereArgs):数据库中删除行的简便方法。四、SQLite数据库Cursor(光标)对象的一些常见方法:booleanmove(intoffset):从当前位置移动光标,向前或向后移动。正数向前移,负数向后移。成功返回true,失败返回false。booleanmoveToLast():将光标移动到最后一行。成功返回true,失败返回false。booleanmoveToNext():将光标移动到下一行。成功返回true,失败返回false。booleanmoveToPosition(intposition):将光标移动到指定的位置。成功返回true,失败返回false。

四、SQLite数据库

SQLiteOpenHelper是一个辅助类,可用来创建和管理数据库。通过创建一个子类,实现onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)方法。这个子类负责打开数据库(如果数据库存在)、创建数据库(如果数据库不存在)、更新数据库等。SQLiteOpenHelper同时也有助于ContentProvider第一次打开和升级数据库。4.2SQLiteOpenHelper简介四、SQLite数据库

一些SQLiteOpenHelper常用操作的方法:publicSQLiteDatabasegetReadableDatabase():以读的方式打开数据库。publicSQLiteDatabasegetWritableDatabase():以写的方式打开数据库。publicabstractvoidonCreate(SQLiteDatabasedb):当数据库为第一次创建时调用。这是创建表和表的初始化的地方。publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion):当数据库需要更新时调用。数据库的增删改等操作需要使用该方法,此方法需要在事务中执行。如果出现异常,所有的更改将自动回滚。四、SQLite数据库

SQLiteOpenHelper是一个辅助类,可用来创建和管理数据库。通过创建一个子类,实现onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)方法。这个子类负责打开数据库(如果数据库存在)、创建数据库(如果数据库不存在)、更新数据库等。SQLiteOpenHelper同时也有助于ContentProvider第一次打开和升级数据库。4.3SQLite数据库的应用四、SQLite数据库back

案例1使用SQLiteOpenHelper来完成一个简单的注册功能。

效果如图4.1所示。图4.1四、SQLite数据库该案例的布局文件有以下几种:(1) activity_main.xml文件:<LinearLayoutxmlns:android="http:///apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical">

四、SQLite数据库<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用户名:"/><EditText android:id="@+id/nameTxt" android:layout_width="match_parent" android:layout_height="wrap_content" />四、SQLite数据库<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="密码:"/><EditText android:id="@+id/pwdTxt" android:password="true" android:layout_width="match_parent" android:layout_height="wrap_content" />四、SQLite数据库<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄:"/><EditText android:id="@+id/ageTxt" android:layout_width="match_parent" android:layout_height="wrap_content" />

四、SQLite数据库<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clickBtn" android:text="注册"/><Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="创建数据库"/></LinearLayout>四、SQLite数据库(2) MyDatabaseHelper.java文件:publicclassMyDatabaseHelperextendsSQLiteOpenHelper //创建表的SQL语句 finalStringCREATE_TABLE_SQL="createtableuserinfo(_idintegerprimarykeyautoincrement,name,pwd,age)";publicMyDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){ super(context,name,factory,version); //TODOAuto-generatedconstructorstub}四、SQLite数据库 @Override publicvoidonCreate(SQLiteDatabasedb){ //第一次使用数据库时自动创建表 db.execSQL(CREATE_TABLE_SQL); } @Override publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){ //TODOAuto-generatedmethodstub }}//End四、SQLite数据库(3) MainActivity.java文件:publicclassMainActivityextendsActivity{

//定义组件

EditTextnameTxt=null;

EditTextageTxt=null;

EditTextpwdTxt=null;

MyDatabaseHelperdb;

四、SQLite数据库@OverrideprotectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//db=SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/user.db",null);

db=newMyDatabaseHelper(this,"user.db3",null,1);

//初始化组件

initComponents();}//onCreate

四、SQLite数据库 /*

*初始化组件

*/

publicvoidinitComponents()

{

nameTxt=(EditText)findViewById(R.Txt);

pwdTxt=(EditText)findViewById(R.id.pwdTxt);

ageTxt=(EditText)findViewById(R.id.ageTxt);

}//initComponents四、SQLite数据库 /*

*按钮的点击事件

*/

publicvoidclickBtn(Viewview){

intid=view.getId();

if(id==R.id.btn1)

{

Stringname=nameTxt.getText().toString();

Stringpwd=pwdTxt.getText().toString();

Stringage=ageTxt.getText().toString();

//保存数据

saveInfo(db.getReadableDatabase(),name,pwd,age);}

}//clickBtn四、SQLite数据库publicvoidsaveInfo(SQLiteDatabasedb,Stringname,Stringpwd,Stringage){

//创建SQL语句

Stringinsert="insertintouserinfovalues(null,?,?,?)";

//执行SQL语句,其中insertSQL语句中的三个?问号可由第二个参数的object数组填充代替

db.execSQL(insert,newString[]{name,pwd,age});

Log.i("test","插入数据");

//关闭连接

db.close();}//saveInfo}//End四、SQLite数据库

案例2简单的图书信息管理系统。

界面效果如图4.4:图4.4四、SQLite数据库(1) activity_book_list.xml:<RelativeLayoutxmlns:android="/apk/res/android" xmlns:tools="/tools" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin">四、SQLite数据库<ListView android:id="@+id/listview1“ android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>(2) activity_main.xml:<LinearLayoutxmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="match_parent" android:layout_height="match_parent"四、SQLite数据库

android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" >

<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

>四、SQLite数据库<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图书编号"/><EditText

android:id="@+id/bookidTxt"

android:layout_width="match_parent" android:layout_height="wrap_content"

/></LinearLayout>四、SQLite数据库<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图书名称"/><EditText

android:id="@+id/nameTxt"

android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>四、SQLite数据库<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图书作者"/><EditText

android:id="@+id/authorTxt"

android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>四、SQLite数据库<LinearLayout

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图书价格"/><EditText

android:id="@+id/priceTxt"

android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>四、SQLite数据库<Button

android:id="@+id/Btn_insert"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:onClick="clickBtn"

android:text="添加图书"/>

<Button

android:id="@+id/Btn_delete"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:onClick="clickBtn"

android:text="根据图书编号删除图书"/>四、SQLite数据库<Button

android:id="@+id/Btn_update"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:onClick="clickBtn"

android:text="根据图书编号修改图书"/><Button

android:id="@+id/Btn_find"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:onClick="clickBtn"

android:text="根据图书编号查看图书"

/>四、SQLite数据库<Button

android:id="@+id/Btn_showlist"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:onClick="clickBtn"

android:text="查看图书列表"

/></LinearLayout>四、SQLite数据库(3) Book.java:publicclassBookimplementsParcelable{

publicint_id;

publicStringname;

publicStringauthor;

publicfloatprice;

//Constructor

publicBook(Parcelsource){

//反序列化(反序列化的顺序要和序列化的顺序一致)

_id=source.readInt();

name=source.readString();

author=source.readString();

price=source.readFloat();}//Constructor四、SQLite数据库publicBook(){}

@Override

publicintdescribeContents(){

return();

}

@Override

publicvoidwriteToParcel(Parceldest,intflags){

//可以对Book对象的属性一个一个的序列化

dest.writeInt(_id);

dest.writeString(name);

dest.writeString(author);

dest.writeFloat(price);

}

四、SQLite数据库//收到数据之后可以使用Creator把数据反序列化成BookpublicstaticfinalParcelable.CreatorCREATOR=newCreator<Book>(){

@Override

publicBookcreateFromParcel(Parcelsource){

//TODOAuto-generatedmethodstub

returnnewBook(source);

}

@Override

publicBook[]newArray(intsize){

returnnewBook[size];

} };四、SQLite数据库 @Override

publicStringtoString(){

return"【编号="+_id+",书名="+name+",作者="+author +",价格="+price+"】";

}

}//End四、SQLite数据库(4) MyDatabaseHelper.java:publicclassMyDatabaseHelperextendsSQLiteOpenHelper{

//创建表的SQL语句

publicfinalStringSQL_CREATE_TABLE="createtable"+BookDao.TABLE_BOOK+"("+BookDao.COL_BOOK_ID+"integerprimarykeyautoincrement," +BookDao.COL_NAME+","+BookDao.COL_AUTHOR ","+BookDao.COL_PRICE+")";

//删除表SQL语句

publicfinalStringSQL_DROP_TABLE="droptable"+BookDao.TABLE_BOOK;

publicMyDatabaseHelper(Contextcontext,Stringname,

CursorFactoryfactory,intversion){

super(context,name,factory,version);

//TODOAuto-generatedconstructorstub

}//Constructor四、SQLite数据库/**此方法是在应用程序第一次运行时自动调用,所以我们可以在这个方法中创建数据库的表*如果以后再允许程序,此方法将不再执行,所以可以保证数据库只创建一次*/

@Override

publicvoidonCreate(SQLiteDatabasedb)

{

//创建表

db.execSQL(SQL_CREATE_TABLE);

}//onCreate四、SQLite数据库/**发现当前执行的程序和原有程序版本不一致时,自动调用

*所以在此方法中我们可以将老数据更新为新数据

*/

@Override

publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)

{

//删除原来的表

db.execSQL(SQL_DROP_TABLE);

onCreate(db);

}//onUpgrade}//End四、SQLite数据库(5) BookDao.java:publicclassBookDao{

//数据库名

publicstaticfinalStringDB_NAME="book.db";

//保存图书信息的表名

publicstaticfinalStringTABLE_BOOK="bookinfo";

//id的列名

publicstaticfinalString COL_BOOK_ID="_id";

//图书名称的列名

publicstaticfinalStringCOL_NAME="name";

//图书作者的列名

publicstaticfinalStringCOL_AUTHOR="author";

//图书价格的列名

publicstaticfinalStringCOL_PRICE="price";

MyDatabaseHelperdbHelper=null;四、SQLite数据库//ConstructorpublicBookDao(Contextcontext){

//创建数据库

dbHelper=newMyDatabaseHelper(context,DB_NAME,null,1);}//Constructor四、SQLite数据库/**关闭数据库*/publicvoidcloseDB(){

if(dbHelper!=null)

{

dbHelper.close();

dbHelper=null;

}}//closeDB四、SQLite数据库publicvoidinsertBook(Stringname,Stringauthor,floatprice){

//获得SQLiteDatabase对象

SQLiteDatabasedb=dbHelper.getWritableDatabase();

ContentValuesvalues=newContentValues();

//编辑数据

values.put(COL_NAME,name);

values.put(COL_AUTHOR,author);

values.put(COL_PRICE,price);

//插入数据

db.insert(TABLE_BOOK,COL_AUTHOR,values);}//insertBook四、SQLite数据库publicBookfindBookById(intid){

Bookbook=newBook();

SQLiteDatabasedb=dbHelper.getWritableDatabase();

Cursorc=db.query(TABLE_BOOK,null,COL_BOOK_ID+"="+id,null,null,null,null);

if(c.moveToNext()){

book._id=c.getInt(c.getColumnIndex(COL_BOOK_ID));

=c.getString(c.getColumnIndex(COL_NAME));

book.author=c.getString(c.getColumnIndex(COL_AUTHOR));

book.price=c.getFloat(c.getColumnIndex(COL_PRICE));

}

returnbook;}//findBookById四、SQLite数据库publicvoidupdateBook(int_id,Stringname,Stringauthor,floatprice){

//获得SQLiteDatabase对象

SQLiteDatabasedb=dbHelper.getWritableDatabase();

ContentValuesvalues=newContentValues();

//编辑数据

values.put(COL_NAME,name);

values.put(COL_AUTHOR,author);

values.put(COL_PRICE,price);

//插入数据

Stringwhere=COL_BOOK_ID+"=?";

String[]whereValue={Integer.toString(_id)};

db.update(TABLE_BOOK,values,where,whereValue);}//updateBook四、SQLite数据库/**根据图书编号删除图书信息*/publicvoiddeleteBookById(intbookid){

SQLiteDatabasedb=dbHelper.getWritableDatabase();

db.delete(TABLE_BOOK,COL_BOOK_ID+"="+bookid,null);}//deleteBookById四、SQLite数据库publicList<Book>getBookList(){

List<Book>bookList=newArrayList<Book>();

SQLiteDatabasedb=dbHelper.getWritableDatabase();

Cursorc=db.query(TABLE_BOOK,null,null,null,null,null,null);

while(c.moveToNext()){

Bookbook=newBook();

book._id=c.getInt(c.getColumnIndex(COL_BOOK_ID));

=c.getString(c.getColumnIndex(COL_NAME));

book.author=c.getString(c.getColumnIndex(COL_AUTHOR));

book.price=c.getFloat(c.getColumnIndex(COL_PRICE));

bookList.add(book);

}

returnbookList;

}//getBookList}//End四、SQLite数据库(6) BookListActivity.java:publicclassBookListActivityextendsActivity{

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_book_list);

//获得MainActivity传递过来的数据

Intentintent=this.getIntent();

ArrayList<Book>bookList=intent.getParcelableArrayListExtra("book");

//将bookList转化为List类型

List<String>strList=newArrayList<String>();四、SQLite数据库 for(Bookb:bookList) {

strList.add(b.toString());

Log.i("test","添加一个成功");

} //填充列表 ListViewlistview=(ListView)findViewById(R.id.listview1); ArrayAdapter<String>adapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strList); listview.setAdapter(adapter); }//onCreate

}//End四、SQLite数据库(7) MainActivity.java:publicclassMainActivityextendsActivity{

//定义一些组件

publicEditTextbookidTxt=null;

publicEditTextnameTxt=null;

publicEditTextauthorTxt=null;

publicEditTextpriceTxt=null;

//定义一个操作数据库的类

BookDaodb=null;四、SQLite数据库@OverrideprotectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//初始化控件

initConponents();

//创建db

db=newBookDao(this);}//onCreate四、SQLite数据库@OverrideprotectedvoidonPause(){

if(db!=null)//判断db是否为空,不为空则关闭数据库

{

db.closeDB();

}

super.onPause();}//onPause四、SQLite数据库/**初始化组件*/publicvoidinitConponents(){

bookidTxt=(EditText)findViewById(R.id.bookidTxt);

nameTxt=(EditText)findViewById(R.Txt);

authorTxt=(EditText)findViewById(R.id.authorTxt);

priceTxt=(EditText)findViewById(R.id.priceTxt);}//initConponents四、SQLite数据库publicvoidclickBtn(Viewview){

intid=view.getId();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论