问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

使用JDBC向mysql数据库插入中文乱码如何解决?url、数据库属性和workspace的编码库均设成utf-8,始终乱码

发布网友 发布时间:2022-04-07 21:10

我来回答

2个回答

热心网友 时间:2022-04-07 22:40

String sql ="insert into userinfo(name,pwd) values(?,?)";

PreparedStatement pst=getConnection().prepareStatement(sql);

pst.setString(1,"小明");

pst.setString(2,"123");

pst.executeUpdate();

小伙子给你写了一个通用的增删改查的工具类,你那样写太麻烦

资源文件jdbc.properties

jdbc.Driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxx
jdbc.username=root
jdbc.password=root

package com.;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;

public class BaseDao {

    private static String DRIVDR;
    private static String URL;
    private static String USER;
    private static String PWD;
    private static Connection connection;
    private static Properties properties = new Properties();
    private static Logger logger = Logger.getLogger(BaseDao.class);
    private static PreparedStatement pst;
    private static ResultSet rs;
    private static final String CLASS_NOT_EXCEPTION = "驱动加载失败";

    static {
        try {
            properties.load(BaseDao.class.getResourceAsStream("/jdbc.properties"));
            DRIVDR = properties.getProperty("jdbc.Driver");
            URL = properties.getProperty("jdbc.url");
            USER = properties.getProperty("jdbc.username");
            PWD = properties.getProperty("jdbc.password");
            Class.forName(DRIVDR);
        } catch (Exception e) {
            logger.debug(CLASS_NOT_EXCEPTION + e.getMessage());
        }

    }

    /**
     * 通用的增删改
     * 
     * @param sql
     * @param args
     * @return
     */
    public static int executeCommand(String sql, Object... args) {
        int m = 0;
        try {
             initPreparedStatement(sql, args);
            m = pst.executeUpdate();
        } catch (Exception e) {
            logger.debug("执行增、删、该。错误。。请检查preparedStatement参数。。。"+e.getMessage());
        } finally {
            closeAll(null, pst, connection);
        }
        return m;
    }

     private static PreparedStatement initPreparedStatement(String sql,Object...args){
         try {
                pst=getConnection().prepareStatement(sql);
                if(args!=null){
                    for(int i=0;i<args.length;i++){
                         pst.setObject(i+1, args[i]);
                    }
                }
                
            } catch (Exception e) {
                 logger.debug("为pst对象赋值错误。。请检查preparedStatement参数。。。"+e.getMessage());
            }
         return pst;
     }
    /**
     * 通用的执行聚合函数
     * @param sql
     * @param args
     * @return
     */
    public static int executeScalare(String sql,Object...args){
            int count=0;
            initPreparedStatement(sql, args);
            try {
                rs=pst.executeQuery();
                if(rs.next()){
                    count=rs.getInt(1);
                }
            } catch (SQLException e) {
                logger.debug("执行聚合函数出错。。。请检查preparedStatement参数。。。"+e.getMessage());
            }finally{
                closeAll(rs, pst, connection);
            }
           return count;
        
    }
    
    
     /**
      * 根据id查询单个对象
      * @param sql
      * @param clazz
      * @param args
      * @return
      */
     public static <T> T findById(String sql,Class<T> clazz,Object...args){
         T t = null;
            try {
                initPreparedStatement(sql, args);
                rs = pst.executeQuery();

                ResultSetMetaData metaData = rs.getMetaData();
                // 以上的代码:获取元数据(各个字段的数据类型)
                int count = metaData.getColumnCount();
                // 获取字段的数量

                if(rs.next()) {
                    try {
                        t = clazz.newInstance();// 利用反射自动创建对象的类型的对象 User.class User
                                                // u=new User();
                        for (int i = 1; i <= count; i++) {
                            BeanUtils.copyProperty(t, metaData.getColumnName(i), rs.getObject(i));
                            // 自动获取各个字段的名称并获取该字段的值
                        }
                    } catch (Exception e) {
                        logger.debug("查询单个对象,错误。。请检查preparedStatement参数。。。。"+e.getMessage());
                    }

                    
                }

            } catch (SQLException e) {
                logger.debug("查询失败。。。。。" + e.getMessage());
            }
         return t;
     }
    
