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 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥15 QFILHelper怎么恢复全字库,提示进程已完成,只能恢复分区文件
  • ¥150 求 《小魔指》街机游戏机整合模拟软件
  • ¥20 你好,我想问下easyExcel下拉多选,或者复选框可以实现吗
  • ¥20 双非跨考工科哪个专业和方向就业前景好?