使用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&characterEncoding=GBK就OK了。 四、数据库的显示乱码 在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下: public class Con...
mysql数据显示乱码,数据插入报错怎么办?
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:在数据库连接字符串中加入编码字符集 String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&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> SET collation_database = utf8 ;mysql> 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&characterEncoding=UTF-8一般数据库都可以通过管理设置设定UTF-8其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。一、Java中文问题的由来Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也...
mybatis入门,查询数据,中文显示乱码
他在数据库那设置了一下,然后去hibernate的数据库配置文件后面加了一段代码 我去帮你找找看,那个项目还在不在 我找到了。<property name="driverClass"> <value>com.mysql.jdbc.Driver</value> </property> <property name="jdbcUrl" value="jdbc:mysql://192.168.1.124:3306/weiwo?useUnicode...