    /**
     * 通用的查询
     * 
     * @param sql
     * @param clazz
     * @param args
     * @return
     */
    public static <T> List<T> findAll(String sql, Class<T> clazz, Object... args) {
        List<T> list = new ArrayList<T>(100);
        T t = null;
        try {
            initPreparedStatement(sql, args);
            rs = pst.executeQuery();

            ResultSetMetaData metaData = rs.getMetaData();
            // 以上的代码:获取元数据(各个字段的数据类型)
            int count = metaData.getColumnCount();
            // 获取字段的数量

            while (rs.next()) {
                try {
                    t = clazz.newInstance();// 利用反射自动创建对象的类型的对象 User.class User
                                            // u=new User();
                    for (int i = 1; i <= count; i++) {
                        BeanUtils.copyProperty(t, metaData.getColumnName(i), rs.getObject(i));
                        // 自动获取各个字段的名称并获取该字段的值
                    }
                } catch (Exception e) {
                    logger.debug("查询集合,错误。。。。。"+e.getMessage());
                }

                list.add(t);// 将对象添加到集合中
            }

        } catch (SQLException e) {
            logger.debug("查询失败。。。。。" + e.getMessage());
        }

        return list;
    }

    public static Connection getConnection() {
        try {
            if (connection == null || connection.isClosed()) {
                connection = DriverManager.getConnection(URL, USER, PWD);
            }
        } catch (SQLException e) {
            logger.debug("获取connection失败,请检查配置文件!" + e.getMessage());
        }
        return connection;
    }

    public static void closeAll(ResultSet rs, PreparedStatement pst, Connection conn) {
        if (rs != null)
            try {
                rs.close();
            } catch (SQLException e) {
                logger.debug("关闭ResultSet错误。。。。。" + e.getMessage());
            }
        if (pst != null)
            try {
                pst.close();
            } catch (SQLException e) {
                logger.debug("关闭PreparedStatement错误。。。。。" + e.getMessage());
            }
        if (conn != null)
            closeConnection(conn);
    }

    private static void closeConnection(Connection conn) {
        try {
            if (!conn.isClosed()) {
                conn.close();
            }
        } catch (SQLException e) {
            logger.debug("关闭Connection错误。。。。。" + e.getMessage());
        } finally {
            conn = null;
        }

    }

    public static void main(String[] args) {
        System.out.println(BaseDao.getConnection());
    }
}

热心网友 时间:2022-04-07 23:58

看看数据库本身的字符集:
mysql> use xxx
Database changed
mysql> show variables like 'character_set_database';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set (0.00 sec)追问

