Java Oracle插入查询

时间:2009-08-05 13:13:26

标签: java oracle insert

我正在尝试使用Java JDBC在oracle中插入用户输入。我必须使用插入查询。

Oracle的列类型是varchar2。

如果用户没有输入特殊字符,我可以插入。 当用户输入像#这样的特殊字符时? /和$它给出异常

请帮助解析这些特殊字符。我需要使用插入查询,我不能在我的项目中使用存储过程或可调用语句。

感谢您的时间。

2 个答案:

答案 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''')