预编译SQL语句的使用问题
java里面的PreparedStatement的使用,假如?是代表字段名,该怎么写。我写如下select?fromnews?用title(字段名)代替后查询出来的结果,...
java里面的
PreparedStatement的使用,假如?是代表字段名,该怎么写。
我写如下
select ? from news
?用title(字段名)代替后
查询出来的结果,是把它理解为 select "title" from news
怎么做才可以使字段名用?来代替
可能我没说清楚,我用的是mysql。
java代码如下:
Connection con=..........
PreparedStatement ps=con.prepareStatement("select ? from news");
ps.setString(1, "Title");
ResultSet rs=ps.executeQuery();
查询的结果全是"Title"这个字符串,并不是我所想的,查询所有标题。 展开
PreparedStatement的使用,假如?是代表字段名,该怎么写。
我写如下
select ? from news
?用title(字段名)代替后
查询出来的结果,是把它理解为 select "title" from news
怎么做才可以使字段名用?来代替
可能我没说清楚,我用的是mysql。
java代码如下:
Connection con=..........
PreparedStatement ps=con.prepareStatement("select ? from news");
ps.setString(1, "Title");
ResultSet rs=ps.executeQuery();
查询的结果全是"Title"这个字符串,并不是我所想的,查询所有标题。 展开
2个回答
展开全部
void setString(int parameterIndex,
String x)
PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");
pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了准备。
2、传递 IN 参数
在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成,其中 XXX 是与该参数相应的类型。例如,如果参数具有Java 类型 long,则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。例如,以下代码将第一个参数设为 123456789,第二个参数设为 100000000:
pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);
一旦设置了给定语句的参数值,就可用它多次执行该语句,直到调用clearParameters 方法清除它为止。在连接的缺省模式下(启用自动提交),当语句完成时将自动提交或还原该语句。
如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。如果这一点不成立,那么试图通过使用PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的。
利用 pstmt(前面创建的 PreparedStatement 对象),以下代码例示了如何设置两个参数占位符的值并执行 pstmt 10 次。如上所述,为做到这一点,数据库不能关闭 pstmt。在该示例中,第一个参数被设置为 "Hi"并保持为常数。在 for 循环中,每次都将第二个参数设置为不同的值:从 0 开始,到 9 结束。
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}
String x)
PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");
pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了准备。
2、传递 IN 参数
在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成,其中 XXX 是与该参数相应的类型。例如,如果参数具有Java 类型 long,则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。例如,以下代码将第一个参数设为 123456789,第二个参数设为 100000000:
pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);
一旦设置了给定语句的参数值,就可用它多次执行该语句,直到调用clearParameters 方法清除它为止。在连接的缺省模式下(启用自动提交),当语句完成时将自动提交或还原该语句。
如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。如果这一点不成立,那么试图通过使用PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的。
利用 pstmt(前面创建的 PreparedStatement 对象),以下代码例示了如何设置两个参数占位符的值并执行 pstmt 10 次。如上所述,为做到这一点,数据库不能关闭 pstmt。在该示例中,第一个参数被设置为 "Hi"并保持为常数。在 for 循环中,每次都将第二个参数设置为不同的值:从 0 开始,到 9 结束。
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}
推荐于2016-03-25
展开全部
PreparedStatement.setXXX(index,Value);
本来就是设定值的。
建议设定字段还是使用+。
String List<X> getList(List<String> field){
String fieldList="";
StringBuffer buf=new StringBuffer().append(SELECT ");
for(oint i=0;i<field.size();i++){
buf.append(f);
if(i!=field.size()-1) buf.append(",");
}
buf.append(" FROM table");
...
}
本来就是设定值的。
建议设定字段还是使用+。
String List<X> getList(List<String> field){
String fieldList="";
StringBuffer buf=new StringBuffer().append(SELECT ");
for(oint i=0;i<field.size();i++){
buf.append(f);
if(i!=field.size()-1) buf.append(",");
}
buf.append(" FROM table");
...
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询