MySQL 迁移至 SQLite 问题记录

这篇具有很好参考价值的文章主要介绍了MySQL 迁移至 SQLite 问题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近接手了一个WPF项目,数据库使用的MySQL,为了简化生产环境部署流程,果断选择迁移到SQLite,由于原项目未使用ORM框架,导致很多SQL语法也得改。

SQLite基础语法请参考该页面 

  1.依赖包的更改

    有两个Nuget包选: Microsoft.Data.Sqlite.Core / System.Data.SQLite,我都安装试了下,除了类型大小写不一致之外,功能几乎一样,由于老项目是.Net Framework 4.x,稳妥起见还是使用了后者,至于各种引用类型的更改,几乎只需要将MySql开头的类型名全局替换成SQLite的则可(记得删掉MySQL的引用,确保只调用了SQLite相关类库)  

    MySQL 迁移至 SQLite 问题记录

  

  2.数据库连接

    SQLite本身是一个基于文件的数据库系统,每个数据库就是一个文件,若文件不存在它会自动创建,下面的示例代码就是建立与运行目录下test.sqlite文件的连接     

  private const string connStr = "Data Source = {0}";
  ...
  string dbName = "test.sqlite";   SQLiteConnection Connection
= new SQLiteConnection(string.Format(connStr, dbName));
  Connection.Open();

  

  3.数据库切换

    虽然SQLiteConnection也提供了ChangeDatabase方法,但是不管用 o(╥﹏╥)o   得先手动释放原来的连接资源,再建立新的连接

    Connection?.Dispose();
    Connection = new SQLiteConnection(string.Format(connStr, dbName));
    Connection.Open();

  

  4.建表差异

    编码集和数据引擎的部分肯定是不能要了,主键要将关键字放到对应字段后面,unique约束同理,自增则是去掉下划线(大小写依然不敏感),但是有一个需要注意的地方是:自增字段得用integer,用int也行,但它不会自增

  private const string SQL_CreateTable = @"
                create table if not exists `TestTable` (
                    id int not null auto_increment,                    
                    name varchar(64) not null,
                    primary key(id),
            unique key(name) ) collate='utf8_general_ci' engine=InnoDB;
";
  //上面是MySQL建表语句
  //下面是SQLite建表语句
  
private const string SQL_CreateTable = @" create table if not exists `TestTable` ( id integer PRIMARY KEY AUTOINCREMENT NOT NULL, name varchar(64) not null UNIQUE );";

 

 

  5.删表差异 - truncate 语句

    SQLite不支持 truncate ,清空一张表需要先delete,然后再去sqlite_sequence表里删除对应表名的自增键

  new SQLiteCommand(@"delete from tablename;", Connection).ExecuteNonQuery();
  new SQLiteCommand(@"DELETE FROM sqlite_sequence WHERE name = 'tablename';", Connection).ExecuteNonQuery();

 

  6.数据类型差异

    MySqlDbType要更改为DbType,后者位于System.Data命名空间下,具体对照关系参考这个链接,图中的Key值为MySqlDbType类型,Value为对应的DbType类型

  

    MySQL 迁移至 SQLite 问题记录

 

  7.逻辑操作符差异 -- &&符号

    若不是接手这个项目,我都不知道MySQL居然能用 && 操作符,SQLite当然是不支持的,得改成 and 关键字

 

  8.待补充,以后遇到其他问题再补充

翻译

搜索

复制文章来源地址https://www.toymoban.com/news/detail-449215.html

