【问题标题】:Cannot connect to MS Access Database?无法连接到 MS Access 数据库?
【发布时间】:2014-12-11 15:44:52
【问题描述】:

我正在 Eclipse 中构建一个 android 应用程序,但我无法连接到我的 MS Access 数据库。我使用的是我在网上找到的代码,它使用的是 JTBS,但我不希望我的数据库位于服务器上,所以我改变了它到 ODBC。(我是初学者,所以请记住我的错误可能非常基本或愚蠢) 这是我的代码:

import java.sql.*;

public final class Database 
{

public Connection connectionObj;
private Statement statement;
public static Database dataBase;
ResultSet res ;

Database() 
{
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Users/barw1_000/Desktop/Projects/SwinApp;";
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String userName = "";
    String password = "";

    try 
    {

        Class.forName(driver).newInstance();
        this.connectionObj = (Connection)DriverManager.getConnection(url,userName,password);

    }
    catch (Exception sqle) 
    {
        sqle.printStackTrace();
    }
}
/**
 *
 * @return MysqlConnect Database connection object
 */
public static synchronized Database getDbCon() 
{
    if ( dataBase == null ) 
    {
        dataBase = new Database();
    }
    return dataBase;

}
/**
 *
 * @param query String The query to be executed
 * @return a ResultSet object containing the results or null if not available
 * @throws SQLException
 */
public ResultSet query(String query) throws SQLException
{
    statement = dataBase.connectionObj.createStatement();
     res = statement.executeQuery(query);
    return res;
}
/**
 * @desc Method to insert data to a table
 * @param insertQuery String The Insert query
 * @return boolean
 * @throws SQLException
 */
public int insert(String insertQuery) throws SQLException 
{
    statement = dataBase.connectionObj.createStatement();
    int result = statement.executeUpdate(insertQuery);
    return result;

}

}

显示的错误是:

Invalid layout of java.lang.String at value
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (javaClasses.cpp:126), pid=7136, tid=4712
#  fatal error: Invalid layout of preloaded class
#
# JRE version:  (8.0_25-b18) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\barw1_000\Desktop\Projects\SwinApp\SwimApp\hs_err_pid7136.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

我也不知道如何在应用程序中使用这个数据库,所以如果你能给我任何关于它的信息,那就太好了。

【问题讨论】:

    标签: java android database jdbc database-connection


    【解决方案1】:

    您的错误为 JRE version: (8.0_25-b18),表明您正在使用 Java 8。JDBC-ODBC 桥已从 Java 8 中删除,因此您无法使用 ODBC。

    您也许可以使用UCanAccess JDBC 驱动程序(设置详细信息here)。 UCanAccess 使用 HSQLDB 作为后备数据库,将 Access 数据库的副本保存在存储或内存中,因此对于 Android 应用程序来说可能有点占用资源。

    更轻量级的解决方案是使用Jackcess 直接更新 Access 数据库文件,但您将无法使用 SQL。相反,您必须使用 Jackcess API,它非常强大,但与 SQL 也有很大不同。

    最后,正如 cmets 对您的其他(相同)问题所述,您可能需要重新考虑使用 Access 数据库文件并改用 SQLite。

    【讨论】:

    • @barweiss 看答案末尾here
    • @barweiss 不,不是。这是 Java 7 中的工作代码。如果您说没有 Class.forName() 语句,则不再需要(对于 JDBC 4 及更高版本)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2018-03-11
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多