JDBC PreparedStatement 问题

PreparedStatement stat=con.prepareStatement("select * from t_factory where fac_address like '%?%'");

这个总是报错,
Exception in thread "main" java.sql.SQLException: No parameters defined during prepareCall()
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ServerPreparedStatement.getBinding(ServerPreparedStatement.java:751)
at com.mysql.jdbc.ServerPreparedStatement.setString(ServerPreparedStatement.java:1857)
at demo.TestJDBC.main(TestJDBC.java:14)

怎么解决

不要说字符串拼接哦

[b]问题补充:[/b]
[quote]
你没给PreparedStatement 设置参数啊
这个sql不是有个“?”吗,
[/quote]

是有?的,好像是因为在 '%?%'这么用才引起的问题,

引用这里的处理,http://gufenglian.iteye.com/blog/353654
[quote]
问题肯定就出在这个问号上,但是想象设置参数不就是用问号吗

仔细观察,发现这里把问号当成了条件,而不是参数的设置

这样

stmt = con.prepareStatement(select serviceCode from smsconfiginfo where configName like '%'?'%')

就可以了。
[/quote]
ps:提问前先用Google吧.

你没给PreparedStatement 设置参数啊

这个sql不是有个“?”吗,

prepareStatement 不能参数有?吧
调用存储过程那个才可以有?好像...

stat=con.prepareStatement("select * from t_factory where fac_address like '%?%'");
[color=red]stat.setObject(1, "a");[/color]

这样写应该没什么问题
你有没调用设置参数的,报错的时候是哪个语句

PreparedStatement stat=con.prepareStatement("select * from t_factory where fac_address like ?");
pst.setString(1, "%"+str+"%");
ResultSet rst = pst.executeQuery();

这样可以