尝试更新Access数据库时出现NonWritableChannelException

时间:2016-09-08 21:17:40

标签: java sql ms-access ucanaccess jackcess

第一次使用UCanAccess进行项目时,我在将一行插入我的一个数据库表(在Microsoft Access中)时遇到了很多麻烦。

我的代码很有意义,但是一旦执行,我每次都会得到相同的错误,即使NetBeans能够连接到我的数据库。

 
    package Vegan;

import java.sql.Connection;
import java.sql.DriverManager;


public class connectionString {

static Connection connection = null;

public static Connection getConnection()
{
    try
    {
        connection = DriverManager.getConnection("jdbc:ucanaccess://C://MyDatabase1.accdb");
        System.out.println("---connection succesful---");
    }

    catch (Exception ex)
    {
        System.out.println("Connection Unsuccesful");
    }

    return connection;
}  

import java.sql.Connection;
import java.sql.DriverManager;


public class connectionString {

static Connection connection = null;

public static Connection getConnection()
{
    try
    {
        connection = DriverManager.getConnection("jdbc:ucanaccess://C://MyDatabase1.accdb");
        System.out.println("---connection succesful---");
    }

    catch (Exception ex)
    {
        System.out.println("Connection Unsuccesful");
    }

    return connection;
}  

之后,当我执行AddTest()方法时,我得到了这个系统输出:


    package Vegan;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


public class DB {


private static ResultSet rs = null;
private static PreparedStatement ps = null;
private static Connection connection = null;

public DB() {
    connection = connectionString.getConnection();
}


public void AddTest() {
    try {

        String sql = "INSERT INTO CategoryTbl(CategoryName) VALUES (?)";
        ps = connection.prepareStatement(sql);

        ps.setString(1, "Flours");
        ps.executeUpdate();
        System.out.println("Inserted");
    } catch (Exception ex) {
        System.out.println(ex.getLocalizedMessage().toString());
    }

}

当我再次检查Access时,没有对数据库进行任何更改。 可能导致这种情况的原因是什么,错误消息是什么意思?谢谢

1 个答案:

答案 0 :(得分:2)

" java.nio.channels.NonWritableChannelException"表示无法更新数据库文件。在您的情况下,这是因为数据库文件位于Windows系统驱动器的根文件夹(C:\)中,并且凡人对该文件夹具有受限制的权限。

解决方案:将数据库文件移动到您具有完全写入权限的文件夹中。