我正在尝试使用excel准备考勤表,并希望将文件保存为.csv格式,这将与mysql进行链接。如何通过jdbc程序动态创建表名。 任何帮助都不胜感激。
答案 0 :(得分:2)
您必须通过“string bashing”生成SQL。例如:
String tableName = ...
String createTableSQL = "Create table " + tableName;
Statement statement = connection.createStatement(createTableSQL);
statememt.execute();
等等。
警告:此方法存在风险。特别是,如果您根据用户输入的字符串或从电子表格或CSV或其他内容中读取的字符串生成表名,则可以输入实际上是SQL语句的字符串。最终结果是,他们可能会欺骗您的程序对您的数据库执行有害的SQL。
对此的正常防御是使用PreparedStatement,并对SQL中所有用户提供的详细信息使用占位符。不幸的是,这仅适用于注入SQL值。你不能用表名,列名和其他各种东西来做这件事。
答案 1 :(得分:1)
您可以使用.sql+shell
和mysql command-line-client
mysql-dataloader
脚本
骨架应该是这样的:
.csv
的{{1}}文件。 attendence_dd_mm_yyyy.csv
)。attendence_dd_mm_yyyy
。 mysql -u usename -ppassword -e <Create table tablename> <fixed columns>
将csv加载到新创建的表中。 我知道我有点偏离主题仍然建议这个选项,因为
mysql -u usename -ppassword -e LOAD DATA INFILE ...
提供给您的应用程序代码。如果您的代码进入DDL permission
或类似的话,可能会出现问题。 infinite loop
也会影响其他连接的应用程序(如果有的话)。propagate to DB
是您的方法的SQL-Injection
。如果您使用任何其他数据库,请使用类似的行。