java访问mdb文件隐藏表报错解决办法:
UCAExc:::5.0.1 user lacks privilege or object not found: MSYSOBJECTS
在地址url中添加;sysSchema=true
在sql语句中添加sys.MSysObjects 写法
在地址url中添加;sysSchema=true
在sql语句中添加sys.MSysObjects 写法
数据库访问方式:
public static DruidContext getDruidContextByMdb(String mdbPath){DbConfig mdbCfg=new DbConfig();mdbCfg.setDbType("mdb");//mdbCfg.setUrl("jdbc:odbc:Driver={MicroSoft..Access..Driver(*.mdb)};DBQ="+mdbPath);mdbCfg.setUrl("jdbc:ucanaccess://"+mdbPath+";sysSchema=true");mdbCfg.setUsername("");mdbCfg.setPassword("");return getDruidContext(mdbCfg);}
private List<String> getTableNameList(DruidContext db){String sql="select b.name from sys.MSysObjects a inner join sys.MSysObjects b ";sql+=" on a.Id=b.ParentId ";sql+=" where a.Name='Tables' and b.Flags=0";//return db.queryForList(sql);}public void readFileWriteData(String mdbPath){DruidContext db=DruidFactory.getDruidContextByMdb(mdbPath);List<String> tableList=this.getTableNameList(db);String sql="select top 100 * from nh";SqlRowSet row=db.queryForRowSet(sql);row.first();while(row.next()){System.out.println(row.getString("nhdm"));}//List<Map<String,Object>> mapList=db.getDataTable("select top 100 * from nh");//for(String table :tableList){//}}
pom.xml引入包
<dependency><groupId>net.sf.ucanaccess</groupId><artifactId>ucanaccess</artifactId><version>5.0.1</version>
</dependency>
Druid初始化为JdbcTemplate模板的方法
public static final String driverClassName_mdb="net.ucanaccess.jdbc.UcanaccessDriver";
public DruidContext initDataStore2(DbConfig cds) {if (this.dataSource == null) {try {lock.writeLock().lock();if (this.dataSource == null) {//数据源配置Properties prop = new Properties();switch (cds.getDbType()) {case "postgis":prop.put("driverClassName", driverClassName_postgresql);break;case "postgresql":prop.put("driverClassName", driverClassName_postgresql);break;case "mysql":prop.put("driverClassName", driverClassName_mysql);break;case "oracle":prop.put("driverClassName", driverClassName_oracle);break;case "sqlserver":prop.put("driverClassName", driverClassName_sqlserver);break;case "dm":prop.put("driverClassName", driverClassName_dm);break;case "mdb":prop.put("driverClassName", driverClassName_mdb);prop.put("hsqldb.method_class_names","net.ucanaccess.*");break;default:prop.put("driverClassName", driverClassName_postgresql);break;}prop.put("url", cds.getUrl());prop.put("username", cds.getUsername());prop.put("password", cds.getPassword());//prop.put("initialSize", "2");prop.put("maxActive", "20");prop.put("maxWait", "10000");//返回的是DataSourcethis.dataSource = DruidDataSourceFactory.createDataSource(prop);this.jdbcTemplate = new JdbcTemplate(this.dataSource);}} catch (Exception e) {e.printStackTrace();} finally {lock.writeLock().unlock();}}return this;}
本blog地址:http://blog.csdn.net/hsg77