【高分求解决】java连接access乱码问题

时间:2022-07-27 05:50:18
private static final String accessDBURLPrefix = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
private static final String accessDBURLSuffix = ";DriverID=22;READONLY=false";

// Initialize the JdbcOdbc Bridge Driver
static {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
System.err.println("JdbcOdbc Bridge Driver not found!");
}
}

/** Creates a Connection to a Access Database */
public static Connection getAccessDBConnection(String filename)
throws SQLException {
filename = filename.trim();
String databaseURL = accessDBURLPrefix + filename + accessDBURLSuffix;
return DriverManager.getConnection(databaseURL, "", "");
}

/**
 * @param args
 */
public static void main(String[] args) {
Connection con = null;
Statement statement = null;
ResultSet rs = null;
try {
con = DBConn.getAccessDBConnection("datebase/db1.mdb");
statement = con.createStatement();
rs = statement.executeQuery("select * from tbl");
// new String(rs.getString(2).getBytes("ISO8859-1"),"gbk")
while(rs.next())
System.out.println(rs.getInt(1)+" " +new String(rs.getString(2).getBytes("ISO8859-1"),"gbk")+" " + rs.getString(3));

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

输出结果为:
1 ???? 123
2 adbc ????

中文就变成问号好了。而且我还试过gb2312转码也不行,utf-8也不行。

14 个解决方案

#1


查看数据库中的数据是否是乱码,

#2


数据库显示正常   
1 张三 123
2 abdc 李四

#3


你取出来的时候不转码!直接取试试!(数据库中的应该已经是GBK了,取出时应该不用转码了!)

#4


就是因为直接取是乱码,我才转码的!

#5


ISO -8859-1

试试

#6


明白了
你数据库的编码应该不是iso8859-1


getBytes("ISO8859-1")时
你用


unicode
utf-8
试试

#7


一样不行

#8


你存入时没有问题吗?

存入的代码!

#10


刚试了。都不行!!!! 

#11


你数据源别写那么复杂

private static final String accessDBURLPrefix = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";


jdbc:odbc:Driver就这么写,然后你去配置一下!试试!

#12


楼主ZT

#13


引用 12 楼 a292738534 的回复:
楼主ZT


.......

怎么解决的?

#14


mdb编码是GB2312

#1


查看数据库中的数据是否是乱码,

#2


数据库显示正常   
1 张三 123
2 abdc 李四

#3


你取出来的时候不转码!直接取试试!(数据库中的应该已经是GBK了,取出时应该不用转码了!)

#4


就是因为直接取是乱码,我才转码的!

#5


ISO -8859-1

试试

#6


明白了
你数据库的编码应该不是iso8859-1


getBytes("ISO8859-1")时
你用


unicode
utf-8
试试

#7


一样不行

#8


你存入时没有问题吗?

存入的代码!

#9


#10


刚试了。都不行!!!! 

#11


你数据源别写那么复杂

private static final String accessDBURLPrefix = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";


jdbc:odbc:Driver就这么写,然后你去配置一下!试试!

#12


楼主ZT

#13


引用 12 楼 a292738534 的回复:
楼主ZT


.......

怎么解决的?

#14


mdb编码是GB2312