JSP中文显示,模糊查询问题!(在线等待!!!!!)

bill55 2003-10-22 10:18:04
我用的数据库是mysql4.0.15,服务器程序用的是tomcat4.1.27,通过tomcat的连接池对数据库进行操作的。数据库驱动程序是这样进行配置的:
<parameter><name>driverClassName</name><value>org.gjt.mm.mysql.Driver</value></parameter>
我写了一段小程序进行数据查询:
<html>
<head>
<title>用户查询结果</title>
<%@ page contentType="text/html; charset=gb2312" %>
</head>
<body bgcolor="#FFFFFF">
<%@ page import="java.sql.*" %>
<%@ page import="db.dboperation" %>
<%
String bookname="程";
//bookname=new String(bookname.getBytes("gb2312"));

String nameSelect="bookname like '%"+bookname+"%'";
byte[] tmpbyte=nameSelect.getBytes("ISO8859_1");
nameSelect=new String(tmpbyte);
String sql="select * from book where "+nameSelect;

//SQL就是生成的查询命令

db.dboperation db=new db.dboperation();
db.init();
ResultSet rs=db.executeQuery(sql);
while(rs.next())
{
%><p><%=rs.getString("bookname")%><td>
<%=rs.getInt("price")%></td>
<td><%=rs.getString("author")%></td></p>
<%}
rs.close();
db.close();
%>
</body>
</html>
我想查询书名(bookname)中含“程”字的数据,然而没有显示一条数据。请各位高手指正!!
...全文
158 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rabbit8 2003-11-12
  • 打赏
  • 举报
回复
mark
abbelaries 2003-10-23
  • 打赏
  • 举报
回复
个人认为最好传一个参数给init().用这个参数来指定jndi中连接池的名字。
sidney5 2003-10-22
  • 打赏
  • 举报
回复
to 楼主:db.dboperation包是自己编的吗?
abbelaries 2003-10-22
  • 打赏
  • 举报
回复
再mysql数据库里好像都是iso8859_1的
但是在交互数据流的时候可以设置你要用的字符集,这样很不错。灵活方便。
abbelaries 2003-10-22
  • 打赏
  • 举报
回复
还有楼主的那个db.dboperation包的源代码能不能给我看看阿

我现在很需要那个东东
blue999star 2003-10-22
  • 打赏
  • 举报
回复
MYSQL里面存放的数据到底是什么语言格式的?
ISO8859_1
错误的原因到底是什么?
你传入的是gbk的字符 识别不出来
我用什么命令可以知道?
好像不行,不过有关数据库的存储要看mysql的文档。

个人拙见
abbelaries 2003-10-22
  • 打赏
  • 举报
回复
在连接池配置里的url参数中把数据库的字符集指定。象下面这样
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/salereport?useUnicode=true&characterEncoding=gb2312</value>

<!--must use & not use & -->
</parameter>
这里指定的是gb2312也就是说和数据库交互的数据流的编码都是gb2312的。你也可以指定8859_1等。
接下来在查询的时候,把你的bookname转成gb2312就可以了。总之,要把查询条件变量的字符集指定成url设置的字符集。另外,在从数据库读数据的时候也要做相应的转换。

希望这个对楼主有帮助
bill55 2003-10-22
  • 打赏
  • 举报
回复
to hchcsdn(求学) and blue999star(星星要挣钱,养老婆) :
我刚试了hchcsdn(求学) 的方法行,不过要将strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");改为strvalue = new String(strvalue.getBytes("GBK"), "ISO8859_1");而blue999star的方法不行。
谁能告诉我,错误的原因到底是什么?在MYSQL里面存放的数据到底是什么语言格式的?我用什么命令可以知道?
blue999star 2003-10-22
  • 打赏
  • 举报
回复
String bookname="程";
bookname = java.net.URLEncoder.encode(bookname);
String nameSelect="bookname like '%"+bookname+"%'";
bill55 2003-10-22
  • 打赏
  • 举报
回复
to lilyheart1977(百合心) :
你说的“不要转化,直接查询”是不是在程序中去掉
byte[] tmpbyte=nameSelect.getBytes("ISO8859_1");
nameSelect=new String(tmpbyte);
这两句,我刚试了,去掉这两句也不行!
hchcsdn 2003-10-22
  • 打赏
  • 举报
回复
用下面这个函数把你输入的数据比如程字符转变为中文,然后再去模糊查询,很容易搞定的,如果还有问题的话,告诉我
//toChinese()是转换中文的一个函数
public static String toChinese(String strvalue){
try{
if(strvalue==null)
return null;
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
lilyheart1977 2003-10-22
  • 打赏
  • 举报
回复
你在MYSQL里面查询的时候,先不要转化,直接查询
bill55 2003-10-22
  • 打赏
  • 举报
回复
顺便提一下,我的数据库表是这样建的:
create table book (
pid int not null auto_increment primary key,
bookname text,
author text,
publisher text,
editor text,
price int(4),
country text,
date datetime,
link text);
bill55 2003-10-22
  • 打赏
  • 举报
回复
to yingmuhuadao(樱木花道):
刚试了,去了也没有数据显示,和没有去的现象一样的!!
yingmuhuadao 2003-10-22
  • 打赏
  • 举报
回复
byte[] tmpbyte=nameSelect.getBytes("ISO8859_1");

这句话,是干什么的啊?去了试试吧
bill55 2003-10-22
  • 打赏
  • 举报
回复
to abbelaries(歆宇) and sidney5(禹) :

刚刚试了,能够正确显示中文了,但是我不敢确定以后关于中文的编程会不会出现其他的问题,因为我并没有完全理解JSP(JAVA)的中文处理。这篇文章可能对大家都很有用:
http://www.503room.com/news_system/htmlnews/20030626/1751103756.html

另外对于db.dboperation包是我自己编的,是一个很小的测试包,我是想用这个包实现数据库的增加,删除,修改,查询等基本功能,现在只实现了查询功能,源代码如下,请大家帮我修改一下,完成上面的功能:
package db;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class dboperation{

private javax.sql.DataSource ds=null;
private Connection conn=null;
private ResultSet rs=null;
private Statement stmt=null;

public void init(){

try{
Context initCtx=new InitialContext();
if(initCtx==null) throw new Exception("Boom--no context");

Context envCtx=(Context)initCtx.lookup("java:comp/env");
//获取连接池对象
Object obj=(Object)envCtx.lookup("jdbc/test");
//类型转换
ds=(javax.sql.DataSource)obj;


} catch(Exception e){e.printStackTrace();}

}
//查询语句
public ResultSet executeQuery(String sql)
{
rs=null;
try{
if(ds!=null)
{
conn=ds.getConnection();
if(conn!=null){
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
}
}catch(SQLException ex){System.err.println(ex.getMessage());}
return rs;
}


public long update(String sql)
{
long x=0;
try{
if(ds!=null)
{
conn=ds.getConnection();
if(conn!=null)
{
stmt=conn.createStatement();
x=stmt.executeUpdate(sql);
}
}
}catch(SQLException ey) {System.err.println(ey.getMessage());}
return x;
}

/**
* 关闭连接
*/
public void close() throws Exception {
if(rs!=null)
{
rs.close();
rs=null;
}
if (stmt!= null) {
stmt.close();
stmt = null;
}

conn.close();
conn = null;
}


}

81,092

社区成员

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

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