jdbc 连接 Access 乱码解决
来源:互联网 发布:数据库 索引 编辑:程序博客网 时间:2024/06/09 16:38
这两天写一个数据备份的小工具,需要将数据备份到ACCESS数据库,在读写ACCESS数据库时总是出现乱码,这方面的资料网上异常的少,要么是连接方法要么就根本不解决问题的方法!
知道是字符集的问题,就试了各种字符集的设置都不能成功,只能通过万能的网络寻找强人,终于找到了这片专门论述jdbc操作ACCESS数据库读写乱码问题的博文。
为了便于以后查阅,也方便其它有同样问题的童鞋,原文整理如下:
我们知道,java的字符串都是unicode编码的,所以读出的任何字符串都被默认处理为unicode,因此,我们必须将取出来的byte强制转码为gbk,然后java会自动将该gbk编码转为unicode的字符串,输出。
conn = DriverManager.getConnection(
"jdbc:odbc:你的数据库;useUnicode=false;characterEncoding=gbk", "user", "yourpassword");
public String readDB(){
try {
sql = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = sql.executeQuery("select * from grdj");
// System.out.println(System.getProperties());
int i=1;
while (rs.next()) {
i++;
System.out.println(rs.getString(2));
System.out.println(new String(rs.getBytes(3),"gbk"));
System.out.println(rs.getString(4));
System.out.println(new String(rs.getBytes(5),"gbk"));
System.out.println(rs.getFloat(6));
System.out.println("-----------------");
}
System.out.println("all:"+i);
}catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(rs!=null){ rs.close();}
if(sql!=null){sql.close();}
if(conn!=null){conn.close();}
我们知道,java的字符串都是unicode编码的,所以读出的任何字符串都被默认处理为unicode,因此,我们必须将取出来的byte强制转码为gbk,然后java会自动将该gbk编码转为unicode的字符串,输出。
conn = DriverManager.getConnection(
"jdbc:odbc:你的数据库;useUnicode=false;characterEncoding=gbk", "user", "yourpassword");
public String readDB(){
try {
sql = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = sql.executeQuery("select * from grdj");
// System.out.println(System.getProperties());
int i=1;
while (rs.next()) {
i++;
System.out.println(rs.getString(2));
System.out.println(new String(rs.getBytes(3),"gbk"));
System.out.println(rs.getString(4));
System.out.println(new String(rs.getBytes(5),"gbk"));
System.out.println(rs.getFloat(6));
System.out.println("-----------------");
}
System.out.println("all:"+i);
}catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(rs!=null){ rs.close();}
if(sql!=null){sql.close();}
if(conn!=null){conn.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
这是一个简单的示例。
但是insert还是出现乱码,问题我估计还是因为流得原因。
因此,必须采用DriverManager.getConnection()的第三种参数法
DriverManager.getConnection(url,Properties);
首先,设定当前流的默认字符集,这是一个持久的对象:
Properties prop = new Properties();
prop.put("charSet", "gbk");
然后如果数据库有密码,我们必须把用户名和密码的prop写完整
prop.put("user", "user");
prop.put("password", "yourpassword");
然后写url:"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + “你的mdb文件路径”
}
return null;
}
这是一个简单的示例。
但是insert还是出现乱码,问题我估计还是因为流得原因。
因此,必须采用DriverManager.getConnection()的第三种参数法
DriverManager.getConnection(url,Properties);
首先,设定当前流的默认字符集,这是一个持久的对象:
Properties prop = new Properties();
prop.put("charSet", "gbk");
然后如果数据库有密码,我们必须把用户名和密码的prop写完整
prop.put("user", "user");
prop.put("password", "yourpassword");
然后写url:"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + “你的mdb文件路径”
之后不管是读数据库还是写数据库,都不用再做任何的编码转换就可以进行了。
连接数据库完整语句示例:
conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" +
"E:/My Archives/Dry Clean data bak/ganxi/prodata.mdb",prop);
OK下来就正常连接select update insert吧!问题完美解决!感谢lindily!
连接数据库完整语句示例:
conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" +
"E:/My Archives/Dry Clean data bak/ganxi/prodata.mdb",prop);
OK下来就正常连接select update insert吧!问题完美解决!感谢lindily!
原文出处:http://hi.baidu.com/lindily/blog/item/b1f5003316fa36f11b4cff3a.html
- jdbc 连接 Access 乱码解决
- Java JDBC-ODBC 连接 Access 数据库 中文乱码解决
- Java JDBC-ODBC 连接 Access 数据库 中文乱码解决
- java使用 jdbc连接access数据库-中文显示乱码(已解决)
- 解决jdbc连接informix乱码问题
- java jdbc连接Access数据库 出现中文乱码问题解决
- Access java jdbc连接出现 中文乱码解决方案!!!
- 通过jdbc 连接 Access
- jdbc连接access
- 使用JDBC连接access
- JDBC的乱码解决
- 解决jdbc乱码问题
- [access][jdbc]java连接access数据库
- 谈谈JDBC连接Access数据库
- java odbc jdbc 连接Access
- jdbc连接(Access、SQLServer)
- jdbc直接连接access数据库
- Access java jdbc连接 insert插入的数据 中文乱码解决方案!!!
- CacheBooster-优化硬盘缓存从而提高系统性能
- Java 判断字符串是否为空的四种方法
- 大一的各种c++实验课小程序
- 做到以下五点,让你的主页人见人爱
- JSP学习笔记
- jdbc 连接 Access 乱码解决
- DWR调用Java中的方法
- (void) (&_x == &_y)
- Android开发技巧:永不关闭的Toast信息框
- 顺序表--数组
- lcd flash sdram
- java.lang.NoClassDefFoundError: javax/el/ExpressionFactory
- 学习c++该读的书籍
- 消息模式Toast.makeText用法