没问题,也是utf-8

    java中利用JDBC向MySql数据库中插入中文出现乱码???,求解决办法

    重新配置下就可以了。一般选择utf-8编码。再一个如果数据库开始就建立好了。alter database 表名 character set utf8;连接数据库设置编码 jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8 如果是windows的话 1、中止MySQL服务 2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini...

    【求助】java:向mysql数据库插入数据时中文乱码,但是java文件和数据库都...

    先确认你的数据库字符集设置没有问题,是确认不是认为应该是.url写成这样没有?jdbc:mysql://localhost:3306/数据库名称?characterEncoding=UTF-8 我的是gbk,还要检查 数据库属性是不是 表选项

    mysql显示中文乱码,怎么尽快解决显示问题? jdbc的数据为utf-8编码...

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci”或执行语句:复制代码代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;创建数据表的时候:如果是该字段是存放中文的话,则需要将“整理”设置为:“utf8_general_...

    mysql 数据库后台 乱码问题 全市问号 怎么办?

    只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&amp;characterEncoding=GBK就OK了。 四、数据库的显示乱码 在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下: public class Con...

    mysql数据显示乱码,数据插入报错怎么办?

    这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:在数据库连接字符串中加入编码字符集 String Url="jdbc:mysql://localhost/digitgulf?user=root&amp;password=root&amp;useUnicode=true&amp;characterEncoding=GB2312";并在页面中使用如下代码:response.setContentType("text/html;...

    使用JDBC连接SQL SERVER的数据库后,读取出来的中文数据是乱码?

    charset=gb2312,问题解决。但你用的是JDBC连接,他使用的ODBC连接,应该类似,当时的具体情况是:用户使用DBSync软件做MySQL的数据同步,MySQL的数据库字符集为utf8mb4,连接字符串采用ODBC 3.51,在任务设置的step2,列出的中文数据是乱码,在连接字串中加入:charset=gb2312,问题解决。

    mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入...

    mysql&gt; SET collation_database = utf8 ;mysql&gt; SET collation_server = utf8 ;一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';它相当于下面的三句...

    怎么使用JAVA连接数据库?

    1、首先我们先建好数据库,然后建立好程序的目录,因为是适用于初学者的,所以就建立一个简单的java project,如图。2、进行数据库的连接编码,首先要声明这三个必要的属性url,user,password即标识数据的东西,也就是说怎么才能让程序找到你所要连接的数据库的标识。不同的数据库所用的jdbc协议不一样...

    如何解决在doc下运行java中文乱码的情况?

    例如连接MYSQL时配置URL如下:jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8一般数据库都可以通过管理设置设定UTF-8其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。一、Java中文问题的由来Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也...

    mybatis入门,查询数据,中文显示乱码

    他在数据库那设置了一下,然后去hibernate的数据库配置文件后面加了一段代码 我去帮你找找看,那个项目还在不在 我找到了。&lt;property name="driverClass"&gt; &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt; &lt;/property&gt; &lt;property name="jdbcUrl" value="jdbc:mysql://192.168.1.124:3306/weiwo?useUnicode...

    声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
    E-MAIL:11247931@qq.com
    什么是善,佛道两教都教人善良,我们可不可以不做坏事,阻碍别人的事,先把... ...而且我也确实是这么觉得的,那我以后还要不要善良了? 求视频中开头的歌曲名字http://v.ku6.com/show/jJDbeBQhPP5ZX9h2... http://www.jj77.com这个网站的一个Internet Explorer在桌面上不... CF爱拍飞段的视频中http://www.aipai.com/c9/Ojg4PSIjJ28maS8.html里... http://dnf.766.com/sp/pkjj/2012-06/27/1669592.shtml请问这个视频里... http://www.aipai.com/c13/Pz8jJSsnLSJqJWQqKg.html这个视频前部分的纯... 我新组装的电脑,老是不定期死机.即便开机后,也死机,但硬盘灯不亮了,鼠... 刚组装的电脑回家后开始键盘好使,关机在开机后就不好使了,重新插拔后... gps有何优点? 橡皮泥粘到衣服怎么去掉 作文题目:《春节趣事》 写《春节趣事》作文400字 梦见地下冒石油和大米黑豆 周公解梦 梦见石油溅到身上 又吞进肚子里了? 梦见石油从房顶的管道冒出来流到房子里好不好? 本人从单位调出,同事请吃饭,酒桌上的客气话如何说,有领导在 别人请吃饭,该怎么样说客气话 别人请客了,我应该说一些好听的话表示感谢 潍柴集团控股子公司有哪些 别人第一次请我吃饭怎么说客套话 潍柴发电机组哪里生产? 汽油柴油发动机生产厂家哪里有 潍柴动力一号工厂地址是什么 潍柴现在有几个工厂? 如何更改实名制信息 华东发动机和潍柴发动机是一个厂家吗 为什么女人都拉黑了男人,男人还不删掉它呢? 潍柴集团总部在具体在潍坊哪? 如果一个女人把你拉黑又不删除是什么意思呀? 苹果13怎么订阅中国节假日网址无法储存 梦见厕所塌了本人和老婆都掉下山洼? ...在上厕所时马桶塌了、我也跟着掉下去了、这是什么情况...吓死人了... 平安交强险网上购买 梦见自己户外的厕所塌陷了什么意思 梦见厕所塌了随后又溢出来了脏东西 梦见自己在小便,突然厕所塌了,自己跑了出来,是怎么回事,厕所周围到处都是粪便 平安交强险怎么交?出险后又该如何理赔 dr股票是好还是坏? 应付账款应该记哪种凭证? 手工登账本“应付账款”时,摘要写什么 应付账款怎么真写记账凭证 涉及银行存款和应付款项的记账凭证如何填制? 应付账款的记账凭证填制 1.销售货物未收到货款填制什么凭证, 2.从银行提取现金 3.从银行借期借款,存入银行。收 付转中的哪种? 记账凭证的填制步骤与要求有哪些 拼多多商家商品怎么添加视频 做一笔因采购原材料产生的应付账款的记账凭证,具体需要哪些原始凭证? 如何写记账凭证 借方应付账款 贷方应收票据 银行存款 编什么记账凭证
    • 焦点

    最新推荐

    猜你喜欢

    热门推荐