我使用jdbc将数据插入数据库。由于某些原因,我不能使用PreparedStatement,我必须直接执行查询。我有什么特殊的角色可以逃脱?我只知道单引号(')和反斜杠()。
编辑:我不能使用PreparedStatement的原因是,我的应用程序从服务器接收json数据,其值始终表示为String。 例如:
{
"tableName": "movies",
"data": [
"The Big Lewbowski",
"119",
"1998-06-03"
]
}
这意味着我现在必须将数据插入到表格电影中。 我只能将数据反序列化为List 现在,如果我使用PrepareStatement。
String sql = "insert into movies values(?,?,?)";
PreparedStatement ps = con.prepareStatement(sql);
System.out.println(ps.toString());
for (int i = 0; i < newData.size(); i++) {
ps.setObject(i + 1, newData.get(i));
}
System.out.println(ps.toString());
com.mysql.jdbc.JDBC4PreparedStatement@6267c3bb: insert into movies values(** NOT SPECIFIED **,** NOT SPECIFIED **,** NOT SPECIFIED **)
com.mysql.jdbc.JDBC4PreparedStatement@6267c3bb: insert into movies values('The Big Lewbowski','117','1998-06-03')
正如您所看到的,它不起作用。我的电影表有不同的列类型: 电影(title varchar,runtime int,releaseDate Date); 它可以插入数据,但必须有隐式转换,对吗?
答案 0 :(得分:3)
我无法使用PreparedStatement的原因是,我的应用程序从服务器接收json数据,其值始终表示为String
这是一个不成功的人。您应该能够从数据库中确定架构,然后确定如何适当地转换每个JSON值。除此之外,JSON中的格式可能与数据库预期的格式不同。
不要通过直接在SQL中包含值来抛弃安全性:在代码中执行转换,并将PreparedStatement
与参数化值一起使用。
您接下来的任务应该是: