java访问mdb文件隐藏表报错解决办法:user lacks privilege or object not found: MSYSOBJECTS

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");
                    //返回的是DataSource
                    this.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