项目场景:
具体场景是需要访问另一C/S架构软件生成的本地数据库,有两种,第一种是access数据库.mdb,第二种是闻所未闻的火鸟数据库.fdb文件,将二者中的数据提取出来入mysql。(期间走了很多弯路,包括火鸟数据库如何访问,能访问之后如何与现有项目兼容,最令人发指的是中文网站上资料少的可怜,能找到大多博客或者文章都是十年前甚至十五年前的资料)
问题描述
1.(.fdb)火鸟数据库如何访问?
https://www.firebirdsql.org/en/jdbc-driver/
先把官网放在这,许多需要用到的资源包括文档都在这里可以找到
两种方式:第一种:通过服务方式 直接上代码
import java.sql.*;
public class HelloServer {
public static void main(String[] args) throws Exception {
Class.forName("org.firebirdsql.jdbc.FBDriver");
Connection connection = DriverManager.getConnection(
"jdbc:firebirdsql://localhost:3050/c:/db/employee.fdb",
"SYSDBA", "masterkey");
// do something here
}
}
需要注意的是
- 此种方式需要安装火鸟数据库的客户端及服务,下图是我安装的版本,可以在刚刚的官网上找到安装包下载链接。
- 我使用的是Firebird4.0 For Java 8 的jar包,可以适配1.8版本的jdk
第二种办法是使用本地化
链接方式但是需要加载部分dll其中最重要的是图中提到的两个dll
否则会遇到下图种Native library (win32-x86-64/fbembed.dll) not found in resource path
的错误解决办法简单粗暴,直接加载这个dll(被这个问题卡了一下午,恶心呐,恶心!)
System.load("C:\\xxx\\xx\\xxxx\\xx\\fbclient.dll");
本地化访问代码如下:
url = "jdbc:firebirdsql:embedded:" + filePath ; // 数据库链接字符串
try {
Properties props = new Properties();
props.setProperty("user", "SYSDBA");
props.setProperty("password", "masterkey");
props.setProperty("encoding", "UTF8");
Class.forName("org.firebirdsql.jdbc.FBDriver");
Connection conn = DriverManager.getConnection(url,props);
stmt = (Statement) conn.createStatement();
rs = stmt.executeQuery(Sql);
ResultSetMetaData data = rs.getMetaData();
while (rs.next()) {
Map map = new HashMap();
for (int i = 1; i <= data.getColumnCount(); i++) {
String columnName = data.getColumnName(i); // 列名
String columnValue = rs.getString(i);
map.put(columnName, columnValue);
}
maplist.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
后面的有时间继续续写,写的不好多见谅