我正处于从JDBC-ODBC桥驱动程序迁移到UCanAccess驱动程序的中间位置。
在执行此操作时,我遇到以下问题:UCanAccess驱动程序返回UPPERCASE中的所有列名,但我需要它们为CamelCase。
有什么想法吗?
THX!
答案 0 :(得分:3)
对于2015年8月发布的UCanAccess版本3.x,ResultSetMetaData
现在以大小写混合的形式返回列名,如果它们是在数据库中定义的那样。 (也就是说,它们不再被强制为大写。)
<小时/> (原始答案)
由于UCanAccess依赖于Jackcess,一种可能的解决方法可能是从Jackcess本身检索列名。以下代码,使用UCanAccess 2.0.4和Jackcess 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