搜索
查看: 2908|回复: 4

sqlite的replace语句参数个数的疑问

  [复制链接]

9

主题

49

帖子

1万

积分

九级会员

Rank: 12Rank: 12Rank: 12

积分
17754
发表于 2013-11-28 16:54:19 | 显示全部楼层 |阅读模式

  1. import sqlite

  2. var sqlConnection = sqlite("/dbReplace.db")  
  3. if( not sqlConnection.existsTable("tableName") ){
  4.     sqlConnection.exec( "create table tableName(
  5.         title primary key,
  6.         length,
  7.         tm
  8.         );"
  9.     )   
  10. }

  11. sqlConnection.exec( "replace into tableName values ('Silence',11.8,'123')")
  12. sqlConnection.exec("replace into tableName(title,tm) values ('Silence','456')")


  13. io.open()
  14. for title,length,tm in sqlConnection.each("select * from tableName") {
  15.     io.print( title,length,tm )
  16. }

  17. sqlConnection.close()
复制代码


上面的代码 第二个sql语句中没有把length字段放进去,但是执行后length字段为null了。这样写法有什么错误吗,我想在replace的时候保持length字段不变。
回复

使用道具 举报

9

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2013-11-28 17:36:08 | 显示全部楼层

一种方法行不通就换另外一种方法,碰到壁了还可以去旁边找找有没有窗户。 [code][lang=aardio,false]import sqlite

一种方法行不通就换另外一种方法,碰到壁了还可以去旁边找找有没有窗户。

  1. import sqlite

  2. var db = sqlite(":memory:")
  3. if( not db.existsTable("tableName") ){
  4.     db.exec( "CREATE TABLE tableName(
  5.         title PRIMARY KEY,
  6.         length,
  7.         tm
  8.         );"
  9.     )   
  10. }

  11. db.exec( "REPLACE INTO tableName VALUES ('Silence',11.8,'123')")

  12. db.exec("
  13.         INSERT OR IGNORE INTO tableName (title,length,tm) VALUES (@title,@length,@tm);  
  14.         UPDATE tableName SET tm=@tm",{
  15.                 title = "Silence";
  16.                 length = 123;
  17.                 tm = "456"
  18.         } )

  19. io.open()
  20. for title,length,tm in db.each("SELECT * FROM tableName") {
  21.     io.print( title,length,tm )
  22. }
复制代码

评分

参与人数 1银币 +60 收起 理由
aaucn + 60 非常感谢

查看全部评分

回复

使用道具 举报

9

主题

49

帖子

1万

积分

九级会员

Rank: 12Rank: 12Rank: 12

积分
17754
 楼主| 发表于 2013-11-28 18:15:38 | 显示全部楼层

非常感谢roger版主指导。 在update语句后加上where title=@title 就能实现根据主键replace部分字段的功能了。

非常感谢roger版主指导。
在update语句后加上where title=@title 就能实现根据主键replace部分字段的功能了。
回复

使用道具 举报

8

主题

67

帖子

449

积分

二级会员

Rank: 3Rank: 3

积分
449
发表于 2013-12-6 11:58:41 | 显示全部楼层

replace=delete+insert 所以出现null是必然的,因为delete掉了

replace=delete+insert
所以出现null是必然的,因为delete掉了
回复

使用道具 举报

1

主题

8

帖子

84

积分

一级会员

Rank: 2

积分
84
发表于 2014-2-19 05:26:09 | 显示全部楼层

学习中。

学习中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 16:08 , Processed in 0.078125 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表