配色: 字号:
玩转SQLite系列SQLite数据库应用案例实现历史搜索记录
2016-12-01 | 阅:  转:  |  分享 
  
玩转SQLite系列SQLite数据库应用案例实现历史搜索记录

一.编写一个历史搜索记录实例对象



packagecn.bluemobi.dylan.sqlite;



importjava.util.Date;



/

搜索记录的操作对象

CreatedbyAdministratoron2016-11-20.

/



publicclassHistory{

/

id主键,自增

/

privateintid;

/

搜索的内容

/

privateStringcontent;

/

搜索的时间

/

privateStringtime;



publicintgetId(){

returnid;

}



publicvoidsetId(intid){

this.id=id;

}



publicStringgetContent(){

returncontent;

}



publicvoidsetContent(Stringcontent){

this.content=content;

}



publicStringgetTime(){

returntime;

}



publicvoidsetTime(Stringtime){

this.time=time;

}

}

二.编写一个操作数据库的管理工具类



packagecn.bluemobi.dylan.sqlite;



importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.os.Environment;



importjava.io.File;

importjava.util.ArrayList;

importjava.util.List;



/

数据库操作管理类

CreatedbyAdministratoron2016-11-19.

/



publicclassDBManager{

privatestaticvolatileDBManagerdbManager;

privateSQLiteDatabasesqLiteDatabase;



privateDBManager(){

openDataBase();

createTable();

}



publicstaticDBManagergetDBManager(){

if(dbManager==null){

synchronized(DBManager.class){

if(dbManager==null){

dbManager=newDBManager();

}

}

}

returndbManager;

}



/

数据库名称

/

privatefinalStringDATABASE_NAME="info.db";

/

表名

/

privatefinalStringTABLE_NAME="history";



/

表格所包含的字段

/

privateclassHistoryDbColumn{



/

字段一id

/

publicstaticfinalStringID="id";

/

字段二内容

/

publicstaticfinalStringCONTENT="name";

/

字段三时间

/

publicstaticfinalStringTIME="time";

}



/

1.创建或打开数据库连接

/

privatevoidopenDataBase(){

FiledataBaseFile=newFile(Environment.getExternalStorageDirectory()+"/sqlite",DATABASE_NAME);

if(!dataBaseFile.getParentFile().exists()){

dataBaseFile.mkdirs();

}

sqLiteDatabase=SQLiteDatabase.openOrCreateDatabase(dataBaseFile,null);

}



/

2.创建表

/

privatevoidcreateTable(){

Stringsql="CREATETABLE"+

"IFNOTEXISTS"+

TABLE_NAME+"("+

HistoryDbColumn.ID+"IntegerPRIMARYKEYAUTOINCREMENT,"+

HistoryDbColumn.CONTENT+"varchar,"+

HistoryDbColumn.TIME+"datetime)";

sqLiteDatabase.execSQL(sql);

}



/

插入一条数据



@paramhistory

@return

/

publiclonginsert(Historyhistory){

ContentValuescontentValues=newContentValues();

contentValues.put(HistoryDbColumn.CONTENT,history.getContent());

contentValues.put(HistoryDbColumn.TIME,history.getTime());

longnum=sqLiteDatabase.insert(TABLE_NAME,null,contentValues);

returnnum;

}



/

根据id删除一条数据



@paramid

@return

/

publiclongdelete(intid){

longnum=sqLiteDatabase.delete(TABLE_NAME,HistoryDbColumn.ID+"=?",newString[]{String.valueOf(id)});

returnnum;

}



/

根据id修改一条数据



@paramid

@return

/

publiclongupdate(Historyhistory,intid){

ContentValuescontentValues=newContentValues();

contentValues.put(HistoryDbColumn.CONTENT,history.getContent());

contentValues.put(HistoryDbColumn.TIME,history.getTime());

longnum=sqLiteDatabase.update(TABLE_NAME,contentValues,HistoryDbColumn.ID+"=?",newString[]{String.valueOf(id)});

returnnum;

}



/

根据id查询一条数据



@paramid

@return

/

publicHistoryqurey(intid){

Historyhistory=null;

Cursorcursor=sqLiteDatabase.query(TABLE_NAME,null,HistoryDbColumn.ID+"=?",newString[]{String.valueOf(id)},null,null,null);

if(cursor!=null){

if(cursor.moveToNext()){

history=newHistory();

history.setId(cursor.getInt(cursor.getColumnIndex(HistoryDbColumn.ID)));

history.setContent(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.CONTENT)));

history.setTime(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.TIME)));

}

}



returnhistory;

}



/

根据id查询一条数据

倒序



@return

/

publicListqueryAll(){

Listhistorys=newArrayList<>();

Cursorcursor=sqLiteDatabase.query(TABLE_NAME,null,null,null,null,null,HistoryDbColumn.TIME+"desc");

if(cursor!=null){

while(cursor.moveToNext()){

Historyhistory=newHistory();

history.setId(cursor.getInt(cursor.getColumnIndex(HistoryDbColumn.ID)));

history.setContent(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.CONTENT)));

history.setTime(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.TIME)));

historys.add(history);

}

}

returnhistorys;

}



/

根据内容查询一条数据



@return

/