到了这里,关于MySQL 迁移至 SQLite 问题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • P2V vCenter Converter Standalone迁移(问题记录)

    链接: vCenter Converter Standalone 6.3.0 打开桌面上VMware vCenter Converter Standalone Client 点击convert Machine 本机迁移 解决方法:使用管理员权限打开VMware vCenter Converter Standalone Client 迁移时注意选择存储 远程迁移 远程window主机迁移 远程linux主机迁移 后面可以参考本地迁移 在windows sever 2

    2023年04月08日
    浏览(36)
  • 从 sqlite 迁移到 Oracle 数据库

    今天发现一个有意思的竞赛,竞赛中使用了 sqlite 数据库。 由于个人更习惯 Oracle 数据库,所以将 sqlite 数据库迁移到了 Oracle 数据库。 此文章记录一下迁移时使用的 Python 代码。 完结!

    2024年04月29日
    浏览(34)
  • 关于Flink,TaskManager日志问题的一个记录

    疑问:不知道大家有和我一样,开发完的flink代码推送到flink集群上执行的时候log.info(xxxx)打印的日志不会打印到task-manager节点上去(在IDEA上执行可以打印日志到控制台上),为此一直在困扰了,经过一系列的尝试,终于在java和scala中实现log.info(xxx)打印到task-manager节点上。 java代

    2024年02月16日
    浏览(37)
  • 苹果Mac电脑怎么显示/取消显示最近使用的文档记录

    Mac可以隐藏最近使用的文档吗?有些小伙伴的mac打开finder会自动打开“ 最近使用 ”项目,将最近所有打开的图片,txt文档等都一一展现出来,没有任何隐私可言。那么该如何在 finder设置不显示最近文档 呢?下面小编就介绍一下该如何关闭最近使用这项功能。 1、在左上角,

    2024年02月10日
    浏览(102)
  • MySQL学习问题记录

    step1:建表 表项信息: 写入数据顺序id为10 2 7 1。查寻时返回记录顺序为1 2 7 10? 更新一条数据后仍然按照主键id排序显示查询结果 查看当前建表信息,发现MySQL有默认的一个查询规则,受该规则影响,查询结果按照主键的顺序排序显示。

    2024年02月09日
    浏览(39)
  • sqlite 操作记录。

    SELECT word, sentenceEn FROM allSentence WHERE word=\\\"access\\\" AND sentenceEn=\\\"Users can access their voice mail remotely.\\\"  SELECT word, phaseEn FROM allPhase WHERE word=\\\"access\\\" AND phaseEn=\\\"access control\\\"  SELECT word, homologousEn FROM allHomologous WHERE word=\\\"access\\\" AND homologousEn=\\\"accessible\\\"  SELECT word, synonymEn FROM allSynonym WHERE word=\\\"ac

    2024年02月07日
    浏览(31)
  • 设计一个LRU(最近最少使用)缓存

    约束和假设 我们正在缓存什么? 我们正在缓存Web Query的结果 我们可以假设输入是有效的,还是需要对其验证? 假设输入是有效的 我们可以假设它适应内存吗? 对 编码实现

    2024年01月24日
    浏览(63)
  • 记录一次最近遇到的新网络诈骗经历,大家要提高警惕啊

    第一次接到诈骗电话,说是要求修改支付宝信息的,一开始说的确实是很迷惑人,一下子可能没法马上分辨出来,但是到后面说要加QQ操作什么什么的,那肯定就是有严重问题的,因为很多诈骗都是通过QQ来操作的,一听到这个就要警惕了。 他的诈骗流程是这样的: 先是说你

    2023年04月23日
    浏览(44)
  • flink mysql cdc调试问题记录

    最近需要用到flink cdc作为数据流处理框架,在demo运行中发现一些问题,特此记录问题和解决过程。 Caused by: java.lang.IllegalArgumentException: Can\\\'t find any matched tables, please check your configured database-name: [localdb] and table-name: [flink_cdc_message] at com.ververica.cdc.connectors.mysql.debezium.DebeziumUtils.

    2023年04月17日
    浏览(53)
  • QT记录一个解决QlistWidget列表项加载较慢的问题

    之前使用qlistwidget加载其他widget显示时会存在一个问题,就是大量的数据加载会导致界面之间的切换卡顿。如图所示: 大量的数据会导致进入这个界面的速度变慢 原本的代码是这样的 现在只需要在这段代码的后面加入这样的代码即可完成分段式加载,需要注意的是在加载完

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包