查询字符串中的Java SQL引号

Cod*_*lus 0 java sql quotes keyword

我有以下代码来执行SQL查询:

query = String.format("select * from users where user_name = '%s';", results.getString(1));
results2 = mStmt.executeQuery(query);
Run Code Online (Sandbox Code Playgroud)

数据集中的一个user_name的值为"O'brien".由于"O'brien"中的单个括号,这会破坏我的查询.查询将变为:

select * from users where user_name = 'O'brien'
Run Code Online (Sandbox Code Playgroud)

克服这个问题而不是修改数据的策略是什么?

编辑:准备好的声明确实解决了单引号问题,但这只是问题的一部分.我有一个字符串值包含单词"UNDER".这是一个SQL关键字.例如,我有一个带有查询的名为insertAll的preparedStatement:

insert into names (id, val1, val2, val3, val4, tTime, val5) values (?, ?, ?, ?, ?, ?, ?)
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

Ant*_*sil 5

使用prepareStatement设置参数.您的代码是本书中可用于SQL注入的代码. http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • @CodeKingPlusPlus请发布您当前的代码和StackTrace以查看错误.在其实际状态中,它看起来没有错误.帮助我们帮助您. (2认同)