您的位置:首页 >> 数据库 >> PostgreSQL >> 正文
PostgreSQL RSS
 

postgresql + jdbc + servlet 中文问题已经解决

http://www.rdxx.com 06年06月19日 15:34 ChinaUnix.net 我要投稿

关键词: 中文 , 问题 , 解决 , Servlet , PostgreSQL , JDBC , SQL , JDB , POST

createdb -E unicode idg
create table area (area_id int, area_name varchar(32))
html encoding: iso8859_1
test: mozilla, links(set encoding to iso8859_1)
enviroment: rh72 english / resin-3 / postgresql-7.3.2 / j2sdk1.4.1 / pg73jdbc3.jar

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import java.sql.*;

public class Sender extends HttpServlet
{
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException
{
resp.setContentType("text/html; charset=iso8859_1");
req.setCharacterEncoding("iso8859_1"); 

Connection conn  = null;
PreparedStatement stmt = null;
ResultSet rs = null;

String area = "上海";

String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost:5432/idg";
String user = "idg";
String passwd = "idg";
String update = "insert into area values (21, ?)";
String select = "select * from area";

PrintWriter pw = resp.getWriter();

try
{
Class.forName(driver);
conn = DriverManager.getConnection(url, user, passwd);
stmt = conn.prepareStatement(update);
// stmt.setInt(1, 21);
// stmt.setString(1, new String(area.getBytes(), "GBK"));
stmt.setString(1, area);
stmt.executeUpdate();
rs = stmt.executeQuery(select);

while(rs.next())
{
int areaId = rs.getInt("area_id");
String areaName =  rs.getString("area_name");

pw.println( areaId + " " + areaName + "<br>");
}
}
catch (Exception e)
{
e.printStackTrace(pw);
}
finally
{
try
{
// Always close properly
if(rs != null)
{
rs.close();
}
if(stmt != null)
{
stmt.close();
}
if(conn != null)
{
conn.close();
}
}
catch(Exception e)
{
e.printStackTrace(pw);
}
}
}
}

 joint 回复于:2003-03-13 10:32:31
后来用html做了个form来测试doPost,获得area_name,插入数据库,再取出来,显示正确

 joint 回复于:2003-03-13 19:02:58
doPost(...)
{
   String area_name = request.getParameter("AreaName");
}

不需要使用String.getBytes(...)进行转换,可以直接把area_name用于操作

 gz85521734 回复于:2003-03-15 11:29:19
但是你会发现所有的postgresql数据库管理工具、自己在delphi下写的应用,全部读出来都是乱码,这个问题我足足不停反复试了三天

 joint 回复于:2003-03-15 12:01:36
我也发现了,还没找到的办法去解决,数据用unicode存储,在别的工具里面不知道要怎么转换.在psql里面不管怎么set client_encoding to gbk/unicode/gb18030都不能正确显示出来

 gz85521734 回复于:2003-03-15 12:52:24
关键是是否能够强制引导windows或者delphi当中将数据库的裸数据
unicode->GBK的转换,如果能做到这一点,我相信问题就解决了

 joint 回复于:2003-03-15 13:52:16
我还不知道怎么用delphi,也没打算在windows上面用,这个就拜托你了,呵呵,有劳

 gz85521734 回复于:2003-03-15 16:25:31
惨! 孤军奋战的感觉

 joint 回复于:2003-03-15 17:48:58
我也不知道怎么转换啊,比较麻烦的事情,这个是postgresql本身有点问题还是编程语言的问题呢?

 gz85521734 回复于:2003-03-17 08:41:27
我觉得不是pgsql的事情

 joint 回复于:2003-03-17 11:38:23
回头我再看看处理中文还有没有别的办法,但是用euc_cn我觉得不是好办法,总有可能要输入别的字符集,要么是unicode,要么是ascii这两种?还有别的字符集能用吗?

 netkiller 回复于:2003-03-17 19:01:33
nmap ip
后看不到5432端口?????
急。。。

 joint 回复于:2003-03-18 10:39:20
ps -ax看看pgsql有没有起来


 
 
标签: 中文 , 问题 , 解决 , Servlet , PostgreSQL , JDBC , SQL , JDB , POST 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站