❶ 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码
这个问题通常与各个JDBC driver的实现有关. 目前大多数JDBC driver采用本地编码格式来传输中文字符,例如中文字符"0x4175"会被转成"0x41"和"0x75"进行传输. 因此我们需要对JDBC driver返回的字符以及要发给JDBC driver的字符进行转换.
当用JDBC driver向数据库中插入数据时,需要先将Unicode转成native code; 当 JDBC driver从数据库中查询数据时,则需要将native code转换成Unicode. 下面给出了这两种转换的实现:
String native2Unicode(String s) {
if (s == null' 's.length() == 0) {
return null;
}
byte[] buffer = new byte[s.length()];
for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {
c = s.charAt(i);
byte []buf = (""+c).getBytes();
buffer[j++] = (char)buf[0];
buffer[j++] = (char)buf[1];
}
else {
buffer[j++] = s.charAt(i);
}
}
return new String(buffer, 0, j);
}
除使用以上两个方法之外,有些JDBC driver如果对jdbc driver Manager设置了正确 的字符集属性,以上2个方法就不需要了.
❷ jdbc连接数据库执行update修改之后中文乱码
你应该是安装mysql的时候编码你是选择默认的吧。
你可以找到mysql的安装目录MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新配置下就可以了。一般选择utf-8编码。
再一个如果数据库开始就建立好了。alter database 表名 character set utf8;
连接数据库设置编码
jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8
❸ 使用JDBC向mysql数据库插入中文乱码如何解决url、数据库属性和workspace的编码库均设成utf-8,始终乱码
String sql ="insert into userinfo(name,pwd) values(?,?)";
PreparedStatementpst=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
packagecom.;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.ResultSetMetaData;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Properties;
importorg.apache.commons.beanutils.BeanUtils;
importorg.apache.log4j.Logger;
publicclassBaseDao{
privatestaticStringDRIVDR;
privatestaticStringURL;
privatestaticStringUSER;
privatestaticStringPWD;
;
=newProperties();
privatestaticLoggerlogger=Logger.getLogger(BaseDao.class);
;
privatestaticResultSetrs;
privatestaticfinalStringCLASS_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(Exceptione){
logger.debug(CLASS_NOT_EXCEPTION+e.getMessage());
}
}
/**
*通用的增删改
*
*@paramsql
*@paramargs
*@return
*/
publicstaticintexecuteCommand(Stringsql,Object...args){
intm=0;
try{
initPreparedStatement(sql,args);
m=pst.executeUpdate();
}catch(Exceptione){
logger.debug("执行增、删、该。错误。。请检查preparedStatement参数。。。"+e.getMessage());
}finally{
closeAll(null,pst,connection);
}
returnm;
}
(Stringsql,Object...args){
try{
pst=getConnection().prepareStatement(sql);
if(args!=null){
for(inti=0;i<args.length;i++){
pst.setObject(i+1,args[i]);
}
}
}catch(Exceptione){
logger.debug("为pst对象赋值错误。。请检查preparedStatement参数。。。"+e.getMessage());
}
returnpst;
}
/**
*通用的执行聚合函数
*@paramsql
*@paramargs
*@return
*/
publicstaticintexecuteScalare(Stringsql,Object...args){
intcount=0;
initPreparedStatement(sql,args);
try{
rs=pst.executeQuery();
if(rs.next()){
count=rs.getInt(1);
}
}catch(SQLExceptione){
logger.debug("执行聚合函数出错。。。请检查preparedStatement参数。。。"+e.getMessage());
}finally{
closeAll(rs,pst,connection);
}
returncount;
}
/**
*根据id查询单个对象
*@paramsql
*@paramclazz
*@paramargs
*@return
*/
publicstatic<T>TfindById(Stringsql,Class<T>clazz,Object...args){
Tt=null;
try{
initPreparedStatement(sql,args);
rs=pst.executeQuery();
ResultSetMetaDatametaData=rs.getMetaData();
//以上的代码:获取元数据(各个字段的数据类型)
intcount=metaData.getColumnCount();
//获取字段的数量
if(rs.next()){
try{
t=clazz.newInstance();//利用反射自动创建对象的类型的对象User.classUser
//u=newUser();
for(inti=1;i<=count;i++){
BeanUtils.Property(t,metaData.getColumnName(i),rs.getObject(i));
//自动获取各个字段的名称并获取该字段的值
}
}catch(Exceptione){
logger.debug("查询单个对象,错误。。请检查preparedStatement参数。。。。"+e.getMessage());
}
}
}catch(SQLExceptione){
logger.debug("查询失败。。。。。"+e.getMessage());
}
returnt;
}
/**
*通用的查询
*
*@paramsql
*@paramclazz
*@paramargs
*@return
*/
publicstatic<T>List<T>findAll(Stringsql,Class<T>clazz,Object...args){
List<T>list=newArrayList<T>(100);
Tt=null;
try{
initPreparedStatement(sql,args);
rs=pst.executeQuery();
ResultSetMetaDatametaData=rs.getMetaData();
//以上的代码:获取元数据(各个字段的数据类型)
intcount=metaData.getColumnCount();
//获取字段的数量
while(rs.next()){
try{
t=clazz.newInstance();//利用反射自动创建对象的类型的对象User.classUser
//u=newUser();
for(inti=1;i<=count;i++){
BeanUtils.Property(t,metaData.getColumnName(i),rs.getObject(i));
//自动获取各个字段的名称并获取该字段的值
}
}catch(Exceptione){
logger.debug("查询集合,错误。。。。。"+e.getMessage());
}
list.add(t);//将对象添加到集合中
}
}catch(SQLExceptione){
logger.debug("查询失败。。。。。"+e.getMessage());
}
returnlist;
}
(){
try{
if(connection==null||connection.isClosed()){
connection=DriverManager.getConnection(URL,USER,PWD);
}
}catch(SQLExceptione){
logger.debug("获取connection失败,请检查配置文件!"+e.getMessage());
}
returnconnection;
}
publicstaticvoidcloseAll(ResultSetrs,PreparedStatementpst,Connectionconn){
if(rs!=null)
try{
rs.close();
}catch(SQLExceptione){
logger.debug("关闭ResultSet错误。。。。。"+e.getMessage());
}
if(pst!=null)
try{
pst.close();
}catch(SQLExceptione){
logger.debug("关闭PreparedStatement错误。。。。。"+e.getMessage());
}
if(conn!=null)
closeConnection(conn);
}
(Connectionconn){
try{
if(!conn.isClosed()){
conn.close();
}
}catch(SQLExceptione){
logger.debug("关闭Connection错误。。。。。"+e.getMessage());
}finally{
conn=null;
}
}
publicstaticvoidmain(String[]args){
System.out.println(BaseDao.getConnection());
}
}
❹ java 向数据库写入汉字的时候出现乱码
可能原因一:数据库不支持中文,或者是数据库编码格式和java代码编码格式不一致,这种情况需要修改数据库编码格式:
;改完编码后执行
sql>conn/assysdba;
sql>shutdownimmediate;
databaseclosed.
databasedismounted.
oracleinstanceshutdown.
sql>startupmount;
oracleinstancestarted.
fixedsize452044bytes
variablesize109051904bytes
databasebuffers25165824bytes
redobuffers667648bytes
databasemounted.
sql>;
systemaltered.
sql>altersystemsetjob_queue_processes=0;
systemaltered.
sql>altersystemsetaq_tm_processes=0;
systemaltered.
sql>alterdatabaseopen;
databasealtered.
sql>_useUTF-8;
sql>shutdownimmediate;
sql>startup;
可能原因二:java代码生成插入语句的时候,已经发生乱码现象,这种只能是修改项目编码格式或者是在数据获取的时候直接转译代码编码格式来实现了。
❺ java中利用JDBC向MySql数据库中插入中文出现乱码,求解决办法
你应该是安装mysql的时候编码你是选择默认的吧。
你可以找到mysql的安装目录MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新配置下就可以了。一般选择utf-8编码。
再一个如果数据库开始就建立好了。alter database 表名 character set utf8;
连接数据库设置编码
jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8
如果是windows的话
1、中止MySQL服务
2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可
3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
4、启动MySQL服务
❻ 插入数据库数据乱码问题
我没有使用过mysql,
但是我用其它数据库出现过类似的问题,极有可能是你本地mysql
客户端没有设置成相关字符编码,如utf-8等等所以保存后显示不出来或者为乱码。看看你同事的字符编码设置,改一下就好了,希望对你有所帮助。
❼ 使用JDBC连接SQL SERVER的数据库后,读取出来的中文数据是乱码
我在给客户服务中,遇到过乱码问题,在连接字串中加入:charset=gb2312,问题解决。但你用的是JDBC连接,他使用的ODBC连接,应该类似,当时的具体情况是:
用户使用DBSync软件做MySQL的数据同步,MySQL的数据库字符集为utf8mb4,连接字符串采用ODBC 3.51,在任务设置的step2,列出的中文数据是乱码,在连接字串中加入:charset=gb2312,问题解决。
❽ java插入数据到mysql中文乱码怎么解决
1。创建数据库的时候:
CREATE DATABASE `Db`
CHARACTER SET 'utf8 '
COLLATE 'utf8_general_ci ';
2.建表的时候:
CREATE TABLE `TableA` (
`ID` varchar(40) NOT NULL default ' ',
`UserID` varchar(40) NOT NULL default ' ', )
ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.设置URL的时候:
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8
❾ mysql数据显示乱码,数据插入报错怎么办
1、JSP页面乱码
这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,
<%@ page contentType="text/html;charset=utf-8" language="java" %>
2、数据库乱码
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
在数据库连接字符串中加入编码字符集
String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
并在页面中使用如下代码:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
3、中文作为参数传递乱码
当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
以上为现阶段遇到的乱码问题,乱码的核心问题还是字符集编码问题,只要掌握了这一点,一般的乱码问题都可以解决。
❿ Java连接mysql数据库并插入中文数据显示乱码
你应该是安装mysql的时候编码你是选择默认的吧。
你可以找到mysql的安装目录MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新配置下就可以了。一般选择utf-8编码。
再一个如果数据库开始就建立好了。alter database 表名 character set utf8;
连接数据库设置编码
jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8