android sqlite使用之模糊查询数据库数据的三种方式

简介:
 android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有 文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把:
package com.example.utils;
import  java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBManage extends SQLiteOpenHelper {
static int init_version = 1;
static String database_name = "android_sqlite_test.db";
static String tab_name = "uer_log";
static String tab_field01 = "_id";
static String tab_field02 = "log_name";
SQLiteDatabase mDatabase;
public DBManage(Context context) {
super(context, database_name, null, init_version);
// TODO Auto-generated constructor stub
mDatabase = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String  sql = "create table " + tab_name + " ( " + tab_field01
+ " integer primary key , " + tab_field02 + " text  not null) ";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
/**
* 插入记录
*
* @param u
* @return
*/
public boolean insertData(String... str) {
int request_int = 0;
for (int i = 0; i < str.length; i++) {
// 实例化一个ContentValues 对象 ,作用,收集数据,方便于SQLite执行增,删,改,查
ContentValues contentValues = new ContentValues();
contentValues.put(tab_field02, str[i]);
mDatabase.insert(tab_name, null, contentValues);
request_int++;
}
return str.length == request_int;
}
// 根据条件模糊查询 数据库数据
public ArrayList<String> query(int top_int, String... str) {
ArrayList<String> result_list = new ArrayList<String>();
mDatabase = getReadableDatabase();
//模糊查询的三种方式:
/*
* 全部查询
String current_sql_sel = "SELECT  * FROM " + tab_name;
Cursor c = mDatabase.rawQuery(current_sql_sel, null);*/
//1.使用这种query方法%号前不能加' ;
Cursor c_test = mDatabase.query(tab_name, new String[]{tab_field02}, tab_field02+"  LIKE ? ",
new String[] { "%" + str[0] + "%" }, null, null, null);
//2.使用这种query方法%号前必须加'  ;
//  Cursor  c_test=mDatabase.query(tab_name, new String[]{tab_field02},tab_field02+"  like '%" + str[0] + "%'", null, null, null, null);
//3.使用这种方式必须在%号前加'  ;
String current_sql_sel = "SELECT  * FROM "+tab_name +" where "+tab_field02+" like '%"+str[0]+"%'";
//Cursor c_test = mDatabase.rawQuery(current_sql_sel, null);
Log.e("tag", "查询完成...");
while (c_test.moveToNext()) {
String name = c_test.getString(c_test.getColumnIndex(tab_field02));
//name.contains(str[0]);
// 让集合中的数据不重复;
if (!result_list.contains(name)) {
result_list.add(name);
Log.e("tag", name);
}
}
c_test.close();
return result_list;
}
}

  SQL模糊查询语句
  SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下:
  1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
  2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
  3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
  4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
  5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
  6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
  7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
  下面这句查询字符串,根据变量 zipcode_key 在邮政编码表 zipcode 中查询对应的数据,这句是判断变量 zipcode_key 为非数字时的查询语句,用 % 来匹配任意长度的字符串,从表中地址、市、省三列中查询包含关键字的所有数据项,并按省、市、地址排序。这个例子比较简单,只要你理解了方法就可以写出更复杂的查询语句。
  sql = "select * from zipcode where (address like'%" & zipcode_key & "%') or (city like'%" & zipcode_key & "%') or (province like'%" & zipcode_key & "%') order by province,city,address   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
目录
相关文章
|
1月前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
170 0
|
1月前
|
网络协议 关系型数据库 MySQL
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
165 2
|
10天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
10 0
|
10天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
10 0
|
13天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
18天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
23 0
|
24天前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
24 1
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
48 0

热门文章

最新文章