我有代码,我的搜索中有单引号或APOSTROPHE
我有拥有测试表的数据库,并且名称列中的值为"my'test"
运行时
SELECT * from test WHERE name = 'my''test';
这很好用
如果我在Java程序中使用它,我没有收到任何错误或任何结果
但如果我只用单引号命名,那么它就可以了
SELECT * from test WHERE name = 'my'test';
请你帮我理解。
Java代码
Connection con = null;
PreparedStatement prSt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.
getConnection("jdbc:oracle:thin:@localhost:1521:orcl"
,"user","pwd");
String query = "SELECT * from "
+ "WHERE name = ? ";
prSt = con.prepareStatement(query);
String value = "my'mobile";
char content[] = new char[value.length()];
value.getChars(0, value.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++) {
if (content[i] == '\'')
{
result.append("\'");
result.append("\'");
}
else
{
result.append(content[i]);
}
}
prSt.setObject(1, result.toString());
int count = prSt.executeUpdate();
System.out.println("===============> "+count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally{
try{
if(prSt != null) prSt.close();
if(con != null) con.close();
} catch(Exception ex){}
}
答案 0 :(得分:1)
您不必为PreparedStatement
只需使用:
prSt = con.prepareStatement(query);
prSt.setString("my'mobile");
此外:如果您使用SELECT
语句检索数据,则需要使用executeQuery()
而不是executeUpdate()
ResultSet rs = prst.executeQuery();
while (rs.next())
{
// process the result here
}
在继续项目之前,您可能希望浏览JDBC教程:http://docs.oracle.com/javase/tutorial/jdbc/index.html