我必须从一些文件中读取数据并将数据插入数据库中的不同表中。 Unix shell脚本是否足以完成这项工作?
在shell脚本中完成这项工作是否容易,还是应该在Java中执行此操作?
答案 0 :(得分:3)
如果您尝试导入的数据采用合理的格式(例如逗号分隔),并且您的数据库服务器具有合理的命令行实用程序,那么这应该没问题。 MySQL有“mysqlimport”命令行工具,可以接受描述文件格式的各种参数:
mysqlimport \
--fields-terminated-by=, \
--ignore-lines=1 \
--fields-optionally-enclosed-by='"' < datafile.txt
通过perl / sed / awk单行传递数据有助于以正确的格式获取数据,shell脚本可以轻松处理文件名,处理参数等的提示。
使用Unix提供的各种命令行工具是bash脚本的全部要点。 Perl,mysql等都是该工具包的一部分。
答案 1 :(得分:2)
有可能: 使用unix shell脚本,生成一个sql脚本并使用cli到数据库来执行sql脚本。
如果信息量足够小你可以在内存中构建SQL,我建议反对它,因为你永远不知道未来会怎样(并且它可能是非常大量的数据)。每个请求使用一个调用不允许您从有时可用的批量操作中受益。
答案 2 :(得分:2)
你可以,但它可能有点难看,例如,如果你使用mysql并假设你有一个存储在$ sql中的SQL字符串
echo $sql | mysql -u[user] -p[password] -h[host]
P.S。告诉我们您使用的数据库可能是一个好主意,因此我们可以提供更具体的帮助:p
编辑:更改了示例行,使其实际工作
答案 3 :(得分:2)
当然你可以,假设你有一个方便的SQL客户端!我用Sybase和isql命令行客户端完成了它。你甚至可以通过awk聪明地发送东西并发送脚本来动态生成命令。它可能不是最有效的方法,但是有很多机会来展示你的Unix黑客魔力。
答案 4 :(得分:1)
管道是你的朋友。
例如,在MySQL中:
echo 'load data infile /path/to/the/file into table table_name ...' |
mysql -u mysql_user_id -p
应该做的工作。
如果您的文件是以某种方式构建的,例如逗号/制表符分隔等。
有关详细信息,请查看数据库的手册。
答案 5 :(得分:0)
目前无法测试,但有类似的内容:
echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" |
mysql -u user -psecret -h host database
shell脚本中的应该可以工作。不知道如何从中获取数据
答案 6 :(得分:0)
这取决于您的数据库管理系统。他们中的大多数都有强大的shell工具来导入数据,甚至可以执行一些ETL功能。如果它们支持批量加载,那些工具甚至可以非常高效 - 通常Java JDBC不能那么容易地做到这一点。
答案 7 :(得分:-2)
Shell脚本(Bash或类似)的主要目的不是处理数据库。转到Java甚至更好,借此机会学习Python或Ruby等脚本语言的基础知识。