使用UCanAccess读取.mdb文件将返回全大写的列名



我正处于从JDBC-ODBC桥接驱动程序迁移到UCanAccess驱动程序的中间阶段。

在这样做的过程中,我面临着以下问题:UCanAccess驱动程序以大写返回所有列名,但我需要它们是CamelCase。

有什么想法吗?

Thx!

2015年8月发布的UCanAccess 3.x版本中,ResultSetMetaData现在以混合大小写返回列名(如果数据库中就是这样定义的话)。(也就是说,他们不再被迫大写。)


(原始答案)

由于UCanAccess依赖于jaccess,一种可能的解决方法可能是从jaccess本身检索列名。以下代码,使用UCanAccess 2.0.4和Jackess 2.0.4,…

package ucanaccesstest;
import java.io.File;
import java.io.IOException;
import java.sql.*;
import com.healthmarketscience.jackcess.*;
public class UCanAccessTestMain {
    public static void main(String[] args) {
        String dbFileSpec = "C:/Users/Public/mdbTest.mdb";
        String tableName = "ucaTest";
        // UCanAccess
        try (Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + dbFileSpec)) {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM [" + tableName + "] WHERE False");
            ResultSetMetaData rsmd = rs.getMetaData();
            System.out.println("Column names as reported by ResultSetMetaData:");
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.println(rsmd.getColumnName(i));
            }
            rs.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace(System.out);
        }
        System.out.println();
        // Jackcess
        try (Database db = DatabaseBuilder.open(new File(dbFileSpec))) {
            Table tbl = db.getTable(tableName);
            System.out.println("Column names as reported by Jackcess:");
            for (Column col : tbl.getColumns()) {
                System.out.println(col.getName());
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        }
    }
}

生成以下控制台输出:

Column names as reported by ResultSetMetaData:
ID
FIELD1
FIELD2
Column names as reported by Jackcess:
Id
Field1
Field2

最新更新