SQLite数据插入异常

对比两条SQL语句

1.insert into MemberInfo(MTypeId,MName,MPhone,MMoney,MIsDelete) values(@tid,@name,@phone,@money,0)
2.insert into memberinfo(mtypeid,mname,mphone,mmoney,misDelete) values(@tid,@name,@phone,@money,0)


看似相同,实则不同,运行第一条会出现以下错误

“System.Data.SQLite.SQLiteException”类型的未经处理的异常在 System.Data.SQLite.dll 中发生 


其他信息: SQL logic error or missing database


5 values for 3 columns

在SQLite Studio中执行该语句的错误是这样的

[22:47:36] Error while executing SQL query: table MemberInfo has no column named MName,MPhone,MMoney



错误的原因:第一条sql语句中使用了中文格式的",",这不符合规范,切记一定使用英文半角输入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[说明] DiSQLiteApi.dcu 文件根据实际开发环境在包内进行选择 本版本的 ASqlite 是基于 livu999 大侠的修改版继续魔改 原帖地址:http://download.csdn.net/download/ilvu999/6369053 本版本只支持 D2009 以上的 Unicode 版本的 Delphi 原作者在主要单元文件已经说明清楚了,老版本 Delphi 请绕道 为了照顾 XE2 下使用的朋友,故最后做了兼容 再照顾一下 DBGrid,令其不再显示 (MEMO) 另外做了兼容,在 XE8 开发环境及 64 位平台下通过基本测试            katar1024 (网名:阿龙) 2017-08-22 大改支持 TWideMemo,在此解决乱码问题 修正启用 SQLiteDateFormat 的情况下读取非正规日期字符串引起异常的 bug 查询语句中表名和字段名用中括号 [] 引括,可以使用 Index 之,等保留字段名 删除属性 CharacterEncode,一律按默认的 Uft-8 格式存取字符串 删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行效率 插入记录后,同步读取库中的数字和日期默认值,对取值自动分配 id 有意义 所有调试记录代码全部加了条件编译块控制,减小体积,提高调度效率 优化类型数据存取分支代码,减少体积,提高读写效率 去除初次读取数据 100 字节大小缓冲区的限制,防止字符串乱码 其它性能优化 其它 bug 修复 2017-08-24 修正设计器属性框中 Active 属性设置为 True,但运行时未打开查询的 bug ftString、ftWideString、ftMemo、ftWideMemo 等字符串字段通过乱码测试 Memo 字段添加显示功能,控件不再显示(MEMO)或(WIDEMEMO) Memo 字段支持 AsInteger、AsDataTime 等数据功能(设计器预定义的字段无效) 2017-08-25 修改关键属性时自动关闭数据连接 TransactionType、TempStore, DefaultSynchronous 等属性从字符串值修改为枚举值 修正 TypeLess 功能 添加 TASQLiteBaseQuery 一些关键属性在设计器中改变后自动关闭查询的功能 修正 Filtered 属性在设计器中改变后,但结果没变的 bug PS: 本来想弄个批处理提交功能的(BatchedUpdates 或 CachedUpdates), 在某些场合很实用,但最近改的问题太多了,改得好累,等下次真正用到了再补上 对 SQLite 的初恋蛮深的,但不得不吐槽,想说爱它真的很不容易
[说明] DiSQLiteApi.dcu 文件根据实际开发环境在包内进行选择 本版本的 ASqlite 是基于 livu999 大侠的修改版继续魔改 原帖地址:http://download.csdn.net/download/ilvu999/6369053 本版本只支持 D2009 以上的 Unicode 版本的 Delphi 原作者在主要单元文件已经说明清楚了,老版本 Delphi 请绕道 为了照顾 XE2 下使用的朋友,故最后做了兼容 再照顾一下 DBGrid,令其不再显示 (MEMO) 另外做了兼容,在 XE8 开发环境及 64 位平台下通过基本测试            katar1024 (网名:阿龙) 2017-08-22 大改支持 TWideMemo,在此解决乱码问题 修正启用 SQLiteDateFormat 的情况下读取非正规日期字符串引起异常的 bug 查询语句中表名和字段名用中括号 [] 引括,可以使用 Index 之,等保留字段名 删除属性 CharacterEncode,一律按默认的 Uft-8 格式存取字符串 删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行效率 插入记录后,同步读取库中的数字和日期默认值,对取值自动分配 id 有意义 所有调试记录代码全部加了条件编译块控制,减小体积,提高调度效率 优化类型数据存取分支代码,减少体积,提高读写效率 去除初次读取数据 100 字节大小缓冲区的限制,防止字符串乱码 其它性能优化 其它 bug 修复 2017-08-24 修正设计器属性框中 Active 属性设置为 True,但运行时未打开查询的 bug ftString、ftWideString、ftMemo、ftWideMemo 等字符串字段通过乱码测试 Memo 字段添加显示功能,控件不再显示(MEMO)或(WIDEMEMO) Memo 字段支持 AsInteger、AsDataTime 等数据功能(设计器预定义的字段无效) 2017-08-25 修改关键属性时自动关闭数据连接 TransactionType、TempStore, DefaultSynchronous 等属性从字符串值修改为枚举值 修正 TypeLess 功能 添加 TASQLiteBaseQuery 一些关键属性在设计器中改变后自动关闭查询的功能 修正 Filtered 属性在设计器中改变后,但结果没变的 bug PS: 本来想弄个批处理提交功能的(BatchedUpdates 或 CachedUpdates), 在某些场合很实用,但最近改的问题太多了,改得好累,等下次真正用到了再补上 对 SQLite 的初恋蛮深的,但不得不吐槽,想说爱它真的很不容易
### 回答1: 在 SQLite 数据库中开启事务可以提高数据库操作的效率和数据的完整性。步骤如下: 1. 打开数据库连接。 2. 在开启事务之前,可以先设置数据库为自动提交模式,以避免手动提交事务。可以使用以下 SQL 语句设置: ``` PRAGMA auto_vacuum = FULL; -- 设置数据库在每次提交事务后自动进行空间回收 PRAGMA synchronous = NORMAL; -- 设置事务同步模式,使得每次提交事务后,数据都会持久化到磁盘 ``` 3. 执行 BEGIN TRANSACTION 命令,开启一个事务。 4. 依次执行插入操作,使用 INSERT INTO 语句向数据库表中插入数据。例如: ``` INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); ``` 5. 如果插入操作中发生错误,可以回滚事务,撤销之前的插入操作。使用 ROLLBACK 命令回滚事务。 6. 如果所有插入操作都执行成功,可以提交事务,使其生效。使用 COMMIT 命令提交事务。 7. 关闭数据库连接。 以上就是使用 SQLite 插入开启事务的简要步骤。通过开启事务,可以在保证数据完整性的同时,提高数据库操作的效率。 ### 回答2: SQLite是一个嵌入式数据库管理系统,广泛用于移动设备和嵌入式系统中。在SQLite中,可以通过使用开启事务来对数据库进行插入操作。 事务是数据库中执行一系列操作的单元,可以保证这些操作要么全部成功,要么全部失败,保持数据库的一致性。开启事务可以提高插入操作的效率和性能。 要在SQLite中开启一个事务,可以使用以下步骤: 1. 首先,打开数据库连接。通过调用SQLite的API函数,可以打开一个数据库连接。 2. 调用BEGIN命令,表示开始一个事务。在SQLite中,可以使用BEGIN TRANSACTION命令来开始一个事务。 3. 执行插入操作。在事务中,可以执行多个插入操作,例如插入多条记录。 4. 如果所有的插入操作都成功,可以调用COMMIT命令来提交事务。在SQLite中,可以使用COMMIT TRANSACTION命令来提交事务。 5. 如果有任何一个插入操作失败或者发生错误,可以调用ROLLBACK命令来回滚事务。在SQLite中,可以使用ROLLBACK TRANSACTION命令来回滚事务。 6. 最后,关闭数据库连接。通过调用SQLite的API函数,可以关闭数据库连接,释放资源。 通过使用事务,可以有效地管理插入操作,避免数据库不一致的问题,并且提高了插入操作的执行效率和性能。 总结起来,使用SQLite开启事务的步骤包括打开数据库连接、开始事务、执行插入操作、提交事务或回滚事务,并最后关闭数据库连接。 通过这种方式,可以对插入操作进行有效管理,保证数据的一致性和可靠性。 ### 回答3: 在SQLite中,我们可以使用事务的方式来执行插入操作。事务是一种将多个数据库操作作为一个单元执行的方式,要么全部成功,要么全部失败。通过使用事务,可以提高插入操作的性能和数据完整性。 使用SQLite进行插入操作时,我们可以按照以下步骤开启事务: 1. 打开数据库连接:首先,我们需要使用SQLite的API来打开数据库连接,这可以通过调用`sqlite3_open`函数完成。 2. 开始事务:在打开数据库连接后,我们需要使用`BEGIN TRANSACTION` SQL语句来开始一个新的事务。这将告诉SQLite将后续的插入操作视为一个事务单元。 3. 执行插入操作:在开始事务后,我们可以通过执行SQL语句来插入数据插入操作可以是单个插入语句,也可以是多个插入语句的批量操作。 4. 提交事务:在完成插入操作后,我们可以使用`COMMIT` SQL语句来提交事务。这将告诉SQLite将所有的插入操作持久保存到数据库中。 5. 关闭数据库连接:最后,我们需要使用SQLite的API来关闭数据库连接,这可以通过调用`sqlite3_close`函数完成。 需要注意的是,如果在事务中出现错误或异常,我们可以使用`ROLLBACK` SQL语句来回滚事务,丢弃已做的修改。 通过使用事务,可以确保插入操作的原子性和一致性,并在一些特定情况下提高插入操作的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值