【问题标题】:derby database connect without username and password德比数据库连接没有用户名和密码
【发布时间】:2016-12-19 15:08:15
【问题描述】:

我在 Netbeans 中创建了一个 derby 数据库,并决定避免使用用户名和密码,这样我就不会忘记它(这是我的错误)。

在花费大量时间在 net beans 中创建我的项目、将我的数据库链接到各种表等之后。我无法获取下面的代码来连接到数据库。有没有办法使用没有密码或用户名的代码进行连接?或者我可以添加用户名和密码吗?

public class Database {   

private String DBusername = "";
private String DBpassword = "";
private String host = "jdbc:derby://localhost:1527/physioADB";

public Database(){

}

public Connection con() {


    try {

        Connection c = DriverManager.getConnection(host, DBusername, DBpassword);

        return c;
    } catch (SQLException e) {
        System.out.println(e);
        System.out.println("Faild to connect to database");
        return null;

    }
}

public void update(String update) {

    try {
        con().createStatement().executeUpdate(update);
        con().close();


    } catch (SQLException ex) {
        ex.printStackTrace();
    }

}
static ResultSet rs;

public ResultSet Query(String SQL) {

    try {
        rs = con().createStatement().executeQuery(SQL);
        con().close();

    } catch (SQLException ex) {
        Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showMessageDialog(null, "Unfortunatly an error occured and the database could not be reached");
    }
    return rs;
}

}

我得到的错误是:

java.sql.SQLNonTransientConnectionException: 用户 ID 长度 (0) 为 超出 1 到 255 的范围。线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 无法连接到数据库 physioasist.Database.update(Database.java:49) 在 physioasist.ClientsScreen.btnUpdateActionPerformed(ClientsScreen.java:787) 在 physioasist.ClientsScreen.access$200(ClientsScreen.java:15) 在 physioasist.ClientsScreen$3.actionPerformed(ClientsScreen.java:272) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6516) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 在 java.awt.Component.processEvent(Component.java:6281) 在 java.awt.Container.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4872) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4698) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在 java.awt.Window.dispatchEventImpl(Window.java:2719) 在 java.awt.Component.dispatchEvent(Component.java:4698) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 在 java.awt.EventQueue.access$300(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:706) 在 java.awt.EventQueue$3.run(EventQueue.java:704) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:720) 在 java.awt.EventQueue$4.run(EventQueue.java:718) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:717) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

我不是很熟练,这是一个学校项目,我在网上寻找答案,但我找不到类似的问题。

【问题讨论】:

  • 你试过备用电话DriverManager.getConnection(url) 吗?
  • 如果我只是像这样做 url --> Connection c = DriverManager.getConnection("jdbc:derby://localhost:1527/physioADB");那么错误就是这个java.sql.SQLNonTransientConnectionException: Connection authentication failure occurred。原因:用户名或密码无效。
  • 显然您确实需要用户名和密码。虽然您认为您不需要一个,但您必须配置您的数据库以便需要一个:db.apache.org/derby/docs/10.12/security/cseccsecure42374.html
  • 我再次检查,在 netbeans 中我转到服务并运行数据库服务器,然后我说创建数据库,它要求输入名称、用户名和密码...我命名它,但留下了用户名和密码空白。然后我单击数据库并说连接,当提示输入用户名和密码时,我将其留空,它连接正常....但是当没有输入用户名或密码时,我使用的代码仍然无法连接...

标签: java sql database netbeans derby


【解决方案1】:

在创建数据库时使用空白用户名显然存在错误(我发现的一页说这是 MySQL 错误,而不仅仅是 Apache/JavaDB)。我发现的几个选项:

  1. 修复 DB 配置,它是 META-INF 文件夹中的 persistence.xml 文件,您应该在 Netbeans 左侧“项目”选项卡的 Source Packages 下找到该文件。 this answer 中的更多信息,您需要将空白用户名和密码设置为正在使用的架构的名称(默认情况下可能为“APP”)。
  2. 您可以从头开始,但这意味着一切,而不仅仅是数据库。我尝试只是重建数据库,但这对我不起作用 - 我相信它仍然有来自先前数据库的信息,我相信在项目中,这些信息没有被清除。我可以说出来,因为我对新数据库的命名略有不同。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2016-11-18
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多