代码的一部分,实现查找...请帮忙啊...if (e.getSource() == buttonSe) {
String seId = null; // 查询的行
seId = JOptionPane.showInputDialog(this, "请填写需要查询的数据");
System.out.println(seId); //测试用
try {
model.setDataVector(null, title); // 设置(替换)表格模型的内容,标题
sql = "select * from student where stuId like ? or stuName like ? or mathGrade like ? or chineseGrade like ? or englishGrade like ?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, Integer.valueOf(seId.trim()));
pstm.setString(2, "%" + seId.trim() + "%"); //就是这句,匹配不了中文,数字和英文都可以,是编
//码的问题吗,应该怎么改啊...
pstm.setInt(3, Integer.valueOf(seId.trim()));
pstm.setInt(4, Integer.valueOf(seId.trim()));
pstm.setInt(5, Integer.valueOf(seId.trim()));
rs = pstm.executeQuery();
while (rs.next()) { String st[] = { rs.getString("stuId"),
rs.getString("stuName"), rs.getString("mathGrade"),
rs.getString("chineseGrade"),
rs.getString("englishGrade") }; model.addRow(st);
}
}
String seId = null; // 查询的行
seId = JOptionPane.showInputDialog(this, "请填写需要查询的数据");
System.out.println(seId); //测试用
try {
model.setDataVector(null, title); // 设置(替换)表格模型的内容,标题
sql = "select * from student where stuId like ? or stuName like ? or mathGrade like ? or chineseGrade like ? or englishGrade like ?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, Integer.valueOf(seId.trim()));
pstm.setString(2, "%" + seId.trim() + "%"); //就是这句,匹配不了中文,数字和英文都可以,是编
//码的问题吗,应该怎么改啊...
pstm.setInt(3, Integer.valueOf(seId.trim()));
pstm.setInt(4, Integer.valueOf(seId.trim()));
pstm.setInt(5, Integer.valueOf(seId.trim()));
rs = pstm.executeQuery();
while (rs.next()) { String st[] = { rs.getString("stuId"),
rs.getString("stuName"), rs.getString("mathGrade"),
rs.getString("chineseGrade"),
rs.getString("englishGrade") }; model.addRow(st);
}
}
或者是写一个过滤器来处理中文
pstm.setString(2, "%" + seGId + "%"); // 字符串匹配一部分也可以我试了也不行啊...
pstm=conn.prepareStatement(sql);
pstm.setString(1,"小红");我用这3句可以查询到 stuName 为小红的行...
@~我先自己研究下...
pstm=conn.prepareStatement(sql);
pstm.setString(1,"%"+seId+"%");
光这3句的话 可以查出中文 sql = "select * from student where stuId like ? or stuName like ? or mathGrade like ? or chineseGrade like ? or englishGrade like ?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, Integer.valueOf(seId.trim()));
pstm.setString(2, "%" + seId + "%"); // 字符串匹配一部分也可以
pstm.setInt(3, Integer.valueOf(seId.trim()));
pstm.setInt(4, Integer.valueOf(seId.trim()));
pstm.setInt(5, Integer.valueOf(seId.trim()));这几句的话就查不出中文了
<Connector port=”8080” protocol = “HTTP/1.1”
MaxThreads = “150” ConnectionTimeout= “20000”
Redirectport = “8443” URIEncoding = “GBK”/>
再说 JOptionPane这个,如果我没搞错,应该是swing的内容吧?跟tomcat有什么关系……查不出来的话,最好先确认下,是不是SQL写的不对
先打印下最后生成的SQL,看看有没有乱码
如果没乱码,再放到数据库里跑下,看是不是需要的结果
看下你的数据库有没有问题,先看看数据库那里有没有乱码。
如果还没有乱码的话,
String seGId = new String(seId.getBytes("ISO-8859-1"), "GB2312");
如果上面这个也不行,试下jdbc:mysql://localhost:3306/****?characterEncoding=gbk试下这个
单独查询 sql = "select * from student where stuName like ?";可以
这样
sql = "select * from student where stuId like ? or stuName like ? or mathGrade like ? or chineseGrade like ? or englishGrade like ?"
就不行,搞不懂...我用的是 access 这次...是不是 和mysql 有什么不同啊...
pstm = conn.prepareStatement(sql);
pstm.setInt(1, Integer.valueOf(seId.trim()));
pstm.setString(2, "%" + seId.trim() + "%"); //就是这句,匹配不了中文,数字和英文都可以,是编
//码的问题吗,应该怎么改啊...
pstm.setInt(3, Integer.valueOf(seId.trim()));
pstm.setInt(4, Integer.valueOf(seId.trim()));
pstm.setInt(5, Integer.valueOf(seId.trim()));
真牛逼,like通配符是做模糊查询时候用的,一般针对字符串的吧, 你传参的时候用 pstm.setInt 说明你的 stuId 、mathGrade 、chineseGrade 是number类型的吧,你用like没起作用,系统直接就是默认是等号,就是说 stuId like ? 其实就是 stuId =? 。你写的 pstm.setString(2, "%" + seId.trim() + "%"); //就是这句,匹配不了中文,数字和英文都可以,是编
//码的问题吗,应该怎么改啊...
呵呵,匹配不了中文是什么意思,seId要是中文你运行时就报错了,你把中文转换成Integer类型肯定会报错。
可以改一下
sql = "select * from student where to_char(stuId) like ? or stuName like ? or to_char(mathGrade) like ? or to_char(chineseGrade) like ? or to_char(englishGrade) like ?";
传参数全部用pstm.setString应该就可以了