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

Bach716 2013-06-06 05:50:40
毕业设计
用java语言 struts2框架 mysql数据库 做的一个管理系统
其中 删除和查询的时候 是要输入一个字段信息,根据这个字段信息在数据库中查找是否有相应记录,如果有,则进行删除或者输出显示。
但是,如果这个字段包含中文的话,则该功能实现不了,控制台不会报错,就是不能删除或者不能显示
因为这个原因 我的删除功能 避免使用了包含中文的字段,但是 查询功能的话,必须使用包含中文的字段在数据库中进行查找,因此,希望知道原因的前辈们指点下,万分感谢
快要答辩了 程序还没搞定,很着急啊。。。
...全文
469 37 打赏 收藏 转发到动态 举报
写回复
用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;
	}
ZHOU西口 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的编码
ZHOU西口 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?
ZHOU西口 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,091

社区成员

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

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