當前位置:首頁 » 數據倉庫 » jdbc插入資料庫亂碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

jdbc插入資料庫亂碼

發布時間: 2022-07-10 02:40:16

❶ 當用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