0
点赞
收藏
分享

微信扫一扫

jdk1.8版本下访问本地数据库文件(access数据库.mdb)与(火鸟数据库.fdb)踩坑记录

贵州谢高低 2022-04-29 阅读 23

项目场景:

具体场景是需要访问另一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
  }
}

需要注意的是

  1. 此种方式需要安装火鸟数据库的客户端及服务,下图是我安装的版本,可以在刚刚的官网上找到安装包下载链接。
    在这里插入图片描述
  2. 我使用的是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();
            }

后面的有时间继续续写,写的不好多见谅

举报

相关推荐

0 条评论