我正在尝试使用Java JDBC在oracle中插入用户输入。我必须使用插入查询。
Oracle的列类型是varchar2。
如果用户没有输入特殊字符,我可以插入。 当用户输入像#这样的特殊字符时? /和$它给出异常
请帮助解析这些特殊字符。我需要使用插入查询,我不能在我的项目中使用存储过程或可调用语句。
感谢您的时间。
答案 0 :(得分:7)
据我所知,Oracle不要求你转义字符串值,所以:
INSERT INTO some_table (my_varchar_column) VALUES ('my string with a ?');
应该有用。
但要确保使用java.sql.PreparedStatement
,如下所示:
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO some_table (my_varchar_column) VALUES (?)");
preparedStatement.setString(1, "my string with a ?");
preparedStatement.execute();
使用预准备语句通常是针对数据库执行SQL的推荐方法。它将有助于提高性能并有助于防止SQL注入攻击。
答案 1 :(得分:1)
在SQL字符串常量中需要转义的唯一字符是单引号,这显然是因为它可能会混淆字符串的结尾。
如果您使用的是JDBC PreparedStatement,那么问号本身就代表一个参数。你会写类似
的东西插入mytable(field1,field2)值(?,?)
然后使用set语句设置这些值。如果将问号括在引号中,那么它应该只是字符串中的另一个字符,即
插入mytable(field1,field2)值(?,'?')
有一个参数吗?和一个字符串文字'?'。
PreparedStatement.set将执行必要的报价转义。如果您自己构建查询,则需要包含执行该转义的代码。 (只需加倍报价,例如
插入mytable(field1)值('Bob说','Hello''')