Montagbissonntag 2010-08-03 20:28
浏览 465
已采纳

JDBC读取数据库中文表名乱码

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class XmlNameWriter {
/**

* 利用dom4j生成XML

*

* @author Daniel Cheng

*/
static Logger logger=Logger.getLogger(XmlNameWriter.class.getClass());

public void createXML() {

    PropertyConfigurator.configure ( "D:\\workspace\\testlog4j.properties" ) ;
    String driver="com.mysql.jdbc.Driver";
    String url="jdbc:mysql://localhost:3306/zczh?characterEncoding=gbk";
    String username="root";
    String password="233111";
    Connection conn=null;

    Document doc = DocumentHelper.createDocument();
    Element rootEle = doc.addElement("tables");   

    try{
        Class.forName(driver);
        conn=DriverManager.getConnection(url, username, password);
        ResultSet rs=null;
        DatabaseMetaData dbmd=conn.getMetaData();
        rs=dbmd.getTables(null, null, null, null);
        while(rs.next()){
            [b]Element nameEle = rootEle .addElement("table");
                                String tablename=rs.getString(3);
            nameEle.setText(tablename);
                                logger.debug(tablename+"表名已读取到");[/b]//此处获取的中文表名乱码,我在论坛里找了几个设置字符集的方法,试了之后依然乱码。怎样解决?
        }
        if(rs!=null){
            rs.close();
        }


    }catch(SQLException e){
        logger.error(e.getMessage());
    }catch(ClassNotFoundException e){
        logger.error("error:"+e.getMessage());
    }finally{
        if(conn!=null){
            try{
                conn.close();
            }catch(SQLException e){
                logger.error("error:"+e.getMessage());
            }
        }
    }
    try {
        Writer out = new FileWriter("tables.xml");
        //格式化输出,类型IE浏览一样   
        OutputFormat format = OutputFormat.createPrettyPrint();
        //OutputFormat format = OutputFormat.createCompactFormat();   
        format.setEncoding("gbk");
        //创建写出对象   
        XMLWriter writer = new XMLWriter(out, format);
        writer.write(doc);
        writer.close();
        System.out.println("生成tables.xml成功。");
    } catch (IOException e) {
        // TODO Auto-generated catch block   
        e.printStackTrace();
        System.out.println("失败了。");
    }
}

public static void main(String[] args) {
    new XmlNameWriter().createXML();
}

}

  • 写回答

4条回答 默认 最新

  • iteye_11438 2010-08-03 21:11
    关注

    你先确定你数据库中存着的,是不是就是乱码的?
    mysql数据库如果要存中文,在创建数据库和打开数据库的时候是需要加参数的
    类似:
    mysql -u root --default-character-set=utf8

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题