我用java语言写了连接远端MsSqlServer数据库的程序,使用MS提供的jdbc,在本地机器winxp+jdk1.4.2下运行显示都一切正常。但是把该程序放到一台Unix机器(Irix6.5,jdk1.4.1_06),重新javac后,在显示数据库的中文数据时,总是以问号“?”代替汉字。该程序如下:
============================================================
import java.sql.*;public class CreateTable {
public static void main(String args[]) {
Connection con = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
System.out.println("JDBC driver loaded");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://netsv1:1433;DatabaseName=aaaa","sa","12345");
System.out.println("Dabase connection established");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery( "select * from Author" );
while (rs.next())
{
System.out.println(rs.getString("Author_ID") + "\t" +
rs.getString("Author_Name"));
}
stmt.close();
}
catch(ClassNotFoundException cnfe) {
System.out.println("ClassNotFoundException: Could not locate driver");
}
catch(SQLException cnfe) {
System.out.println("SQLException: " +cnfe);
}
catch(Exception e) {
System.out.println("An unknown error occurred while connecting to the database");
}
finally {
try {
if ( con != null)
con.close();
} catch(SQLException sqle) {
System.out.println("Unable to close database connection.");
}
}
}
}
===============================================
然后我想是否是JVM的编码有问题,于是又写了个简短的程序:
public class Hello {
public static void main(String args[]) {
System.out.print("Hello,世界你好!");
}
}
在Unix机器上编译后,执行java Hello,结果显示的汉字“世界你好”,显示正常。这是不是说明JVM的编码是正确的。但是为什么从SqlServer数据库中取出的数据总是显示为问号呢?
============================================================
import java.sql.*;public class CreateTable {
public static void main(String args[]) {
Connection con = null;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
System.out.println("JDBC driver loaded");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://netsv1:1433;DatabaseName=aaaa","sa","12345");
System.out.println("Dabase connection established");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery( "select * from Author" );
while (rs.next())
{
System.out.println(rs.getString("Author_ID") + "\t" +
rs.getString("Author_Name"));
}
stmt.close();
}
catch(ClassNotFoundException cnfe) {
System.out.println("ClassNotFoundException: Could not locate driver");
}
catch(SQLException cnfe) {
System.out.println("SQLException: " +cnfe);
}
catch(Exception e) {
System.out.println("An unknown error occurred while connecting to the database");
}
finally {
try {
if ( con != null)
con.close();
} catch(SQLException sqle) {
System.out.println("Unable to close database connection.");
}
}
}
}
===============================================
然后我想是否是JVM的编码有问题,于是又写了个简短的程序:
public class Hello {
public static void main(String args[]) {
System.out.print("Hello,世界你好!");
}
}
在Unix机器上编译后,执行java Hello,结果显示的汉字“世界你好”,显示正常。这是不是说明JVM的编码是正确的。但是为什么从SqlServer数据库中取出的数据总是显示为问号呢?
试试这样行不行
在其他地方看到过直接一句命令setEncoding("GBK")
试了"String Author_ID = new String(rs.getString("Author_ID").getBytes("ISO8859_1"));
"也不行,也不知道什么地方出问题?
/*
* Copyright (c) 2002 [email protected]
* $Id: Env.java,v 1.1 2002/07/30 09:48:12 chedong Exp $
*/import java.util.*;
import java.text.*;/**
* 目的:
* 显示环境变量和JVM的缺省属性
* 输入:无
* 输出:
* 1 支持的LOCALE
* 2 JVM的缺省属性
*/public class Env {
/**
* main entrance
*/
public static void main(String[] args) {
System.out.println("Hello, it's: " + new Date()); //print available locales
Locale list[] = DateFormat.getAvailableLocales();
System.out.println("======System available locales:======== ";
for (int i = 0; i < list.length; i++) {
System.out.println(list[i].toString() + "\t" + list[i].getDisplayName());
} //print JVM default properties
System.out.println("======System property======== ";
System.getProperties().list(System.out);
}
}
==============================================
输出结果如下:
Hello, it's: Fri Apr 22 09:18:20 GMT 2005
======System available locales:========
ar Arabic
ar_AE Arabic (United Arab Emirates)
ar_BH Arabic (Bahrain)
ar_DZ Arabic (Algeria)
ar_EG Arabic (Egypt)
ar_IQ Arabic (Iraq)
ar_JO Arabic (Jordan)
ar_KW Arabic (Kuwait)
ar_LB Arabic (Lebanon)
ar_LY Arabic (Libya)
ar_MA Arabic (Morocco)
ar_OM Arabic (Oman)
ar_QA Arabic (Qatar)
ar_SA Arabic (Saudi Arabia)
ar_SD Arabic (Sudan)
ar_SY Arabic (Syria)
ar_TN Arabic (Tunisia)
ar_YE Arabic (Yemen)
be Byelorussian
be_BY Byelorussian (Belarus)
bg Bulgarian
bg_BG Bulgarian (Bulgaria)
ca Catalan
ca_ES Catalan (Spain)
cs Czech
cs_CZ Czech (Czech Republic)
da Danish
da_DK Danish (Den)
de German
de_AT German (Austria)
de_CH German (Switzerland)
de_DE German (Germany)
de_LU German (Luxembourg)
el Greek
el_GR Greek (Greece)
en_AU English (Australia)
en_CA English (Canada)
en_GB English (United Kingdom)
en_IE English (Ireland)
en_IN English (India)
en_NZ English (New Zealand)
en_ZA English (South Africa)
es Spanish
es_BO Spanish (Bolivia)
es_AR Spanish (Argentina)
es_CL Spanish (Chile)
es_CO Spanish (Colombia)
es_CR Spanish (Costa Rica)
es_DO Spanish (Dominican Republic)
es_EC Spanish (Ecuador)
es_ES Spanish (Spain)
es_GT Spanish (Guatemala)
es_HN Spanish (Honduras)
es_MX Spanish (Mexico)
es_NI Spanish (Nicaragua)
es_PA Spanish (Panama)
es_PE Spanish (Peru)
es_PR Spanish (Puerto Rico)
es_PY Spanish (Paraguay)
es_SV Spanish (El Salvador)
es_UY Spanish (Uruguay)
es_VE Spanish (Venezuela)
et Estonian
et_EE Estonian (Estonia)
fi Finnish
fi_FI Finnish (Finland)
fr French
fr_BE French (Belgium)
fr_CA French (Canada)
fr_CH French (Switzerland)
fr_FR French (France)
fr_LU French (Luxembourg)
hr Croatian
hi_IN Hindi (India)
hr_HR Croatian (Croatia)
hu Hungarian
hu_HU Hungarian (Hungary)
is Icelandic
is_IS Icelandic (Iceland)
it Italian
it_CH Italian (Switzerland)
it_IT Italian (Italy)
iw Hebrew
iw_IL Hebrew (Israel)
ja Japanese
ja_JP Japanese (Japan)
ko Korean
ko_KR Korean (South Korea)
lt Lithuanian
lt_LT Lithuanian (Lithuania)
lv Latvian (Lettish)
lv_LV Latvian (Lettish) (Latvia)
mk Macedonian
mk_MK Macedonian (Macedonia)
nl Dutch
nl_BE Dutch (Belgium)
nl_NL Dutch (Netherlands)
no Norwegian
no_NO Norwegian (Norway)
no_NO_NY Norwegian (Norway,Nynorsk)
pl Polish
pl_PL Polish (Poland)
pt Portuguese
pt_BR Portuguese (Brazil)
pt_PT Portuguese (Portugal)
ro Romanian
ro_RO Romanian (Romania)
ru Russian
ru_RU Russian (Russia)
sh Serbo-Croatian
sh_YU Serbo-Croatian (Yugoslavia)
sk Slovak
sk_SK Slovak (Slovakia)
sl Slovenian
sl_SI Slovenian (Slovenia)
sq Albanian
sq_AL Albanian (Albania)
sr Serbian
sr_YU Serbian (Yugoslavia)
sv Swedish
sv_SE Swedish (Sweden)
th Thai
th_TH Thai (Thailand)
th_TH_TH Thai (Thailand,TH)
tr Turkish
tr_TR Turkish (Turkey)
uk Ukrainian
uk_UA Ukrainian (Ukraine)
zh Chinese
zh_CN Chinese (China)
zh_HK Chinese (Hong Kong)
zh_TW Chinese (Taiwan)
en English
en_US English (United States)
======System property========
-- listing properties --
java.runtime.name=Java(TM) 2 Runtime Environment, Stand...
sun.boot.library.path=/usr/java2/lib32/sgi
java.vm.version=1.4.1_06
java.vm.vendor="Silicon Graphics, Inc."
java.vendor.url=http://www.sgi.com/
path.separator=:
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/sp/tmp
java.runtime.version=1.4.1_06
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
os.arch=mips
java.io.tmpdir=/var/tmp/
line.separator=java.vm.specification.vendor=Sun Microsystems Inc.
os.name=Irix
sun.java2d.fontpath=
java.library.path=/usr/java2/lib32/sgi/client:/usr/java...
java.specification.name=Java Platform API Specification
java.class.version=48.0
java.util.prefs.PreferencesFactory=java.util.prefs.FileSystemPreferences...
os.version=6.5
user.home=/
user.timezone=GMT
java.awt.printerjob=sun.print.PSPrinterJob
file.encoding=ISO8859-1
java.specification.version=1.4
user.name=root
java.class.path=/usr/local/tomcat/common/lib/servlet....
java.vm.specification.version=1.0
sun.arch.data.model=32
sun.java.command=Env
java.home=/usr/java2
java.specification.vendor=Sun Microsystems Inc.
user.language=en
java.vm.info=mixed mode
java.version=1.4.1_06
java.ext.dirs=/usr/java2/lib/ext
sun.boot.class.path=/usr/java2/lib/rt.jar:/usr/java2/lib/...
java.vendor=Silicon Graphics Inc.
file.separator=/
java.vendor.url.bug=http://www.sgi.com/developers/devtool...
sun.cpu.endian=big
sun.io.unicode.encoding=UnicodeBig
sun.cpu.isalist=
http://blog.csdn.net/ablo_zhou/archive/2004/07/27/53341.aspx
http://www.blueidea.com/tech/program/2004/1810_2.asp
具体解决方法网上有n多种,你自己选择一种解决方法。