玩转SQLite系列SQLite数据库应用案例实现历史搜索记录

合集下载

sqlite3 query 例程

sqlite3 query 例程

一、概述SQLite是一个轻量级的关系型数据库管理系统,它被广泛应用于移动设备和嵌入式系统中。

在开发中,我们经常会遇到需要使用SQLite3进行查询操作的情况。

为了更好地理解和掌握SQLite3的查询语句,下面将给出一些查询例程,希望能够帮助大家更好地使用SQLite3进行数据查询。

二、基本查询1. 查询所有数据在SQLite中,如果想查询某张表中的所有数据,可以使用如下语句:```SELECT * FROM table_name;```这条语句将返回table_name表中的所有数据。

2. 条件查询如果想查询表中满足一定条件的数据,可以使用如下语句:```SELECT * FROM table_name WHERE condition;```其中condition为满足的条件,可以是各种比较操作符、逻辑操作符等。

3. 聚合查询当需要对查询的结果进行聚合操作时,可以使用如下语句:```SELECT function(column_name) FROM table_name;```其中function为聚合函数,如SUM、AVG、COUNT等。

三、表连接查询在实际应用中,不同的数据可能拆分到多个表中,如果需要同时查询多张表的数据,就需要进行表连接查询。

SQLite3支持内连接、外连接等各种表连接方式。

1. 内连接内连接是最常用的连接方式,它会返回两个表中满足连接条件的数据。

可以使用如下语句进行内连接查询:```SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;```这条语句将返回table1和table2中满足连接条件的数据。

2. 外连接外连接是指将不满足连接条件的数据也一并返回,SQLite3支持左外连接和右外连接两种方式。

可以使用如下语句进行左外连接:```SELECT * FROM table1 LEFT OUTER JOIN table2 ONtable1.column = table2.column;```这条语句将返回table1中所有数据以及table2中满足连接条件的数据。

sqlite real例题

sqlite real例题

SQLite real例题SQLite 是一个轻量级的数据库系统,常用于移动应用和桌面应用中。

下面是一个使用SQLite 的简单例子,这是一个记录销售交易的数据库设计。

需求:我们需要记录销售的商品、数量、销售日期和销售员。

数据库设计:1.创建数据库:sqlCREATE DATABASE SalesDB;2.创建表:sqlCREATE TABLE Sales (id INTEGER PRIMARY KEY AUTOINCREMENT,product TEXT NOT NULL,quantity INTEGER NOT NULL,sale_date TEXT NOT NULL,sales_rep TEXT NOT NULL);3.插入数据:sqlINSERT INTO Sales (product, quantity, sale_date, sales_rep)VALUES ('iPhone 14', 10, '2023-10-23', 'John Doe');4.查询数据:•查询所有销售记录:sqlSELECT * FROM Sales;•查询特定销售员的所有销售记录:sqlSELECT * FROM Sales WHERE sales_rep = 'John Doe';•查询特定日期的所有销售记录:sqlSELECT * FROM Sales WHERE sale_date = '2023-10-23';5.更新数据:假设我们要增加一个销售记录的数量:sqlUPDATE Sales SET quantity = 5 WHERE product = 'iPhone 14';6.删除数据:假设我们要删除一个销售记录:sqlDELETE FROM Sales WHERE id = 1; -- 根据id来删除记录,这里假设要删除id为1的记录。

sqlite3检索算法

sqlite3检索算法

sqlite3检索算法SQLite3检索算法SQLite是一种轻量级的嵌入式关系型数据库管理系统,被广泛应用于各种平台和设备中。

在SQLite中,检索数据是数据库操作的核心之一。

SQLite3的检索算法主要基于B树索引和查询优化等核心原理。

本文将一步一步回答关于SQLite3检索算法的相关问题,深入探讨其实现及原理。

第一步:什么是B树索引?B树是一种自平衡的树形数据结构,被广泛应用于数据库和文件系统等领域,用于解决大规模数据的索引和查找问题。

B树索引在SQLite中起到加速数据检索的作用。

其主要特点是可以高效地支持平衡检索,使得数据的查找性能与数据量的增加基本无关。

第二步:B树索引在SQLite3中如何实现?SQLite3使用B+树作为主要的索引结构。

B+树是一种自平衡的多路搜索树,其特点是保持所有的数据都在叶子节点上,而非叶子节点仅用来索引和定位,这有助于提高查询性能。

当数据库中的表建立了索引之后,SQLite3会在磁盘上建立对应的B+树索引文件。

