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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。