java根据一个字段内容查询musql数据库中的信息 但是如果这个字段包含中文的话 就查询不了 该怎么办(该字段必须包含中文)

Bach716 2013-06-06 05:50:40
毕业设计
用java语言 struts2框架 mysql数据库 做的一个管理系统
其中 删除和查询的时候 是要输入一个字段信息,根据这个字段信息在数据库中查找是否有相应记录,如果有,则进行删除或者输出显示。
但是,如果这个字段包含中文的话,则该功能实现不了,控制台不会报错,就是不能删除或者不能显示
因为这个原因 我的删除功能 避免使用了包含中文的字段,但是 查询功能的话,必须使用包含中文的字段在数据库中进行查找,因此,希望知道原因的前辈们指点下,万分感谢
快要答辩了 程序还没搞定,很着急啊。。。
...全文
489 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
constanine_xia 2013-06-12
  • 打赏
  • 举报
回复
引用 34 楼 Bach716 的回复:
引用 31 楼 constanine_xia 的回复:
[quote=引用 27 楼 Bach716 的回复:] [quote=引用 25 楼 u010241813 的回复:] 妹纸你太强了,代码里面经常有空指针,加了个捕获异常继续执行。。 可你有没有想过你的数据没有拿到无法展示呢
空指针异常 一般出现在这种情况:我专门输入错误的内容,它在数据库中查不到,所以出现了空指针的异常。。。其实不是我不想管它,是我不会解决啊
用try-catch。。。。。如果catch 是NUllpotionerException 就怎么怎么的。。 catch(NullpotionerException e){ //dosomething; }[/quote]你看看上面我的代码 空指针的异常 我捕获了 但是只是在控制台输出 并不没有做其他事情 我也不知道要做什么。。。[/quote] 打个比方啊:在你的action 设这2个String 属性,2个boolean属性 String noCar,String sqlError;boolean isNull,isSqlError是全局变量,带setter/getter方法 然后再try-catch中, catch (NullPointerException n) { isNull=true; noCar="没有这个车牌号"; n.printStackTrace(); } catch (SQLException e) { isSqlError=true; // TODO Auto-generated catch block sqlError="数据库键连接错误"; e.printStackTrace(); } 在你的jsp页面中使用<s:if>标签 <s:if test="isNull.eqcauls(true)"> <s:property value="noCar"> </s:if> 同理使用,标出isSqlError,即可在jsp页面显示
  • 打赏
  • 举报
回复
String sql = "select * from car where plateNumber=?";改成

 String sql = "select * from car where plateNumber = '"+?+"'";
  • 打赏
  • 举报
回复
String型数据请加上''
/**
	 * 统计人数
	 * @return
	 */
	public int tongJiRenShu(String uid){
		Session session = getSession();
		String sql = "select count(*) from Gaokaochengji gk where gk.schoolid = '"+uid+"'";
		Object obj = session.createSQLQuery(sql).uniqueResult();
		int sum=0;
		if(obj!=null){
			sum = (Integer)obj;
		}
		session.close();
		return sum;
	}
一叶飞舟 2013-06-09
  • 打赏
  • 举报
回复
引用 7 楼 Bach716 的回复:
//查询车辆信息 public List<Car> seekCar(String plateNumber) { List<Car> alist = new ArrayList<Car>(); Connection connection = JdbcUtil.getConnection(); PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from car where plateNumber=?"; try { ps = connection.prepareStatement(sql); ps.setString(1, plateNumber); rs = ps.executeQuery(); System.out.println(rs = ps.executeQuery() ); while(rs.next()){ Car car=new Car(); System.out.println(rs.getString(1)); car.setPlateNumber(rs.getString(1)); car.setOwnerName(rs.getString(2)); car.setIdNumber(rs.getString(3)); car.setCellphoneNumber(rs.getString(4)); car.setUseDueTimeDate(rs.getDate(5)); car.setParkingSpace(rs.getString(6)); alist.add(car); System.out.println("为什么没???"); System.out.println(rs.getString(1)); System.out.println(rs.getString(2)); System.out.println(rs.getString(3)); System.out.println(rs.getString(4)); System.out.println(rs.getDate(5)); System.out.println(rs.getString(6)); System.out.println(car.getPlateNumber()); System.out.println(car.getOwnerName()); System.out.println(car.getIdNumber()); System.out.println(car.getCellphoneNumber()); System.out.println(car.getUseDueTimeDate()); System.out.println(car.getParkingSpace()); } }catch(NullPointerException n){n.printStackTrace();} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return alist; } 举个例子:我是根据车牌号 查询车辆信息的 我现在的问题就是 如果我在jsp页面上输入的车牌号 不包含中文的话,会正常显示查询到的数据(数据包含其他对应的中文信息),控制台也会输出我让输出的所有数据,但是,如果我输入的车牌号包含中文的话,那么,即使数据库有数据,对应的jsp页面也没有内容输出,控制台此时只显示:com.mysql.jdbc.ResultSet@14c1096 while循环下面的内容都不会在控制台显示。 是数据库不识别中文的原因吗?我的数据库和jsp页面都是使用的utf-8的编码
打印出来你传中文时候的sql,到你的数据库查询器执行测试
Bach716 2013-06-09
  • 打赏
  • 举报
回复
//查询车辆信息 public List<Car> seekCar(String plateNumber) { List<Car> alist = new ArrayList<Car>(); Connection connection = JdbcUtil.getConnection(); PreparedStatement ps = null; ResultSet rs = null; String sql = "select * from car where plateNumber=?"; try { ps = connection.prepareStatement(sql); ps.setString(1, plateNumber); rs = ps.executeQuery(); System.out.println(rs = ps.executeQuery() ); while(rs.next()){ Car car=new Car(); System.out.println(rs.getString(1)); car.setPlateNumber(rs.getString(1)); car.setOwnerName(rs.getString(2)); car.setIdNumber(rs.getString(3)); car.setCellphoneNumber(rs.getString(4)); car.setUseDueTimeDate(rs.getDate(5)); car.setParkingSpace(rs.getString(6)); alist.add(car); System.out.println("为什么没???"); System.out.println(rs.getString(1)); System.out.println(rs.getString(2)); System.out.println(rs.getString(3)); System.out.println(rs.getString(4)); System.out.println(rs.getDate(5)); System.out.println(rs.getString(6)); System.out.println(car.getPlateNumber()); System.out.println(car.getOwnerName()); System.out.println(car.getIdNumber()); System.out.println(car.getCellphoneNumber()); System.out.println(car.getUseDueTimeDate()); System.out.println(car.getParkingSpace()); } }catch(NullPointerException n){n.printStackTrace();} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return alist; } 举个例子:我是根据车牌号 查询车辆信息的 我现在的问题就是 如果我在jsp页面上输入的车牌号 不包含中文的话,会正常显示查询到的数据(数据包含其他对应的中文信息),控制台也会输出我让输出的所有数据,但是,如果我输入的车牌号包含中文的话,那么,即使数据库有数据,对应的jsp页面也没有内容输出,控制台此时只显示:com.mysql.jdbc.ResultSet@14c1096 while循环下面的内容都不会在控制台显示。 是数据库不识别中文的原因吗?我的数据库和jsp页面都是使用的utf-8的编码
一叶飞舟 2013-06-09
  • 打赏
  • 举报
回复
引用 3 楼 Bach716 的回复:
我用的mysql的图形化界面,所以里面是可以看到中文显示的,我在删除和查询操作中需要通过包含中文的id进行操作,这个时候,我在jsp页面点击删除或者查询的时候,删除不了,不能显示查询结果。我的jsp和数据库都使用了utf-8编码,你们说的乱码问题。。。我貌似说不好,因为乱码问题有的时候是我在测试时,把一个操作或者一个页面操作多次时,偶尔好像会出现这个问题,但是我刷新下或者是重新启动下服务器就好了,所以我不太明白我遇到的问题,有人说是因为我的编码和数据库不匹配,但是我也不确定是不是,你们说是乱码问题的话,我就找找看是不是和我的问题相符,你们根据我的描述 再想想看,或者需要什么更加详细的信息给我说,我给你们参考内容,多谢帮忙
应该是传递中文乱码,或者说你的sql没有接受到传过去的值!
壹佰通 2013-06-09
  • 打赏
  • 举报
回复
虽然不知道你的问题在哪,但是我建议你多多用system.out.print();跟踪数据,如果你自己脑海中有一个数据传输流程的话;这个测试的时候很好用
无情天下 2013-06-09
  • 打赏
  • 举报
回复
这个要远程帮你,因为我们从来没有遇到过,加QQ137688026,私信我
Bach716 2013-06-09
  • 打赏
  • 举报
回复
我用的mysql的图形化界面,所以里面是可以看到中文显示的,我在删除和查询操作中需要通过包含中文的id进行操作,这个时候,我在jsp页面点击删除或者查询的时候,删除不了,不能显示查询结果。我的jsp和数据库都使用了utf-8编码,你们说的乱码问题。。。我貌似说不好,因为乱码问题有的时候是我在测试时,把一个操作或者一个页面操作多次时,偶尔好像会出现这个问题,但是我刷新下或者是重新启动下服务器就好了,所以我不太明白我遇到的问题,有人说是因为我的编码和数据库不匹配,但是我也不确定是不是,你们说是乱码问题的话,我就找找看是不是和我的问题相符,你们根据我的描述 再想想看,或者需要什么更加详细的信息给我说,我给你们参考内容,多谢帮忙
Bach716 2013-06-09
  • 打赏
  • 举报
回复
引用 35 楼 lxz19901212 的回复:
tomcat里面也要配置编码utf-8,不然传到后台的参数就是错的乱码,何谈SQL问题...此外预编译不用加引号,因为他会帮你加貌似,所以你之前预编译不加引号是对的...你在程序中设个断点,看看是不是参数传来的时候就已经错了,目测是这样
tomcat也要设置??加不加引号问题 实验证明 在我的程序里是不需要的 问题已经解决了 你可以看我上面的回帖 上面有写原因 问题 解决了 我就结贴了 多谢众多关注和帮忙的前辈们!!
lxz19901212 2013-06-09
  • 打赏
  • 举报
回复
tomcat里面也要配置编码utf-8,不然传到后台的参数就是错的乱码,何谈SQL问题...此外预编译不用加引号,因为他会帮你加貌似,所以你之前预编译不加引号是对的...你在程序中设个断点,看看是不是参数传来的时候就已经错了,目测是这样
Bach716 2013-06-09
  • 打赏
  • 举报
回复
引用 31 楼 constanine_xia 的回复:
引用 27 楼 Bach716 的回复:
[quote=引用 25 楼 u010241813 的回复:] 妹纸你太强了,代码里面经常有空指针,加了个捕获异常继续执行。。 可你有没有想过你的数据没有拿到无法展示呢
空指针异常 一般出现在这种情况:我专门输入错误的内容,它在数据库中查不到,所以出现了空指针的异常。。。其实不是我不想管它,是我不会解决啊
用try-catch。。。。。如果catch 是NUllpotionerException 就怎么怎么的。。 catch(NullpotionerException e){ //dosomething; }[/quote]你看看上面我的代码 空指针的异常 我捕获了 但是只是在控制台输出 并不没有做其他事情 我也不知道要做什么。。。
Bach716 2013-06-09
  • 打赏
  • 举报
回复
引用 29 楼 constanine_xia 的回复:
记得。JDBC连mysql.好像本身默认设定是GBK?
这个我在网上查资料的时候改了 &useUnicode=true&characterEncoding=utf-8
constanine_xia 2013-06-09
  • 打赏
  • 举报
回复
果然啊。。我就记得mysql 原来中文都是GBK。。。 你用utf-8传输。必然软吗。。。
constanine_xia 2013-06-09
  • 打赏
  • 举报
回复
引用 27 楼 Bach716 的回复:
引用 25 楼 u010241813 的回复:
妹纸你太强了,代码里面经常有空指针,加了个捕获异常继续执行。。 可你有没有想过你的数据没有拿到无法展示呢
空指针异常 一般出现在这种情况:我专门输入错误的内容,它在数据库中查不到,所以出现了空指针的异常。。。其实不是我不想管它,是我不会解决啊
用try-catch。。。。。如果catch 是NUllpotionerException 就怎么怎么的。。 catch(NullpotionerException e){ //dosomething; }
Bach716 2013-06-09
  • 打赏
  • 举报
回复
亲们,问题解决了,谢谢大家。。。 我仔细测试了下 就一个问题 导致的结果 让大家麻烦了一场 问题就是:我的jsp页面的pageEncoding="utf-8"这里,之前是gbk,因为我的代码里中文能正确显示,所以我以为是utf-8,结果不是,我该过后,debug里面的plateNumber也可以正常显示中文了,不过这里还有一点不明白,gbk不也是显示中文的吗?难道当时debug里面不显示中文是因为和数据库的utf-8不匹配?而不是因为pageEncoding="gbk"的关系? 还有就是 sql语句加引号的问题,我才开始认为 加引号 是个关键,因为我在数据库测试的时候 除了数字外,不管包含的有字母还是汉字 都需要加引号 所以我才开始认为 java里面的sql语句里也需要加引号 但是 后来又一想 我记得和大家说过 我之前在jsp页面输入任何内容 只要不包含中文 都可以正常显示的 其实任何内容里面也包含了字母 如果真的是引号的问题 那么没加引号前 包含字母的车牌号查询 也不能显示出结果才对 所以我又用别的程序测试了下(查询这个功能 我用了好几次 所以不止一个代码 我只是把另一个代码的相关jsp页面的语言gbk改成了utf-8,问题就解决了) 因此,综上所述,这次的问题原因 就出在pageEncoding="gbk"这里,把它改好 貌似就没事了 不过之前 我也改了很多其他的地方:例如,把mysql的my.ini文件和工程的workspace的编码都改成utf8了,我不知道和这些是否有关,不过最终问题能解决,还是多谢大家 提供很多解决问题的思路 多谢!!
constanine_xia 2013-06-09
  • 打赏
  • 举报
回复
记得。JDBC连mysql.好像本身默认设定是GBK?
一叶飞舟 2013-06-09
  • 打赏
  • 举报
回复
建议LZ一步一步的跟踪这个业务流程,有问题一个一个的解决,先把最简单的异常处理了,空指针就是你用某个对象的时候,它其实没有被创建(即:null)。
Bach716 2013-06-09
  • 打赏
  • 举报
回复
引用 25 楼 u010241813 的回复:
妹纸你太强了,代码里面经常有空指针,加了个捕获异常继续执行。。 可你有没有想过你的数据没有拿到无法展示呢
空指针异常 一般出现在这种情况:我专门输入错误的内容,它在数据库中查不到,所以出现了空指针的异常。。。其实不是我不想管它,是我不会解决啊
Bach716 2013-06-09
  • 打赏
  • 举报
回复
引用 23 楼 splendid_java 的回复:
这个方法现在只有中文乱码的问题了吧,空指针你看看是哪行出现的就知道了,把jsp的编码设置为utf-8,servlet开头加上request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8"); 实在不行,就直接在seekCar这个方法里的第一行加上一句 plateNumber = new String(plateNumber.getBytes("iso-8859-1"),"utf-8");
没用的 我刚试过了 我的jsp页面都是utf-8,数据库也是,连接数据库时强调的是,mysql的my.ini文件也改了,工程的workspace也把编码改了 都改成utf8了。。。就是不知道到底是怎么了。。。还有我没用servlet,我现在也不确定是不是中文乱码的问题 除了刚才说的在显示页面添加了debug,然后打开,看到的plateNumber里面不现实车牌号里面的中文部分外,其他 我没看到任何中文乱码的问题
加载更多回复(17)

81,122

社区成员

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

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