该文件的结构是一个页的集合,其中每个页的大小通常为4KB。

每个页被分为若干个块,每个块通常包含多个索引条目。

SQLite3使用B 树索引进行搜索的过程可以被分为两个主要的步骤:搜索树的根页以及在根页下搜索叶子页。

第三步:索引的搜索过程是怎样的?在SQLite3中,索引的搜索过程遵循下列步骤:1. 首先,打开索引文件,并读取根页的页号。

2. 然后,读取根页,并判断索引值是否在根页的索引条目范围内。

如果是,则跳到该索引条目对应的页,并重复此过程。

3. 如果索引值不在根页范围内,那么SQLite3会采取二分查找的方式寻找适当的索引条目。

通过比较索引值和中间索引条目的值,可以确定是否继续搜索左/右子树。

4. 如果找到叶子页,SQLite3将从该页读取相应的数据记录,并返回给用户。

需要注意的是,当索引的深度较大时,SQLite3可能需要在不同的页面之间频繁地进行I/O操作。

移动应用开发技术浏览历史记录保存方法

移动应用开发技术浏览历史记录保存方法

移动应用开发技术浏览历史记录保存方法随着智能手机的普及,人们越来越依赖移动应用程序来获取信息、进行购物和娱乐等活动。

对于应用程序开发者来说,了解用户的浏览历史记录是至关重要的,这有助于他们更好地了解用户的兴趣和行为,并提供更个性化的服务。

那么,如何有效地保存和管理移动应用程序的浏览历史记录呢?一、本地缓存方法在移动应用开发中,最常见的保存历史记录的方法是使用本地缓存。

本地缓存是指将用户的浏览历史记录保存在用户设备上的存储空间中,不需要网络连接即可访问。

开发者可以使用数据库、文件或偏好设置等形式进行本地缓存。

数据库是一种广泛应用的保存历史记录的方法。

通过使用SQLite等数据库技术,开发者可以轻松地创建、读取和更新历史记录。

这种方法可以高效地保存大量数据,并支持复杂的查询操作,适用于需要更多数据处理和分析的应用程序。

文件保存是另一种常见的本地缓存方法。

开发者可以将用户的浏览历史记录保存在文本文件、JSON文件或XML文件中。

这种方法不仅简单易用,而且对于一些轻量级的应用程序来说是足够的。

偏好设置是一种用于保存少量数据的简单方法。

开发者可以使用SharedPreferences或NSUserDefault等偏好设置工具来保存用户的浏览历史记录。

这种方法适用于只保存一些简单设置或配置信息的应用程序。

二、云端存储方法在一些需要多设备同步的应用程序中,使用云端存储是更好的选择。

云端存储是指将用户的浏览历史记录保存在服务器上,用户可以通过网络连接和不同的设备访问记录。

这种方法可以确保用户在不同设备上访问相同历史记录,提供更好的用户体验。

开发者可以使用云数据库(如Firebase)或云存储服务(如Amazon S3、Google Cloud Storage)来保存用户的浏览历史记录。

使用云数据库可以实现用户数据的实时同步和查询等功能,而使用云存储服务则可以保存用户的文件和图片等内容。

不过,使用云端存储方法需要考虑数据安全和隐私问题。

sqlite数据查询最后10条记录语句

sqlite数据查询最后10条记录语句

sqlite数据查询最后10条记录语句摘要:1.SQLite 简介2.SQLite 数据查询基础3.获取最后10 条记录的语句正文:SQLite 是一种轻量级的数据库,它非常适合用于嵌入式设备和本地存储数据。

它具有可扩展性、高性能和易于使用的特点。

在这篇文章中,我们将介绍如何使用SQLite 数据库查询最后10 条记录。

首先,我们需要了解一些SQLite 数据查询的基础知识。

SQLite 使用结构化查询语言(SQL)进行数据查询。

要查询数据,我们需要使用SELECT 语句。

基本的SELECT 语句如下:```SELECT column1, column2, ...FROM table_nameWHERE condition;```其中,column1、column2 等表示要查询的列名,table_name 表示要查询的表名,condition 表示查询条件。

现在,我们来看如何获取最后10 条记录。

假设我们有一个名为"example"的表,其中包含以下列:id(主键)、name(姓名)和age(年龄)。

我们可以使用以下SQL 语句获取最后10 条记录:```sqlSELECT *FROM exampleORDER BY id DESCLIMIT 10;```这个语句首先使用ORDER BY 子句对数据按照id 进行降序排序,然后使用LIMIT 子句限制结果集只包含前10 条记录。

