数据库访问之Sqlite的不同之处

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

在我的Winform开发框架中,底层的数据访问支持多种不同的数据库,在数据库访问的开发过程中,发现Sqlite多数情况下,操作都和SqlServer或者说是和标准Sql差不多的。当然,Sqlite本身也有一些特殊的语句支持,本文主要根据自己的了解,以及在支持的Sqlite基类中的提炼,总结他们常用到的一些不同,以便以后查阅,并和大家分享讨论。

在我的Winform开发框架中,是支持Sqlite等这样的数据库接入的,示例图如下所示。 

  

现在根据我整理的一些特殊地方,和大家分享讨论: 

1)特殊字符

每种数据库,基本上在操作SQL语句中,都有自己的一些特殊的分隔符号,如防止和关键字重名的特殊引用字符,SqlServer是[], 这方面Sqlite也沿用这个。参数化语句的占位符,SqlServer和Access是@,Oracle是:,而Sqlite则支持$和@。

2)获取返回刚刚插入的主键字段值(自增长)

这种操作也是经常用到的,一般Sqlserver是用SELECT SCOPE_IDENTITY() 语句操作,Access用的是SELECT @@IDENTITY,Oracle由于用的是序列,所以是SELECT Seq_TestTable.Currval ID From Dual这样的操作,Sqlite呢,他也有自己的特殊语句了,就是:Select LAST_INSERT_ROWID() ,是不是比较容易记住呢。

3)Limit语句使用

在SqlServer中,我们常用Top语句来操作数据,以便获取必要的记录信息,这个在Sqlite不支持的,而它和MySql一样,是使用LIMIT语句来实现相同的效果,下面就是我Winform开发框架中,获取第一条记录和最后一条记录的基类方法,我在这里分享一下。

         ///   <summary>
        
///  查找记录表中最旧的一条记录
        
///   </summary>
        
///   <returns></returns>
         public  override T FindFirst()
        {
             string sql =  string.Format( " Select {0} From {1} Order by {2} ASC LIMIT 1 ", selectedFields, tableName, GetSafeFileName(sortField));
            T entity =  null;

            Database db = CreateDatabase();
            DbCommand command = db.GetSqlStringCommand(sql);

             using (IDataReader dr = db.ExecuteReader(command))
            {
                 if (dr.Read())
                {
                    entity = DataReaderToEntity(dr);
                }
            }
             return entity;
        }

         ///   <summary>
        
///  查找记录表中最新的一条记录
        
///   </summary>
        
///   <returns></returns>
         public  override T FindLast()
        {
             string sql =  string.Format( " Select {0} From {1} Order by {2} DESC LIMIT 1 ", selectedFields, tableName, GetSafeFileName(sortField));
            T entity =  null;

            Database db = CreateDatabase();
            DbCommand command = db.GetSqlStringCommand(sql);

             using (IDataReader dr = db.ExecuteReader(command))
            {
                 if (dr.Read())
                {
                    entity = DataReaderToEntity(dr);
                }
            }
             return entity;

        }

4、分页实现

前面我介绍了一篇文章,介绍整合了Sqlite语句分页逻辑的分页控件,随笔名称是《Winform分页控件更新之集成Sqlite数据库分页》,其实Sqlite分页逻辑也不神秘,无非也是利用Limit语句实现所需要的记录获取,如下所示。

         ///   <summary>
        
///  不依赖于存储过程的分页(SQLite)
        
///   </summary>
        
///   <param name="isDoCount"> 如果isDoCount为True,返回总数统计Sql;否则返回分页语句Sql </param>
        
///   <returns></returns>
         private  string GetSQLiteSql( bool isDoCount)
        {
             string sql =  "";
             if ( string.IsNullOrEmpty( this.strwhere))
            {
                 this.strwhere =  "  (1=1)  ";
            }

             if (isDoCount) // 执行总数统计
            {
                sql =  string.Format( " select count(*) as Total from {0} Where {1}  "this.TableOrSqlWrapper,  this.strwhere);
            }
             else
            {
                 // SELECT * FROM 表名称 LIMIT M,N 
                 string strOrder =  string.Format( "  order by {0} {1} "this.fieldNameToSort,  this.isDescending ?  " DESC " :  " ASC ");

                 int minRow = pageSize * (pageIndex -  1);
                 int maxRow = pageSize * pageIndex;
                sql =  string.Format( " select {0} from {1} Where {2} {3} LIMIT {4},{5} ",
                    fieldsToReturn,  this.TableOrSqlWrapper,  this.strwhere, strOrder, minRow, maxRow);
            }

             return sql;

  本文转自博客园伍华聪的博客,原文链接:数据库访问之Sqlite的不同之处,如需转载请自行联系原博主。



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
6天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
28 11
|
15天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
104 15
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
45 8
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
54 3
|
1月前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
69 2
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
44 4
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
70 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
100 2