【问题标题】:org.postgresql.Driver not working in NetBeans [duplicate]org.postgresql.Driver 在 NetBeans 中不起作用 [重复]
【发布时间】:2018-05-13 18:21:15
【问题描述】:

我正在尝试将我的 sql 数据库连接到我的 java 项目,但由于某种原因 postgresql.Driver (org.postgresql.Driver) 似乎不起作用。

我已确保导入所有 sql 方法等 (java.sql.*)

我尝试运行的方法如下所示:

public boolean createUserInDB(String username, String password, boolean b, java.util.Date createdTime, java.util.Date lastLoginTime) {
    try {
        Class.forName("org.postgresql.Driver");
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement st = conn.createStatement();

        String sql = "INSERT INTO login(brugernavn, kodeord, status, created_time, last_login_time) "
                + "VALUES(" + username + ", " + password + ", " + true + ", "
                + createdTime + ", " + lastLoginTime + ");";

        st.executeUpdate(sql);

        System.out.println("Query successfull");


    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return true;

}

不要介意查询的第一行(属性是丹麦语)。

运行此方法时,它唯一要做的就是打印出“org.postgresql.Driver”,然后返回 true,从而告诉用户(在 GUI 中)已经进行了查询。

我已经为 postgresql 版本 42.2.2 下载了最新的驱动程序,但仍然没有成功。

我错过了什么?

【问题讨论】:

  • 在每个 JDBC 驱动程序中连接这样的查询是错误的。在调试器中查找查询
  • 你能再具体一点吗?我还是个新手。
  • 这里没有打印“org.postgresql.Driver”。使用调试器,查看变量等。在异常上设置断点。我几乎可以肯定查询会给出异常
  • 在我看来,PostgreSQL JDBC 驱动程序 JAR 似乎不在类路径中。您得到的异常很可能是 ClassNotFoundException,它通常只包含异常消息中缺少的类的名称。 (尝试在catch 块中写e.printStackTrace() 来确认这一点。) Stack Overflow 包含大量问题来帮助您添加 JAR,例如 stackoverflow.com/questions/4879903
  • @LukeWoodward 我现在做了一些修改并连接到数据库,但它说如果 SSL 关闭。 org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "MyIpAdress", user "g", database "ksevsemh", SSL off 我该如何解决这个问题?

标签: java postgresql jdbc


【解决方案1】:

当您尝试将 java.util.date 插入 SQL 日期时,您的查询格式似乎是错误的。尝试 PrepareStatement 而不是像下面这样的 CreateStatement,它会为您的 Postgres 数据库处理日期。希望它会起作用。

PreparedStatement st = conn.prepareStatement("insert into login (brugernavn, kodeord, status, created_time, last_login_time) values (?,?, ?, ?, ?)");
st.setString(1, username);
st.setString(2, password);
st.setBoolean(3, true);
st.setObject(4, createdTime);
st.setObject(5, lastLoginTime);
st.executeUpdate();
st.close();

【讨论】:

  • 它仍然只打印出“org.postgresql.Driver”。奇怪的是我制作了另一个项目,它能够打印出数据库中的信息并显示在我的 java-consol 中,它仍然可以与 42.2.1 驱动程序一起使用。现在,当我尝试将内容插入我的数据库时,由于某些奇怪的原因,它不会允许它...
  • 你能检查你正在使用的用户ID是否对数据库有写权限吗?你能用“e.printstacktrace()”代替 System.out.println(e.getMessage());打印完整的错误..
  • 发现问题。我已经为数据库的用户名和查询定义了相同的名称,我使用我想要创建的用户而不是已经存在的用户登录到数据库。感谢您的帮助:)
  • 很高兴知道这一点。如果你希望你可以接受它作为回答线程。谢谢!!
【解决方案2】:

第一个问题:

} catch (Exception e) {
    System.out.println(e.getMessage());
}

这不是 Luke Woodward 建议的列出例外的正确方法。你需要使用:

} catch (Exception e) {
    e.printStackTrace();
}

这将列出异常,而不仅仅是打印出错误的字符串。

第二个问题:

我将数据库登录信息的参数命名为与我试图在该方法中创建的用户相同。这导致 Java 使用“用户名”和“密码”(createUserInDB 方法参数)而不是用户数据库登录信息。

感谢一路上提出建议的人的帮助:)

【讨论】:

    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多