String day="20090605";
中间省略
pst = conn.prepareStatement ("SELECT * FROM storesave WHERE liushuidanhao like ? order by liushuidanhao");
pst.setString(1, day+"'%'" );
rs = pst.executeQuery();
while(rs.next())
{
省略....
}
运行报错...[Microsoft][ODBC 驱动程序管理器] 无效的游标状态
我的意思是要做一个模糊查询 SELECT * FROM storesave WHERE liushuidanhao like '20090605%' order by liushuidanhao 直接复制进sql里运行成功
放在代码里就报错。.
pst.setString(1, day+"'%'" ); 我换成 pst.setString(1,day+"%");也试过 . 也写成过 like ?'%'
都试过了。....就是有问题
应该是查询成功了 但无符合记录 rs是空的 循环里的语句他一次都没执行.....
到底这个通配符应该怎么写.....
中间省略
pst = conn.prepareStatement ("SELECT * FROM storesave WHERE liushuidanhao like ? order by liushuidanhao");
pst.setString(1, day+"'%'" );
rs = pst.executeQuery();
while(rs.next())
{
省略....
}
运行报错...[Microsoft][ODBC 驱动程序管理器] 无效的游标状态
我的意思是要做一个模糊查询 SELECT * FROM storesave WHERE liushuidanhao like '20090605%' order by liushuidanhao 直接复制进sql里运行成功
放在代码里就报错。.
pst.setString(1, day+"'%'" ); 我换成 pst.setString(1,day+"%");也试过 . 也写成过 like ?'%'
都试过了。....就是有问题
应该是查询成功了 但无符合记录 rs是空的 循环里的语句他一次都没执行.....
到底这个通配符应该怎么写.....
这样写就行
200906050001 200906050002 这样形式存在的.....
没进循环就是没有查询到记录........
why.............
我sql里写 select * from storesave where liushuidanhao like '20090605%'
运行出来一大片记录....
pst.setString(1, "'" + day +"%'" ); 加转义符看看pst.setString(1, "'" + day +"\%'" );
public void timesearch() {
textArea.setText("");
String day;
day = (textField_1.getText().trim());
System.out.println(day);
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:project");
pst = conn
.prepareStatement ("select * from storesave where (liushuidanhao like ? ) order by liushuidanhao");
pst.setString(1, day+"%" ); rs=pst.executeQuery();
while(rs.next()){
System.out.println("1");
textArea.setText(textArea.getText() + "流水单号:"
+ rs.getString("liushuidanhao") + " 工单号:"
+ rs.getString("gongdanhao") + " 油漆名称"
+ rs.getString("mingchen") + " 总价"
+ rs.getString("totalprice") + "\n");
}
} catch (Exception ee) {
ee.printStackTrace(); } finally {
conn = null;
rs = null;
pst = null;
} }
谢谢...
//sqlStr = "select id,name from 表 where name like '%'+?+'%'";这种方式对应的
ps.setString(1, "abc"); //经过测试mysql中不支持这种写法,sqlserver支持,oracle没测试不清楚。
//sqlStr = "select id,name from 表 where name like ?"; 对应的是ps.setString(1, day+"%");
//sqlStr = "select id,name from 表 where name like '%'+?+'%'";这种方式对应的
ps.setString(1, day); //经过测试mysql中不支持这种写法,sqlserver支持,oracle没测试不清楚。
给分,闪人
替换成 do{省略}
while(rs.next()) 则还是报错显示 无效的游标状态
不进循环可能有几个问题:
第一:驱动问题 你的 sun.jdbc.odbc.JdbcOdbcDriver换成com.microsoft.jdbc.sqlserver.SQLServerDriver试试
第二:while(rs.next()){
System.out.println("1");
textArea.setText(textArea.getText() + "流水单号:"
+ rs.getString("liushuidanhao") + " 工单号:"
+ rs.getString("gongdanhao") + " 油漆名称"
+ rs.getString("mingchen") + " 总价"
+ rs.getString("totalprice") + "\n");
} 是否打出1?如果打出1,说明rs是有结果的,如果没有打出1,试着把结果集设置成pst = conn
.prepareStatement ("select * from storesave where (liushuidanhao like ? ) order by liushuidanhao",ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY); 然后再看看
select * from storesave
试试
where 条件去掉后 查询成功
我的textarea里终于有东西了
表示 数据库连接没问题
表示 问题还是出在 查询条件where (liushuidanhao like ? ) order by liushuidanhao........
liushuidanhao给他一个具体值试一下
他都当作是一个字符来处理 没有转译为sql里的通配符...
头疼啊。..
救命啊....
rs=pst.executeQuery();
这句执行之前,你的pst里面的sql文和parameters分别都是什么
4个问号?
pst.setString(1,day+"????");
这样吗?
老样子......
如果把后面的order by语句去了,有数据的话,那么可以这样试试,把order by换成group by...order by...看行不行。
pst = conn.prepareStatement("SELECT * FROM storesave WHERE liushuidanhao like ? order by liushuidanhao");
pst.setString(1, day+"%" );
这样应该可以啊