无法通过 JDBC 连接到 Oracle 11g

Can't connect to Oracle 11g via JDBC

我正在尝试将我的 JSF 应用程序连接到我的 Oracle 11g 数据库。前一段时间,我有一个 JSF 应用程序以类似的方式连接 Derby 数据库。大约在同一时间,我能够通过我编写的 Java 程序连接到 Oracle 11g 数据库。

我已尝试将代码移植到这个最近的项目中,虽然一切看起来都正确,但我在代码中的连接返回 null。

为了进一步解决这个问题,NetBeans 在我尝试调试时似乎锁定了。我假设它会使用 运行 GlassFish 4 的端口,但不知何故无法判断它已被占用。

感谢任何帮助;如果我可以提供我不知何故忽略的更多信息,请告诉我。

代码片段如下:

@ManagedBean(name="OracleBean")
@RequestScoped
public class OracleBean {

    private String driver = "oracle.jdbc.driver.OracleDriver";
    private String url = "jdbc:oracle:thin:@localhost:8081:xe";
    private String dbName = "test";
    private String dbUsername = "Username";
    private String dbPassword = "password";
    private Connection connect = null;

    private OracleMethods Method;

    /**
     * Creates a new instance of DataBean
     */
    public OracleBean() {
        driver = "oracle.jdbc.driver.OracleDriver";
        url = "jdbc:oracle:thin:@localhost:8081:xe";
        dbName = "Test";
        dbUsername = "Username";
        dbPassword = "password";
        connect = null;

        Method = new OracleMethods();
    }

    public String getColorData(String rowID, int col) {
        connect = Method.getConnection(driver, url, dbName, dbUsername, dbPassword);

        if (connect == null) {
            return "SQL Error";
        }

//结束Bean代码

public class OracleMethods extends JPanel {

    private Connection connect = null;

    public OracleMethods() {}

    public Connection getConnection(String driver, String url, String dbName, String dbUsername, String dbPassword) {
        try {
            Class.forName(driver).newInstance();
            connect = DriverManager.getConnection((url + dbName), dbUsername, dbPassword);
        } catch (Exception lex) {
            lex.printStackTrace();
        }
        return connect;
    }

我认为你的错误是你正在连接 url 和 dbname,它应该只是 url 因为你连接到实例 xe 而不是 xeTest 而不是

connect = DriverManager.getConnection((url+dbName), dbUsername, dbPassword);

使用

connect = DriverManager.getConnection((url), dbUsername, dbPassword);

如上所述 - 您确定数据库在端口 8081 上是 运行 而不是标准的 1521。也就是您在 url 中使用的 dbname Test 或 XE。如果你有标准设置,我怀疑它是 xe。

假设您将 oracle 驱动程序 jar 作为外部库,以下应该可以为您建立连接

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "your_user", "your_password");

经过几次测试并强制部署应用程序几次(尽管没有这个它会显示编码更改),以下语法最终起作用:

public OracleBean()
{
    driver = "oracle.jdbc.driver.OracleDriver";
    url = "jdbc:oracle:thin:@localhost:1521:xe";
    dbName = "Test";
    dbUsername = "username";
    dbPassword = "password";
    connect = null;

    Method = new OracleMethods();
}

public String getColorData(String rowID, int col)
{
    connect = Method.openConnection(driver, url, dbName, dbUsername, dbPassword);

//结束bean代码

public Connection openConnection(String driver, String url, String dbName, String dbUsername, String dbPassword)
{
    try
    {
        Class.forName(driver);
    }
    catch (ClassNotFoundException e)
    {
            System.out.println("Could not load the driver");
    }

    try
    {
        connect = DriverManager.getConnection((url), dbUsername, dbPassword);
    }
    catch(Exception lex)
    {
        lex.printStackTrace();
    }

    return connect;
}