SQLite UPDATE语句执行无报错但未更新数据求助
问题描述
在Linux Mint 64位系统中,我使用sqlite3编写了如下Bash脚本执行数据更新操作:
#!/bin/bash _Sqlite_UpdateRecord() { local database_name="$1" local NameTable="$2" local NameColumn1="$3" local ok_or_not="$4" local NameColumn2="$5" local symbol_name="$6" local query="UPDATE '$NameTable' SET '$NameColumn1'='$ok_or_not' WHERE '$NameColumn2'='$symbol_name';" #echo "SQL stringa $query" if sqlite3 "$database_name" "$query"; then echo "Aggiornamento nel database riuscito." return 0 else echo "Errore durante l'aggiornamento nel database." return 1 fi } _Sqlite_UpdateRecord "BinCexExchangeInfo.db" "ROBOTEST" "OkorNot" "1" "symbol" "LUNAUSDT"
但脚本未生效,我尝试在SQLite浏览器中直接执行SQL语句:
UPDATE 'ROBOTEST' SET 'OkorNot'='1' WHERE 'symbol'='LUNAUSDT';
执行结果显示:
Execution finished without errors. Result: query executed successfully. Took 0ms, 0 rows affected At line 1: UPDATE 'ROBOTEST' SET 'OkorNot'='1' WHERE 'symbol'='LUNAUSDT';
无报错提示,但刷新表后未看到数据更新,请问这是什么原因?
原因及解决方案
- 核心问题:SQL语句中给表名、列名添加了单引号,SQLite会将带单引号的表/列名识别为字符串字面量,而非实际的表和列引用。这导致你的UPDATE语句实际上在操作一个不存在的表和列,因此不会报错,但也不会修改任何数据行。
- 修复方法:移除表名和列名的单引号。如果表名或列名包含特殊字符(如空格、SQL关键字),可以用反引号(`)或双引号包裹,但你的表和列名均为常规命名,直接去掉单引号即可。
修复后的Bash脚本:
#!/bin/bash _Sqlite_UpdateRecord() { local database_name="$1" local NameTable="$2" local NameColumn1="$3" local ok_or_not="$4" local NameColumn2="$5" local symbol_name="$6" # 移除表名和列名的单引号 local query="UPDATE $NameTable SET $NameColumn1='$ok_or_not' WHERE $NameColumn2='$symbol_name';" #echo "SQL stringa $query" if sqlite3 "$database_name" "$query"; then echo "数据库更新成功。" return 0 else echo "数据库更新失败。" return 1 fi } _Sqlite_UpdateRecord "BinCexExchangeInfo.db" "ROBOTEST" "OkorNot" "1" "symbol" "LUNAUSDT"
直接执行的SQL语句改为:
UPDATE ROBOTEST SET OkorNot='1' WHERE symbol='LUNAUSDT';
内容的提问来源于stack exchange,提问作者ernesto gevara
相关产品推荐
相关产品推荐