请注意,ORDER BY 子句和LIMIT 子句需要SQLite 版本支持。

较旧的SQLite 版本可能不支持这些功能。

在这种情况下,您需要使用其他方法获取最后10 条记录,例如使用游标遍历结果集。

总之,SQLite 是一种强大的轻量级数据库,可以用于各种场景。

要查询最后10 条记录,可以使用SELECT 语句配合ORDER BY 和LIMIT 子句。

sqlite数据查询最后10条记录语句

sqlite数据查询最后10条记录语句

sqlite数据查询最后10条记录语句首先,我想解释一下什么是SQLite和它的基本概念。

SQLite是一个轻量级的关系型数据库管理系统。

它具有简单易用、零配置和开源的特点,适用于小型应用程序或嵌入式设备。

SQLite使用SQL语言进行数据查询和管理。

在SQLite中,数据以表的形式组织,每个表包含多个列和行。

列表示属性或字段,行表示数据库的记录。

要从表中查询数据,我们可以使用SELECT语句。

在这个场景中,我们想要查询最后10条记录,可以使用LIMIT子句和ORDER BY子句来实现。

首先,我们需要打开SQLite的命令行终端或使用SQLite的图形界面工具,然后连接到我们的数据库。

连接命令可能是类似于以下的形式:sqlite3 mydatabase.db其中`mydatabase.db`是我们的数据库文件名。

如果数据库文件不在当前目录,需要提供完整的文件路径。

接下来,我们需要确定要查询的表名。

假设我们的表名是`mytable`。

然后,我们可以使用以下语句查询最后10条记录:SELECT * FROM mytable ORDER BY rowid DESC LIMIT 10;在这个查询语句中,我们使用`SELECT *`来选择所有列,`FROM mytable`指定要查询的表名,`ORDER BY rowid DESC`按照`rowid`降序排列,`LIMIT 10`限制结果为最后10条记录。

需要注意的是,SQLite中有一个隐含的列`rowid`,它表示每条记录的唯一标识符。

如果表没有定义主键,`rowid`会自动创建。

在这个查询中,我们使用`rowid`来决定记录的顺序。

当我们运行这条查询语句时,SQLite会返回最后10条记录的结果集。

结果集将包含所有的列和相应的值。

如果我们想要查询其他特定的列,而不是所有的列,我们可以用列名替换`*`。

例如:SELECT column1, column2 FROM mytable ORDER BY rowid DESC LIMIT 10;这将只会返回`column1`和`column2`两列的值。

sqlite3查找结果顺序

sqlite3查找结果顺序

sqlite3查找结果顺序标题:在数据库中使用SQLite3进行结果排序SQLite3是一种轻量级的嵌入式数据库管理系统,广泛应用于各种应用程序中。

在使用SQLite3进行查询时,我们经常需要对查询结果进行排序,以便更好地理解和分析数据。

下面将介绍如何在SQLite3中进行结果排序的方法。

1. 使用ORDER BY子句进行单个字段排序:在SQLite3中,可以使用ORDER BY子句对查询结果进行单个字段的升序或降序排序。

例如,如果我们有一个名为“students”的表,其中包含学生的姓名和分数两个字段,我们可以使用以下语句按分数进行升序排序:SELECT * FROM students ORDER BY score ASC;2. 使用ORDER BY子句进行多个字段排序:除了单个字段排序,SQLite3还允许我们使用ORDER BY子句对查询结果进行多个字段的排序。

例如,如果我们希望先按照分数进行升序排序,然后再按照姓名进行升序排序,可以使用以下语句:SELECT * FROM students ORDER BY score ASC, name ASC;3. 使用LIMIT子句限制结果数量:有时候我们只需要查询结果中的前几条记录,这时可以使用LIMIT 子句来限制结果数量。

例如,如果我们只想获取分数最高的5名学生的信息,可以使用以下语句:SELECT * FROM students ORDER BY score DESC LIMIT 5;4. 使用OFFSET子句跳过部分结果:如果我们想要跳过前几条记录,只查询后面的结果,可以使用OFFSET子句。

例如,如果我们想要获取排名第6到第10的学生信息,可以使用以下语句:SELECT * FROM students ORDER BY score DESC LIMIT 5 OFFSET 5; 5. 使用CASE语句实现自定义排序:有时候我们需要根据特定的规则对结果进行排序,这时可以使用CASE语句来实现自定义排序。

sqlite3的操作方法及应用

