因公司业务需要使用Access数据库,多方查找资料后,记录一次远程操作Access数据库方法。
使用的工具
java JDK 1.6 32位;
Access 2016;
rmjJdbc包
工具安装
1.在window服务器下安装32位JDK 1.6,并配置系统环境变量。
2.安装RmiJdbc3.3,作为桥接驱动,需要32JDK1.6才可启动(或者1.7,我这里没有尝试,1.8版本启动会失败,64位可能失败,可自行尝试),同样配置环境变量,如下图:
3.创建测试数据库test.mdb
启动RmiJdbc服务
启动windows cmd,启动rmijdbc:
java -jar D:\jar\RmiJdbc3.3\RmiJdbc\dist\lib\RmiJdbc.jar
下图为启动失败:
启动失败一般是因为JDK版本过高,建议JDK降低至32位1.6或者1.7进行尝试。
tips:这里使用的是32位版本JDK,64位没有尝试,有兴趣可自行尝试~
设置Access数据源
通过 win + r 输入 odbcad32
此方式是64位ODBC数据源管理,我这里使用的是32位,可在C:\Windows\SysWOW64下找到32位ODBC数据源
双击打开即可
这时候已经是32位数据源了
这时候开始设置:
选择之前创建的mdb文件
保存即可。
Java如何连接
同样需要rmiJdbc3.3,本地调试可先手动将包导入idea
创建驱动程序连接Access
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectAccessDatabase {
public static void main(String[] args) {
try {
Class.forName("org.objectweb.rmijdbc.Driver");
String url = "jdbc:rmi://ip/jdbc:odbc:test jdbc:odbc:databaseName";//ip为Access所在服务器ip,test为刚刚创建的数据源名称
Connection con = DriverManager.getConnection(url, "", "");//没有用户名和密码的时候直接为空
Statement sta = con.createStatement();
ResultSet rst = sta.executeQuery("select * from sutdent");//sutdent为access数据库中的一个表名
if(rst.next()){
System.out.println(rst.getString("name"));
//解决乱码问题
// System.out.println(new String(rst.getBytes("name"), "gbk"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} /*catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
}
}
部署到k8s遇到问题
1.本地调试完成后,可先将rmiJdbc打包到maven
2.部署到K8s之后,发现一直连接超时,经查看是K8s与Access所在的网络不通,这时可找运维进行协助(不要觉得是自己代码问题!)
友情提示
rmiJdbc包如有需要可在评论区说明,感觉各位没什么机会用到这个,就先不放链接了。