BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #52163同步于 2016/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[MySQL&Java]关于Prepared Statement里String的查询处理

harrytao
2016/8/3镜像同步8 回复
最近在做一个关于音标的数据库系统,想要输入一个单词,然后在表中找出单词的音标,再把单个音标的口型图从另一张表中找出来输出。图片是直接存在数据库里面的。 现在遇到一个问题,每次输入单词,单词可以顺利找到音标(音标可以输出,里面的特殊字符也没问题),然后程序就结束了,图片没能存到指定的路径里。不报错,无exception。 出问题的代码是这一段: String sql="select front from picture where symbol=?"; PreparedStatement ps=null; try{ ps=c.prepareStatement(sql); ps.setString(1,str); //str是要查找的音标,在mysql里是varchar格式,这里是String rs=ps.executeQuery(); while(rs.next()){ is=rs.getBinaryStream("front"); ImageUtil.readBlob(is,"C:\\Users\\HarryTao\\Desktop\\1\\"+String.valueOf(i)+"(1).jpg"); } } 应该是 ps.setString(1,str);这一句有问题。程序运行不报错无exception,也出不了图片。 搜了搜问题,我把这句改成ps.setString(1,StringEscapeUtils.escapeSql(str));还是一样。 在String sql="select front from picture where symbol=?";的问号前后加\"或者\'也没用。 我确定是这里的问题,是因为把sql字符串改成按表里面的编号(int)去搜索就没问题,可以输出图片。就像下面这样: String sql="select front from picture where picture_id=?"; ... ps.setInt(1,i); 不输出图片,只输出单个的音标(第一段代码里的str)也没问题,音标的各种特殊字符也能出来。 大家帮忙看看,到底应该怎么改呢?
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
nuanyangyang机器人#1 · 2016/8/4
你有没有在try之后的catch里把错误隐藏了呢?
harrytao机器人#2 · 2016/8/4
后面加了SQL和IO的exception,是不是少了点什么。。。 【 在 nuanyangyang 的大作中提到: 】 : 你有没有在try之后的catch里把错误隐藏了呢?
a472770699机器人#3 · 2016/8/4
吃瓜,感觉没问题,编码或者String里面多打了个空格啥的?
harrytao机器人#4 · 2016/8/4
string里面就是单个读音的音标,因为长音会有冒号,d?或者t?这些要占两个字符,所以存成了string 【 在 a472770699 的大作中提到: 】 : 吃瓜,感觉没问题,编码或者String里面多打了个空格啥的?
nuanyangyang机器人#5 · 2016/8/4
【 在 harrytao 的大作中提到: 】 : 后面加了SQL和IO的exception,是不是少了点什么。。。 : 关键是catch了这些exception以后你做了什么?只是安静地继续吗?还是print stack trace?还是re-throw?
harrytao机器人#6 · 2016/8/4
都print了。。 catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (c != null) try { c.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 【 在 nuanyangyang 的大作中提到: 】 : : 关键是catch了这些exception以后你做了什么?只是安静地继续吗?还是print stack trace?还是re-throw?
nuanyangyang机器人#7 · 2016/8/4
这……学学用java7的try-with-resources吧。 【 在 harrytao 的大作中提到: 】 : 都print了。。 : catch (Exception e) { : e.printStackTrace(); : ...................
harrytao机器人#8 · 2016/8/4
暖神能细说一下吗。。。 catch exception的代码基本都是网上找的。。。 所以代码可能的问题是怎样的? 多谢。。。 【 在 nuanyangyang 的大作中提到: 】 : 这……学学用java7的try-with-resources吧。 :