jsp调用tomcat(5)的数据连接池出现乱码问题

jeehoo 2003-10-17 02:47:33
在zdnet的文章《Tomcat4的数据库连接池配置》,应该不少人看过。

我把文中的写法套用过自己系统的时候,出现一些不解的问题,希望能为我析疑。

我的文件

server.xml

<!-- Tomcat Root Context -->



<Context path="" docBase="ROOT" debug="0">



<Resource name="jdbc/mysql" auth="Container"



type="javax.sql.DataSource"/>



<ResourceParams name="jdbc/mysql">



<parameter>



<name>factory</name>



<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>



</parameter>



<parameter>



<name>driverClassName</name>



<value>org.gjt.mm.mysql.Driver</value>



</parameter>



<parameter>



<name>url</name>



<value>jdbc:mysql://localhost/addressbook</value>



</parameter>



<parameter>



<name>username</name>



<value>root</value>



</parameter>



<parameter>



<name>password</name>



<value></value>



</parameter>



<parameter>



<name>maxActive</name>



<value>20</value>



</parameter>



<parameter>



<name>maxIdle</name>



<value>10</value>



</parameter>



<parameter>



<name>maxWait</name>



<value>-1</value>



</parameter>



</ResourceParams>



</Context>



<!-- Tomcat Root Context end-->



测试的代码:testdb.jsp



<%@ page contentType="text/html;charset=8859_1"%>

<%@ page import= "java.sql.* "%>

<%@ page import= "javax.naming.* "%>

<%

try{

Context initCtx = new InitialContext();

Context ctx = (Context) initCtx.lookup("java:comp/env"); //获取连接池对象

Object obj = (Object) ctx.lookup("jdbc/mysql"); //类型转换

//Object obj = (Object) ctx.lookup("java:comp/env jdbc/mysql");

javax.sql.DataSource ds = (javax.sql.DataSource)obj;

Connection conn = ds.getConnection();

Statement stmt = conn.createStatement();

//String strSql = " insert into test(id,name) values('00001','holen') "; //stmt.executeUpdate(strSql);

String strSql = " select * from addressbook ";

ResultSet rs = stmt.executeQuery(strSql);

out.println(obj.toString());

out.println("<table border=1>");

int i=1;

for (i=1;i<20;i++)

{

if (rs.absolute(i))

{

out.println("<tr><td>");

out.println(rs.getString(1));

out.println("</td>");

out.println("<td>");

out.print(rs.getString(2));

out.println("</td>");

out.println("<td>");

out.print(rs.getString(3));

out.println("</td></tr>");

}

else

{

break;

}

}

out.println("</table>");

}catch(Exception ex){

ex.printStackTrace();

throw new SQLException("cannot get Connection pool.");

}

%>

<hr>



出现结果:

q

`

r
rrr
`

s

`

qq
qqq
qqq

qqqqq
qqq
qqqq


应该出现的结果:

1
jjx
zhejiang yuyao

2
222
zhejiang yuyao

3
tete
zhejiang yuyao

11
111
111

11111
111
1111




期待您百忙之中的答复。谢谢
...全文
49 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeehoo 2003-11-25
  • 打赏
  • 举报
回复
mysql-connector-java-3.1.0-alpha

呵呵,最近事儿多,先搁着了,不好意思。
phpbird 2003-11-10
  • 打赏
  • 举报
回复
搂主用的那个版本的jdbc?我换了一个老的,问题解决。估计你我一样。。。
phpbird 2003-11-10
  • 打赏
  • 举报
回复
我在weblogic中的DataSource也出现这种乱麻问题,应该怎么解决?
jokerjava 2003-11-10
  • 打赏
  • 举报
回复
<<<能具体说说如何改写吗?我用过conn.createStatement

out.println(obj.toString());
out.println("<table border=1>");
int count = 1;
while(rs.next() != null) {

if (count >= 20) {
break;
}
out.println("<tr><td>");

out.println(rs.getString(1));

out.println("</td>");

out.println("<td>");

out.print(rs.getString(2));

out.println("</td>");

out.println("<td>");

out.print(rs.getString(3));

out.println("</td></tr>");
count++;
}

孙亖 2003-11-10
  • 打赏
  • 举报
回复
charset=8859_1??是什么?
jeehoo 2003-10-20
  • 打赏
  • 举报
回复
现在的解决:
<parameter>

<name>url</name>
<value>jdbc:mysql://localhost:3306/addressbook?useUnicode=true&characterEncoding=GBK</value>

</parameter>

困惑是,我曾在后面加上
<parameter>

<name>useUnicode</name>

<value>true</value>

</parameter>

<parameter>

<name>characterEncoding</name>

<value>gb2312</value>

</parameter>
不过好像没起作用的说,为什么呢?
bbshero 2003-10-20
  • 打赏
  • 举报
回复
public static String ISOtoGb2312( String str )
{
try{
byte[] bytesStr=str.getBytes( "ISO-8859-1" ) ;
return new String( bytesStr, "gb2312" ) ; }
catch( Exception ex)
{ System.out.print("ISOtoGb2312() error"); return str ; }
}
jeehoo 2003-10-20
  • 打赏
  • 举报
回复
Statement stmt = conn.createStatement();// <<<<<
// 上句没有设置任何属性,所以不能用rs.absolute(i)
<<<能具体说说如何改写吗?我用过conn.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);不过无效。

out.println(obj.toString()); <<<===作何用?
//这种只是调试用,应该不影响把

yaray 2003-10-17
  • 打赏
  • 举报
回复
Connection conn = ds.getConnection();
if(conn!=null)
out.println("获得数据库连接,连接池配置成功");

Statement stmt = conn.createStatement();// <<<<<
// 上句没有设置任何属性,所以不能用rs.absolute(i)


String strSql = " select * from addressbook ";
ResultSet rs = stmt.executeQuery(strSql);
out.println(obj.toString()); <<<===作何用?
while(rs.next()){
out.println("<tr><td>");
out.println(rs.getString(1));
out.println("</td>");
out.println("<td>");
out.print(rs.getString(2));
out.println("</td>");
out.println("<td>");
out.print(rs.getString(3));
out.println("</td></tr>");
}

81,091

社区成员

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

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