javase使用PreparedStatement遇见like查询继续问

浴漱淋沨 2018-06-14 08:56:42


代码片段如下:
if(e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("按下Enter键");
press();

事件部分:
press()方法:
	private void press() {
String goodsinput = JTi.getText().trim();
String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
String sql = "SELECT * from goods where GoodsID like ? or GoodsName like ?";
condb con = new condb();
try {
con.opensql();
ResultSet rs=con.selectsql(sql,paras);
if(rs.next()){
String[]temp=new String[10];
for (int i = 0; i < 10; i++) {
temp[i]=rs.getString(i+1);
System.out.print(temp[i]+" ");
}
System.out.println("");

selectsql(String sql,String [] paras)方法:
public ResultSet selectsql(String sql,String [] paras){
//System.out.println (sql);
try {

pstat=con.prepareStatement(sql);
for(int i=0;i<paras.length;i++){
pstat.setString(i+1,paras[i]);
System.out.println (paras[i]);
}
rs=pstat.executeQuery();
System.out.println (pstat.toString());
System.out.println ("select ok");

}
catch (Exception ex) {


结果是无数据,求大神帮帮。
...全文
1052 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴漱淋沨 2018-06-19
  • 打赏
  • 举报
回复
引用 16 楼 weixin_38358430 的回复:
你那?相当于%xx%不是,‘%xx%’改下试试
你的建议我试过了,PreparedStatement封装的方法里会自动加上单引号的。是java自带的不太好用,到sql server官网下个jdbc的Driver就好了。
浴漱淋沨 2018-06-19
  • 打赏
  • 举报
回复
引用 13 楼 stacksoverflow 的回复:
这个参考一下 https://bugs.openjdk.java.net/browse/JDK-4650961 类似的问题,sun.jdbc.odbc只是架个桥。
折腾了几天,终于解决了,我放弃了java自带的jdbc,去了sql server下载了Driver。终于解决了。 另外,再次感谢各位的建议和帮助。
best_冰河世纪 2018-06-16
  • 打赏
  • 举报
回复
你那?相当于%xx%不是,‘%xx%’改下试试
best_冰河世纪 2018-06-16
  • 打赏
  • 举报
回复
字符串数组里少单引号。第一个%左面加单引号,第二个右边加单引号,第三个左面,第四个右面
小灰狼 2018-06-15
  • 打赏
  • 举报
回复
所有捕捉到的异常,全部打印到控制台上,不要全部忽略 可能哪个数据库访问出错了,JVM有异常信息,结果被你忽略了
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
换个sql,select * from goods看看能不能把表的纪录全部查出来,我怀疑你Java连的数据库和你用工具看的不是一个库,或者有事务没提交。
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
你参考下 public void execute() { String goodsinput = "000"; String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"}; String sql = "SELECT * from goods where GoodsID like ? or GoodsName like ?"; try { ResultSet rs=selectsql(sql,paras); if(rs.next()){ String[]temp=new String[2]; for (int i = 0; i < 2; i++) { temp[i]=rs.getString(i+1); System.out.print(temp[i]+" "); } System.out.println(""); } }catch(Exception e) { e.printStackTrace(); } }
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
我用mysql跑了SQL没问题,贴出来代码应该正确,你看看是不是其他问题? %000% %000% com.mysql.jdbc.JDBC42PreparedStatement@7a07c5b4: SELECT * from goods where GoodsID like '%000%' or GoodsName like '%000%' select ok 1000001 200002
  • 打赏
  • 举报
回复
String sql = "SELECT * from goods where GoodsID like '%" + 000 + "%' or GoodsName like '%"+000 +"%'"; 试一下这样的sql会不会出问题。。。。
浴漱淋沨 2018-06-14
  • 打赏
  • 举报
回复
引用 5 楼 lye2000000_super 的回复:
[quote=引用 3 楼 weixin_42353774 的回复:] [quote=引用 2 楼 lye2000000_super 的回复:] String sql = "SELECT * from goods where GoodsID like ‘?’ or GoodsName like ‘?’" 这样试试看了。。。sql把000当作0看了不是当作字符串。
	private void press() {
		String goodsinput = JTi.getText().trim();
		String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
		String sql = "SELECT * from goods where GoodsID like '?' or GoodsName like '?'";
		//String sql = "SELECT * from goods where GoodsID like '%"+goodsinput+"%' or GoodsName like '%"+goodsinput+"%'";
		condb con = new condb();
		try {
			con.opensql();
			//ResultSet rs=con.selectsql(sql);
			ResultSet rs=con.selectsql(sql,paras);
按下Enter键 open sql successed! java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1022) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3056) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:765) at db.condb.selectsql(condb.java:111) at show.sellWim.press(sellWim.java:253) at show.sellWim.keyReleased(sellWim.java:228) 空指针异常了[/quote] String []paras={goodsinput,goodsinput}; String sql = "SELECT * from goods where GoodsID like \'%?%\' or GoodsName like\'%?%\' '";[/quote] 还是空指针异常
	private void press() {
		String goodsinput = JTi.getText().trim();
		String []paras={goodsinput,goodsinput};
		//String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
		String sql = "SELECT * from goods where GoodsID like  \'%?%\' or GoodsName like  \'%?%\'";
		//String sql = "SELECT * from goods where GoodsID like '%"+goodsinput+"%' or GoodsName like '%"+goodsinput+"%'";
		condb con = new condb();
		try {
			con.opensql();
			//ResultSet rs=con.selectsql(sql);
			ResultSet rs=con.selectsql(sql,paras);
			if(rs.next()){
				String[]temp=new String[10];
				for (int i = 0; i < 10; i++) {
					temp[i]=rs.getString(i+1);
					System.out.print(temp[i]+"  ");
				}
				System.out.println("");
			}else{
				JOptionPane.showMessageDialog(this, "无此商品!","提示",JOptionPane.WARNING_MESSAGE);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			con.closesql();
		}
	}
  • 打赏
  • 举报
回复
引用 3 楼 weixin_42353774 的回复:
[quote=引用 2 楼 lye2000000_super 的回复:] String sql = "SELECT * from goods where GoodsID like ‘?’ or GoodsName like ‘?’" 这样试试看了。。。sql把000当作0看了不是当作字符串。
	private void press() {
		String goodsinput = JTi.getText().trim();
		String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
		String sql = "SELECT * from goods where GoodsID like '?' or GoodsName like '?'";
		//String sql = "SELECT * from goods where GoodsID like '%"+goodsinput+"%' or GoodsName like '%"+goodsinput+"%'";
		condb con = new condb();
		try {
			con.opensql();
			//ResultSet rs=con.selectsql(sql);
			ResultSet rs=con.selectsql(sql,paras);
按下Enter键 open sql successed! java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1022) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3056) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:765) at db.condb.selectsql(condb.java:111) at show.sellWim.press(sellWim.java:253) at show.sellWim.keyReleased(sellWim.java:228) 空指针异常了[/quote] String []paras={goodsinput,goodsinput}; String sql = "SELECT * from goods where GoodsID like \'%?%\' or GoodsName like\'%?%\' '";
浴漱淋沨 2018-06-14
  • 打赏
  • 举报
回复
引用 1 楼 stacksoverflow 的回复:
selectsql中的rs是类变量?返回前是不是给close了?
		try {
			con.opensql();
			//ResultSet rs=con.selectsql(sql);
			ResultSet rs=con.selectsql(sql,paras);
			if(rs.next()){
				String[]temp=new String[10];
				for (int i = 0; i < 10; i++) {
					temp[i]=rs.getString(i+1);
					System.out.print(temp[i]+"  ");
				}
				System.out.println("");
			}else{
				JOptionPane.showMessageDialog(this, "无此商品!","提示",JOptionPane.WARNING_MESSAGE);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			con.closesql();
		}
运行完selectsql方法之后单独都方法关库
浴漱淋沨 2018-06-14
  • 打赏
  • 举报
回复
引用 2 楼 lye2000000_super 的回复:
String sql = "SELECT * from goods where GoodsID like ‘?’ or GoodsName like ‘?’" 这样试试看了。。。sql把000当作0看了不是当作字符串。
	private void press() {
		String goodsinput = JTi.getText().trim();
		String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
		String sql = "SELECT * from goods where GoodsID like '?' or GoodsName like '?'";
		//String sql = "SELECT * from goods where GoodsID like '%"+goodsinput+"%' or GoodsName like '%"+goodsinput+"%'";
		condb con = new condb();
		try {
			con.opensql();
			//ResultSet rs=con.selectsql(sql);
			ResultSet rs=con.selectsql(sql,paras);
按下Enter键 open sql successed! java.lang.NullPointerException at sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(JdbcOdbcPreparedStatement.java:1022) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setChar(JdbcOdbcPreparedStatement.java:3056) at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setString(JdbcOdbcPreparedStatement.java:765) at db.condb.selectsql(condb.java:111) at show.sellWim.press(sellWim.java:253) at show.sellWim.keyReleased(sellWim.java:228) 空指针异常了
  • 打赏
  • 举报
回复
String sql = "SELECT * from goods where GoodsID like ‘?’ or GoodsName like ‘?’" 这样试试看了。。。sql把000当作0看了不是当作字符串。
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
selectsql中的rs是类变量?返回前是不是给close了?
stacksoverflow 2018-06-14
  • 打赏
  • 举报
回复
这个参考一下 https://bugs.openjdk.java.net/browse/JDK-4650961 类似的问题,sun.jdbc.odbc只是架个桥。
浴漱淋沨 2018-06-14
  • 打赏
  • 举报
回复
引用 8 楼 stacksoverflow 的回复:
我用mysql跑了SQL没问题,贴出来代码应该正确,你看看是不是其他问题?
%000%
%000%
com.mysql.jdbc.JDBC42PreparedStatement@7a07c5b4: SELECT * from goods where GoodsID like '%000%' or GoodsName like '%000%'
select ok
1000001 200002

我正打算下一个mysql试试,我翻到一个很久以前的帖子,说是sqlserver的问题,也不知道是不是真的
浴漱淋沨 2018-06-14
  • 打赏
  • 举报
回复
引用 10 楼 stacksoverflow 的回复:
换个sql,select * from goods看看能不能把表的纪录全部查出来,我怀疑你Java连的数据库和你用工具看的不是一个库,或者有事务没提交。

String goodsinput = JTi.getText().trim();
String []paras={goodsinput,goodsinput};
//String []paras={"%"+goodsinput+"%","%"+goodsinput+"%"};
//String sql = "SELECT * from goods where GoodsID like \'%?%\' or GoodsName like \'%?%\'";
String sql = "SELECT * from goods where GoodsID like '%"+goodsinput+"%' or GoodsName like '%"+goodsinput+"%'";

使用拼接字符串控制台是有记录的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