Access (.mdb) Работа с базой данных с помощью jdbc - PullRequest
3 голосов
/ 29 марта 2012

Справочная информация: Работа над приложением, которое будет запускаться на сервере Apache, размещенном в Network Solutions.Друг / клиент настаивал на том, чтобы вместо базы данных SQL использовалась база данных Access.

Текущая проблема: Написал тестовую программу Java, чтобы убедиться, что я могу подключиться к базе данных, прежде чем приступить к написанию всего бэкэнда.Когда я запускаю этот код на JVM сервера apache, конечный продукт будет размещен:

import java.sql.*;
import java.io.*;
public class test {
    public static void main(String[] args) {
        try {
            Class driverClass = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            DriverManager.registerDriver((Driver) driverClass.newInstance());

            // set this to a MS Access DB you have on your machine
            String filename = new File(".").getCanonicalPath() + "/ITEMS.mdb";


            String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
            database+= filename.trim(); // add on to the end 
            // now we can get the connection from the DriverManager

            System.out.println(database);

            Connection conn = DriverManager.getConnection( database );
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage() + " " + e.getLocalizedMessage());
            e.printStackTrace();
        }
    }
}

Я получаю исключение нулевого указателя в строке Connection conn = DriverManager.getConnection (database)

Вот трассировка стека:

java.lang.NullPointerException

        at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)

        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)

        at java.sql.DriverManager.getConnection(DriverManager.java:582)

        at java.sql.DriverManager.getConnection(DriverManager.java:207)

        at test.main(test.java:20)

Чтобы написать этот тест, я использовал его в качестве основного источника: http://www.planet -source-code.com / vb / scripts / ShowCode.asp? TxtCodeId= 2691 & lngWId = 2

Ответы [ 2 ]

0 голосов
/ 19 сентября 2013
String strconnect="jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ="
Sring filename="some path";
StringBuilder a =new StringBuilder();
a.append(strconnect);
a.append(filename);
String db = a.toString();   
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c= DriverManager.getrConnection(db,"","")
Statement stmt = c.createStament();
String query = "some query";
stmt.executeQuery(query);
c.close();

Никогда не получайте канонический путь, либо укажите путь к файлу доступа, либо используйте JFile Explore и получите путь

также не забудьте закрыть соединение

0 голосов
/ 29 марта 2012

Поскольку вы упоминаете apache, я предполагаю, что сервер работает под управлением Linux или BSD.
В этом случае, пожалуйста, посмотрите на следующее:

В Linux нет драйверов по умолчанию для Access, и ODBC JDBC не будет работать, если вы не установите его.

Если нет особой и непреодолимой причины для использования базы данных Access в качестве бэкэнда для веб-сайта на сервере Linux, скажите своему другу, что это технически или даже экономически не согласовано. *

Если вам нужна облегченная база данных на сервере, используйте SQLite : это бесплатно, есть хорошая поддержка для подключения к ней из Java в linux , есть хорошие инструменты (даже плагины для браузера ), и вы всегда можете преобразовать эту базу данных в Access , если ваш друг хочет время от времени получать резервную копию Access.

В противном случае, используйте PostgreSQL или MySQL, как это делают все (как правило, по уважительной причине).

...