Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t通过JDBC连接到Oracle 11g_Java_Oracle_Jdbc_Oracle11g - Fatal编程技术网

Java Can';t通过JDBC连接到Oracle 11g

Java Can';t通过JDBC连接到Oracle 11g,java,oracle,jdbc,oracle11g,Java,Oracle,Jdbc,Oracle11g,我正在尝试将JSF应用程序连接到Oracle 11g数据库。不久前,我有一个JSF应用程序以类似的方式与Derby数据库连接。大约在同一时间,我能够通过自己编写的Java程序连接到Oracle 11g数据库 我尝试将代码移植到这个最近的项目中,虽然看起来一切正常,但代码中的连接返回null 为了进一步解决这个问题,当我尝试调试时,NetBeans似乎锁定了。我假设它将使用运行GlassFish 4的端口,但不知怎的,它无法判断其已被占用 感谢您的帮助;请让我知道,如果我可以提供更多的信息,我不知

我正在尝试将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);
使用


如上所述-您确定db在端口8081上运行,而不是在标准端口1521上运行。也就是url中的dbname测试或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;
}

您是否收到错误?请张贴
tnsnames.ora
不要在两个位置初始化实例变量。要么在声明中,要么在OracleBean的构造函数中,而不是两者。jar中还有两个
OracleDriver
类,一个在
oracle.jdbc
中,另一个在
oracle.jdbc.driver
中-我很确定您想要的是第一个类,而不是您正在使用的类。@A.L如果没有glassfish锁定,我似乎无法调试,所以我不确定在哪里查找错误。正如您在代码段中所看到的,如果connect对象为null,那么它将向网页返回“SQL错误”,这就是我目前的一个指示。@RomanC我不确定您的意思。我忘记了,当我单独连接到db时,它在端口1521上,但是我仍然无法让JSF使用相同的语法进行连接。所以最后是这个和连接端口?正确引用的是.jar文件、端口、url,并正确使用Netbeans/glassfish来部署项目。
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;
}