publicHistoryqueryByContent(Stringcontent){

Historyhistory=null;

Cursorcursor=sqLiteDatabase.query(TABLE_NAME,null,HistoryDbColumn.CONTENT+"=?",newString[]{content},null,null,null);

if(cursor!=null){

if(cursor.moveToNext()){

history=newHistory();

history.setId(cursor.getInt(cursor.getColumnIndex(HistoryDbColumn.ID)));

history.setContent(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.CONTENT)));

history.setTime(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.TIME)));

}

}

returnhistory;

}

}

三.搜索对话框的布局文件






android:layout_width="match_parent"

android:layout_height="match_parent"

android:minHeight="250dp"

android:orientation="vertical">




android:id="@+id/sv"

android:padding="10dp"

android:background="@color/colorPrimaryDark"

android:layout_width="match_parent"

android:layout_height="wrap_content">








android:id="@+id/lv"

android:layout_width="match_parent"

android:layout_height="match_parent">




android:id="@+id/tv"

android:layout_gravity="center"

android:gravity="center"

android:layout_weight="1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="暂无搜索记录"/>



四.编写功能代码



packagecn.bluemobi.dylan.sqlite;



importandroid.app.Dialog;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.util.Log;

importandroid.view.Gravity;

importandroid.view.View;

importandroid.view.WindowManager;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.ListView;

importandroid.widget.TextView;

importandroid.widget.Toast;



importjava.util.Date;

importjava.util.List;



importcn.bluemobi.dylan.sqlite.adapter.CommonAdapter;

importcn.bluemobi.dylan.sqlite.adapter.CommonViewHolder;



/

SQLite应用案例实现搜索记录

CreatedbyAdministratoron2016-11-20.

/



publicclassSearchActivityextendsAppCompatActivityimplementsView.OnClickListener{

privateEditTextet;

privateListViewlv;

privateTextViewtv;

privateDialogdialog;

privateSearchViewsv;

privateButtonbt;

privateListhistories;

privateCommonAdaptercommonAdapter;

privatefinalintMAX_ITME=5;



privatevoidassignViews(){

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

}



@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

getSupportActionBar().setTitle("SQLite应用案例实现搜索记录");

setContentView(R.layout.ac_search);

assignViews();

intiDialog();

addListener();

initData();

}



/

添加按钮监听

/

privatevoidaddListener(){

et.setOnClickListener(this);

}



/

初始化搜索对话框

/

privatevoidintiDialog(){

dialog=newDialog(this,R.style.Dialog_FullScreen);

dialog.setContentView(R.layout.dialog_search);

dialog.getWindow().setGravity(Gravity.TOP);

dialog.setCanceledOnTouchOutside(true);

dialog.setCancelable(true);

WindowManager.LayoutParamslp=dialog.getWindow().getAttributes();

lp.width=WindowManager.LayoutParams.MATCH_PARENT;

lp.height=WindowManager.LayoutParams.WRAP_CONTENT;

dialog.getWindow().setAwww.shanxiwang.netttributes(lp);

lv=(ListView)dialog.findViewById(R.id.lv);

tv=(TextView)dialog.findViewById(R.id.tv);

sv=(SearchView)dialog.findViewById(R.id.sv);

bt=(Button)dialog.findViewById(R.id.bt);

bt.setOnClickListener(this);

lv.setEmptyView(tv);

}



/

初始化数据

/

privatevoidinitData(){

commonAdapter=newCommonAdapter(this,histories,R.layout.item_for_search){

@Override

protectedvoidconvertView(CommonViewHoldercommonViewHolder,Historyhistory){

TextViewtv=commonViewHolder.get(R.id.textView);

tv.setText(history.getContent());

}

};

lv.setAdapter(commonAdapter);

notifyAdapter();

}



@Override

publicvoidonClick(Viewv){

switch(v.getId()){

caseR.id.et:

if(!dialog.isShowing()){

dialog.show();

}

break;

caseR.id.bt:

addHistory();

break;

}



}



/

点击搜索按钮新增一条记录

/

privatevoidaddHistory(){

StringinputText=sv.getInputText();

if(inputText.isEmpty()){

Toast.makeText(this,"请输入内容进行搜索",Toast.LENGTH_SHORT).show();

return;

}

/1.先判断数据库当中有没有这条历史记录,如果有则修改其搜索的时间即可/

Historyhistory=DBManager.getDBManager().queryByContent(inputText);

if(history!=null){

history.setTime(newDate().toString());

DBManager.getDBManager().update(history,history.getId());

}else{

/2.判断搜索记录是否达到限值,达到极限则删除一条数据/

if(histories!=null&&histories.size()==MAX_ITME){

DBManager.getDBManager().delete(histories.get(histories.size()-1).getId());

}

/3.插入一条数据/

history=newHistory();

history.setContent(sv.getInputText());

history.setTime(newDate().toString());

longnum=DBManager.getDBManager().insert(history);

if(num!=-1){

Log.d(Contacts.TAG,"插入成功");

}else{

Log.d(Contacts.TAG,"插入失败");

}



}



notifyAdapter();

}



/

更新数据库当中的数据

/

privatevoidnotifyAdapter(){

histories=DBManager.getDBManager().queryAll();

commonAdapter.notifyDataSetChanged(histories);

}

}

献花(0)
+1
(本文系网络学习天...首藏)