SQL:如何解决这些错误?
问题描述:
因此,我必须遍历.dat文件的文件夹,提取数据并使用INSERT INTO将数据插入到数据库中。SQL:如何解决这些错误?
这里是其中的一个文件的引擎收录,看我处理的数据:
要运行脚本,我只要致电:
populate_database.sh directoryWithDatFiles
和内容populate_database.sh脚本:
rm test.sql;
sqlite3 test.sql "CREATE TABLE HotelReviews (HotelID SMALLINT, ReviewID SMALLINT, Author CHAR, Content CHAR, Date CHAR, Readers SMALLINT, HelpfulReviews SMALLINT, Over$
IFS=$'\n'
for file in $1/*;
do
author=($(grep "<Author>" $file | sed 's/<Author>//g'));
content=($(grep "<Content>" $file | sed 's/<Content>//g'));
date=($(grep "<Date>" $file | sed 's/<Date>//g'));
readers=($(grep "<No. Reader>" $file | sed 's/<No. Reader>//g'));
helpful=($(grep "<No. Helpful>" $file | sed 's/<No. Helpful>//g'));
overall=($(grep "<Overall>" $file | sed 's/<Overall>//g'));
value=($(grep "<Values>" $file | sed 's/<Value>//g'));
rooms=($(grep "<Room>" $file | sed 's/<Room>//g'));
location=($(grep "<Location>" $file | sed 's/<Location>//g'));
cleanliness=($(grep "<Cleanliness>" $file | sed 's/<Cleanliness>//g'));
receptionarea=($(grep "<Check in/front desk>" $file | sed 's/<Check in \/ front desk>//g'));
service=($(grep "<Service>" $file | sed 's/<Service>//g'));
businessservice=($(grep "<Business service>" $file | sed 's/<Business service>//g'));
length=${#author[@]}
hotelID="$(echo $file | sed 's/.dat//g' | sed 's/[^0-9]*//g')";
for((i = 0; i < length; i++)); do
sqlite3 test.sql "INSERT INTO HotelReviews VALUES($hotelID, $i, 'author', 'content', 'date', ${readers[i]}, ${helpful[i]}, ${overall[i]}, 9, 10, ${location[i]}, ${cleanliness[i]}, ${receptionarea[i]}, ${service[i]}, ${businessservice[i]})";
done
done
sqlite3 test.sql "SELECT * FROM HotelReviews;"
问题我有虽然,尽管大部分脚本都在工作,但仍然有15个列中有5个不能工作。我就截图试图将代码从改变,当我得到的错误:
'author' --> ${author[i]}: http://i.imgur.com/zKQLSqT.jpg
'content' --> ${content[i]}: http://i.imgur.com/pnirIo3.jpg
'date' --> ${date[i]}: http://i.imgur.com/urF5DTa.jpg
9 --> ${value[i]}: http://i.imgur.com/AnBFSWp.jpg
10 --> ${rooms[i]}: same errors as above
无论如何,如果有人可以帮助我走出这一点,我会很感激大量。
干杯!
答
如果您处理很多XML,我建议您开始了解SAX解析器,比如Python标准库中的解析器。任何愿意写这样的shell脚本的人都可以学习它,结果会更容易阅读,至少有一个祷告是正确的。
如果您想坚持使用正则表达式,请转至awk。使用“>”作为字段分隔符,你的脚本可以使用awk线被简化像
/<Author>/ { gsub(/'/, "''", $2); author=$2 }
/<Content>/ { gsub(/'/, "''", $2); content=$2 }
...
END { print author, content, ... }
的GSUB需要你的SQL的护理由数据中的任何单引号引用加倍问题。
没有看到实际运行的命令,这些都看起来像SQL引用错误。它看起来像你需要引用你的SQL语句中的值。换句话说,这是有效的SQL注入。 –
这是这里的命令,不是吗? sqlite3 test.sql“INSERT INTO HotelReviews VALUES($ hotelID,$ i,'author','content','date',$ {readers [i]},$ {helpful [i]},$ {overall [i] },9,10,$ {location [i]},$ {cleanliness [i]},$ {receptionarea [i]},$ {service [i]},$ {businessservice [i]}); – Noob
如果他们是简单的引用错误,有没有可能修复它们/给我一些指针? – Noob