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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

在我的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
目录
相关文章
|
28天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
169 0
|
22天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
3月前
|
SQL 关系型数据库 MySQL
Python 数据库访问与ORM框架——打造高效开发利器
Python 作为一门广泛使用的编程语言,其在数据库访问方面也有着较为成熟的解决方案,其中ORM框架更是成为了开发者们的首选。本文将介绍 Python 中数据库访问和 ORM 框架的基本概念,以及如何使用 SQLAlchemy 这一优秀的 ORM 框架进行开发。
|
3月前
|
SQL 数据管理 数据库
Python数据库访问与ORM框架:探索高效数据管理的奥秘
在当今信息爆炸的时代,高效地管理和处理海量数据成为了企业和开发者的迫切需求。本文将介绍Python中的数据库访问技术以及ORM框架(如SQLAlchemy),探索其在数据管理方面的重要作用。通过使用Python数据库访问和ORM框架,开发者可以更轻松地操作数据库、提高代码可读性和维护性,并实现高效的数据持久化和查询。
|
3月前
|
关系型数据库 API 数据库
Python数据库访问与ORM框架:加速开发、提升效率
在现代软件开发中,数据库是不可或缺的组成部分。本文介绍了Python中数据库访问的重要性,并探讨了ORM框架(例如SQLAlchemy)如何帮助程序员加速开发、提升效率。通过使用ORM框架,开发人员可以轻松地将Python对象映射到数据库表,并且可以通过简洁的API进行数据库操作。此外,本文还讨论了ORM框架在处理复杂查询、维护数据一致性和实现数据库迁移方面的优势。
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
157 2
|
8天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
10天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
15天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
19 0
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问

热门文章

最新文章