java 和 SQL 的撇号问题
APOSTROPHE issue with java and SQL
我有代码,在我的搜索中有单引号或撇号
我有一个正在测试 table 的数据库,名称列中的值是 "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){}
}
您不必为 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
我有代码,在我的搜索中有单引号或撇号
我有一个正在测试 table 的数据库,名称列中的值是 "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){}
}
您不必为 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