Я не могу опубликовать базу данных для воспроизведения проблемы! Потому что это очень сложная база данных с множеством таблиц и связей, и она не принадлежит мне. Мне не разрешено делиться этим (даже без данных) из-за Общих правил защиты данных.
Кроме того, я не хотел ничего менять в базе данных, поэтому я хотел отключить проверки ограничений, чтобы иметь возможность просто подключиться к базе данных и просто ПРОЧИТАТЬ строки некоторых таблиц.
В конце я сделал копию базы данных и удалил все связи между таблицами, а затем код мог подключиться к БД, НО : УТОЧНУЛО 30 МИНУТ ДЛЯ ПОДКЛЮЧЕНИЯ !!!! Таким образом, даже если бы мне удалось сделать копию из базы данных и удалить все связи между всеми таблицами каждый раз, когда я хочу запустить свой код (что на самом деле невозможно в моей задаче), я должен был ждать 30 минут, чтобы просто открой соединение !!! Я нахожу действительно смешным, что нет возможности отключить проверки ограничений и открыть соединение для чтения данных, когда некоторые ограничения не выполняются !!!
Но в любом случае, в конце (после двух дни в поисках!) я нашел решение для своей работы. Я не использую какой-либо тип соединения DriverManager этого типа:
Connection connection = DriverManager.getConnection(databaseURL)
Вместо этого я использую DatabaseBuilder, чтобы открыть свою базу данных, получить таблицы и прочитать строки! Для тех, кто имеет такую же проблему и просто хочет подключиться к базе данных MS-Access, чтобы ПРОЧИТАТЬ некоторые данные, ничего не меняя, я предлагаю этот способ. Это очень просто и быстро!
String fileName = "my_database.accdb";
File file = new File(fileName);
Database db = null;
DatabaseBuilder databaseBuilder = new DatabaseBuilder(file);
try {
db = databaseBuilder.open();
} catch(IOException e) {
e.printStackTrace();
}
Table myTable = db.getTable("myAccessTableName");
for(Row row : myTable) {
String firstName = row.getString("first_name");
String lastName = row.getString("last_name");
}
База данных, DatabaseBuilder, Row и Table из "jackcess". Таким образом, этот импорт необходим:
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.Table;
Дополнительные примеры использования этого способа можно найти здесь: Java Примеры кода и здесь: UCanAccess