从BASH Array创建SQLite3表

时间:2016-12-02 16:31:30

标签: arrays linux bash sqlite

我正在尝试用bash中的数组创建一个表。我已经想出如何从文本文件中创建数组,但是创建表要么不起作用,要么只使用数组中的最后一个值。我想做一些不可能的事吗?

我的剧本:

readarray -t array < file.txt
for e in "${array[@]}" 
do 
DB_PATH="" 
DB_NAME=$DB_PATH"Test.db" 
sqlite3 $DB_NAME << EOF 
DROP TABLE IF EXISTS tblA;
CREATE TABLE tblA(A,B,C);
INSERT INTO tblA (A,B) SELECT tblB.A,tblB.B,1 FROM tblB WHERE tblB.D="$e"; 
EOF
done

我还试过WHERE tblB.D="${array[@]}";

已编辑以包含整个SQL代码。

2 个答案:

答案 0 :(得分:1)

问题是在每次循环迭代中都会重新创建表(即清空)。

仅创建一次表。在循环内部,只执行INSERT。

答案 1 :(得分:1)

虽然主键继续增加而不是重新开始(一个小问题),但此脚本正在运行:

sqlite3 Test.db "DELETE FROM tblA;"

getArray() {
    array=()
    while IFS= read -r line
    do
         array+=("$line")
    done < "$1"
    }

getArray "file.txt"

for e in "${array[@]}"
do
    DB_PATH="" 
    DB_NAME=$DB_PATH"Test.db" 
    sqlite3 $DB_NAME << EOF 
    INSERT INTO tblA (A,B) SELECT tblB.A,tblB.B,1 FROM tblB WHERE tblB.D="$e"; 

EOF

done