0
因此,我必須遍歷.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
無論如何,如果有人可以幫助我走出這一點,我會很感激大量。
乾杯!
沒有看到實際運行的命令,這些都看起來像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