sqlite3的操作方法及应用

数据库的操作我们在这个项目中使用的是SQLITE3数据库软件。

通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中。

1.打开数据库,创建表1.1 sqlite * db; 定义一个sqlite * 的变量sqlite3_open(“./link.db”,&db);在当前目录下打开一个名为link.db的数据库,若是没有则在当前目录下创建一个名为link.db的数据库。

1.2 sql = "create table weblink(id integer primary key,domain text,page text,fromdomain text,status integer);"在已打开的数据库中创建一个名weblink的表。

表的属性如下:id integer primary key :ID号(表中黙认包含的)domain text :域名page text :子网页fromdomain text :源域名status integer :状态标志1.3 sqlite3_exec(db,sql,NULL,NULL,NULL);执行一条sql 语句的函数。

函数原型:int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg )第1个参数是前面open函数得到的指针。

说了是关键数据结构。

第2个参数const char *sql 是一条sql 语句,以\0结尾。

第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。

(什么是回调函数,自己找别的资料学习)第4个参数void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

玩转SQLite系列SQLite数据库应用案例实现历史搜索记录一.编写一个历史搜索记录实例对象package cn.bluemobi.dylan.sqlite;import java.util.Date;/*** 搜索记录的操作对象* Created by Administrator on 2016-11-20.*/public class History {/*** id 主键,自增*/private int id;/*** 搜索的内容*/private String content;/*** 搜索的时间*/private String time;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}二.编写一个操作数据库的管理工具类package cn.bluemobi.dylan.sqlite;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Environment;import java.io.File;import java.util.ArrayList;import java.util.List;/*** 数据库操作管理类* Created by Administrator on 2016-11-19.*/public class DBManager {private static volatile DBManager dbManager;private SQLiteDatabase sqLiteDatabase;private DBManager() {openDataBase();createTable();}public static DBManager getDBManager() {if (dbManager == null) {synchronized (DBManager.class) {if (dbManager == null) {dbManager = new DBManager();}}}return dbManager;}/*** 数据库名称*/private final String DA TABASE_NAME = "info.db";/*** 表名*/private final String TABLE_NAME = "history";/*** 表格所包含的字段*/private class HistoryDbColumn {/*** 字段一id*/public static final String ID = "id";/*** 字段二内容*/public static final String CONTENT = "name";/*** 字段三时间*/public static final String TIME = "time";}/*** 1.创建或打开数据库连接**/private void openDataBase() {File dataBaseFile = new File(Environment.getExternalStorageDirectory() + "/sqlite", DA TABASE_NAME);if (!dataBaseFile.getParentFile().exists()) {dataBaseFile.mkdirs();}sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);}/***** 2.创建表*/private void createTable() {String sql = "CREATE TABLE " +"IF NOT EXISTS " +TABLE_NAME + "(" +HistoryDbColumn.ID + " Integer PRIMARY KEY AUTOINCREMENT," +HistoryDbColumn.CONTENT + " varchar," +HistoryDbColumn.TIME + " datetime)";sqLiteDatabase.execSQL(sql);}/*** 插入一条数据** @param history* @return*/public long insert(History history) {ContentV alues contentValues = new ContentValues();contentValues.put(HistoryDbColumn.CONTENT, history.getContent());contentValues.put(HistoryDbColumn.TIME, history.getTime());long num = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);return num;}/*** 根据id删除一条数据** @param id* @return*/public long delete(int id) {long num = sqLiteDatabase.delete(TABLE_NAME, HistoryDbColumn.ID + "=?", new String[]{String.valueOf(id)});return num;}/*** 根据id修改一条数据** @param id* @return*/public long update(History history, int id) {ContentV alues contentValues = new ContentValues();contentValues.put(HistoryDbColumn.CONTENT, history.getContent());contentValues.put(HistoryDbColumn.TIME, history.getTime());long num = sqLiteDatabase.update(TABLE_NAME, contentValues, HistoryDbColumn.ID + "=?", new String[]{String.valueOf(id)});return num;}/*** 根据id查询一条数据** @param id* @return*/public History qurey(int id) {History history = null;Cursor cursor = sqLiteDatabase.query(TABLE_NAME, null, HistoryDbColumn.ID + "=?", new String[]{String.valueOf(id)}, null, null, null);if (cursor != null) {if (cursor.moveToNext()) {history = new History();history.setId(cursor.getInt(cursor.getColumnIndex(HistoryDbColumn.ID))); history.setContent(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.CONTENT)));history.setTime(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.TIME)));}}return history;}/*** 根据id查询一条数据* 倒序** @return*/public List<History> queryAll() {List<History> historys = new ArrayList<>();Cursor cursor = sqLiteDatabase.query(TABLE_NAME, null, null, null, null, null, HistoryDbColumn.TIME + " desc");if (cursor != null) {while (cursor.moveToNext()) {History history = new History();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);}}return historys;}/*** 根据内容查询一条数据** @return*/public History queryByContent(String content) {History history = null;Cursor cursor = sqLiteDatabase.query(TABLE_NAME, null, HistoryDbColumn.CONTENT + "=?", new String[]{content}, null, null, null);if (cursor != null) {if (cursor.moveToNext()) {history = new History();history.setId(cursor.getInt(cursor.getColumnIndex(HistoryDbColumn.ID))); history.setContent(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.CONTENT)));history.setTime(cursor.getString(cursor.getColumnIndex(HistoryDbColumn.TIME)));}}return history;}}三.搜索对话框的布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:minHeight="250dp"android:orientation="vertical"><cn.bluemobi.dylan.sqlite.SearchViewandroid:id="@+id/sv"android:padding="10dp"android:background="@color/colorPrimaryDark"android:layout_width="match_parent"android:layout_height="wrap_content"></cn.bluemobi.dylan.sqlite.SearchView><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView><TextViewandroid: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="暂无搜索记录" /></LinearLayout>四.编写功能代码package cn.bluemobi.dylan.sqlite;import android.app.Dialog;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.Date;import java.util.List;import monAdapter;import monViewHolder;/*** SQLite应用案例实现搜索记录* Created by Administrator on 2016-11-20.*/public class SearchActivity extends AppCompatActivity implements View.OnClickListener { private EditText et;private ListView lv;private TextView tv;private Dialog dialog;private SearchView sv;private Button bt;private List<History> histories;private CommonAdapter<History> commonAdapter;private final int MAX_ITME = 5;private void assignViews() {et = (EditText) findViewById(R.id.et);}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getSupportActionBar().setTitle("SQLite应用案例实现搜索记录");setContentView(yout.ac_search);assignViews();intiDialog();addListener();initData();}/*** 添加按钮监听*/private void addListener() {et.setOnClickListener(this);}/**** 初始化搜索对话框*/private void intiDialog() {dialog = new Dialog(this, R.style.Dialog_FullScreen);dialog.setContentView(yout.dialog_search);dialog.getWindow().setGravity(Gravity.TOP);dialog.setCanceledOnTouchOutside(true);dialog.setCancelable(true);youtParams lp = dialog.getWindow().getAttributes();lp.width = youtParams.MATCH_PARENT;lp.height = youtParams.WRAP_CONTENT;dialog.getWindow()ttributes(lp);lv = (ListView) dialog.findViewById(R.id.lv);tv = (TextView) dialog.findViewById();sv = (SearchView) dialog.findViewById(R.id.sv);bt = (Button) dialog.findViewById(R.id.bt);bt.setOnClickListener(this);lv.setEmptyView(tv);}/*** 初始化数据*/private void initData() {commonAdapter = new CommonAdapter<History>(this, histories, yout.item_for_search) {@Overrideprotected void convertView(CommonViewHolder commonViewHolder, History history) {TextView tv = commonViewHolder.get(R.id.textView);tv.setText(history.getContent());}};lv.setAdapter(commonAdapter);notifyAdapter();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.et:if (!dialog.isShowing()) {dialog.show();}break;case R.id.bt:addHistory();break;}}/*** 点击搜索按钮新增一条记录*/private void addHistory() {String inputText = sv.getInputText();if (inputText.isEmpty()) {Toast.makeText(this, "请输入内容进行搜索", Toast.LENGTH_SHORT).show();return;}/**1.先判断数据库当中有没有这条历史记录,如果有则修改其搜索的时间即可*/ History history = DBManager.getDBManager().queryByContent(inputText);if (history != null) {history.setTime(new Date().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 = new History();history.setContent(sv.getInputText());history.setTime(new Date().toString());long num = DBManager.getDBManager().insert(history);if (num != -1) {Log.d(Contacts.TAG, "插入成功");} else {Log.d(Contacts.TAG, "插入失败");}}notifyAdapter();}/*** 更新数据库当中的数据*/private void notifyAdapter() {histories = DBManager.getDBManager().queryAll();commonAdapter.notifyDataSetChanged(histories);}}。

相关文档
最新文档