【发布时间】:2018-08-24 18:03:56
【问题描述】:
所以我将 .csv 文件中的信息导入数据库。但是,我在 csv 文件中用户输入的描述有问题,因为它们包含破坏 SQL 导入的撇号。
我的 Import 语句是 String sqlJob =
"INSERT INTO job (ID, Job_Contact, Internal_Comment, Customer_Name,"
+ " Duration, Job_Location, Job_Completion_Date, Job_Technician,"
+ " Job_Asset, Job_Type, Job_Description) VALUES ('"
+csvRecord.get(i)+"', '"+csvRecord.get(26)+"', '"+csvRecord.get(16)
+"', '"+csvRecord.get(2)+"', '"+csvRecord.get(31)+"', '"+csvRecord.get(27)
+"', '"+csvRecord.get(28)+"', '"+csvRecord.get(29)+"', '"+csvRecord.get(30)
+"', '"+csvRecord.get(33)+"', '"+csvRecord.get(34)+"');";
一个简化的形式是
"INSERT INTO job (ID, Description) VALUES ('"
+ csvRecord.get(i) + "', '" + csvRecord.get(34) + "');";
问题是csvRecord.get(34) 有时会包含撇号。例如“My name's Bob”,并且 Bob 中的撇号破坏了周围的撇号,这些撇号需要声明该值是 SQL 的字符串。
是否有一种简单的方法来解析字符串并在撇号前添加转义字符,或者我应该以不同的方式格式化我的原始 SQL 命令。
谢谢!
【问题讨论】:
-
使用参数化查询而不是连接字符串。
-
@TheImpaler 的回答提到了这一点及其解决方案,但“SQL 注入”是您在尝试滚动自己的字符转义代码时面临的主要问题。如果您使用可以为您管理参数的库,这对您来说会更安全,也更容易。