java和SQL中的撇号问题
我有代码,在搜索中有单引号或撇号 我有一个数据库,它有一个测试表,在名称列中的值是“我的测试” 跑步时java和SQL中的撇号问题,java,sql,apostrophe,Java,Sql,Apostrophe,我有代码,在搜索中有单引号或撇号 我有一个数据库,它有一个测试表,在名称列中的值是“我的测试” 跑步时 SELECT * from test WHERE name = 'my''test'; 这个很好用 如果我在Java程序中使用相同的方法,我不会得到任何错误或结果 但是如果我只引用一句话就可以了 SELECT * from test WHERE name = 'my'test'; 你能帮我弄明白吗 Java代码是 Connection con = null; Prepare
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){}
}
连接con=null;
PreparedStatement prSt=null;
试一试{
类forName(“oracle.jdbc.driver.OracleDriver”);
con=驾驶员管理器。
getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”
“用户”、“pwd”);
String query=“选择*from”
+“其中name=?”;
prSt=con.prepareStatement(查询);
String value=“我的手机”;
字符内容[]=新字符[value.length()];
value.getChars(0,value.length(),content,0);
StringBuffer结果=新的StringBuffer(content.length+50);
for(int i=0;i”+计数);
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(SQLE异常){
e、 printStackTrace();
}最后{
试一试{
如果(prSt!=null)prSt.close();
如果(con!=null)con.close();
}捕获(例外情况除外){}
}
对于PreparedStatement
只需使用:
prSt = con.prepareStatement(query);
prSt.setString("my'mobile");
另外:如果使用SELECT
语句检索数据,则需要使用executeQuery()
而不是executeUpdate()
在继续项目之前,您可能需要先阅读JDBC教程:向我们展示您的Java代码。但是看起来您没有使用PreparedStatement
,否则您就不会有problem@horse请看代码,你把事情搞得太复杂了。只需使用prSt.setString(1,“我的手机”)
这就是PreparedStatement
的美妙之处:你不必逃避任何事情,JDBC驱动程序会为你做任何必要的逃避。@andreas感谢你的回复,但它过去可以处理上述代码,但突然我想,在java 1.7之后,我认为它不会再工作了
ResultSet rs = prst.executeQuery();
while (rs.next())
{
// process the result here
}