Не удается подключиться к Oracle 11g через JDBC

1

Я пытаюсь подключить свое приложение JSF к моей базе данных Oracle 11g. Некоторое время назад у меня было приложение JSF, связанное аналогичным образом с базой данных Derby. Примерно в то же время я смог подключиться к базе данных Oracle 11g с помощью программы Java, которую я написал.

Я попытался перенести код в этот недавний проект, и, хотя все выглядит правильно, мое соединение в коде возвращает 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;
    }
  • 0
    Вы получаете ошибку?
  • 0
    Пожалуйста, tnsnames.ora
Показать ещё 9 комментариев
Теги:
jdbc
oracle11g

3 ответа

0
Лучший ответ

После нескольких тестов и принудительного развертывания приложения несколько раз (хотя он будет показывать изменения кодирования без этого), следующий синтаксис закончился:

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);

//код конечного компонента

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;
}
1

Как упоминалось выше, вы уверены, что db работает на порту 8081, а не в стандарте 1521. Также является тестом dbname или XE, как у вас в URL-адресе. Я подозреваю, что xe, если у вас стандартная настройка.

Следующее должно получить ваше соединение, предполагая, что в качестве внешней библиотеки есть ящик драйвера oracle

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "your_user", "your_password");
  • 0
    Я забыл об этом, когда я получил автономный модуль для подключения к БД, он был на порту 1521, но у меня все еще возникают проблемы с подключением JSF с тем же синтаксисом.
0

Я думаю, что вы ошибаетесь в том, что вы объединяете url и dbname, и это должен быть только URL-адрес, поскольку вы подключаетесь к экземпляру xe, а не xeTest, а не

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

использование

connect = DriverManager.getConnection((url), dbUsername, dbPassword);
  • 0
    Я пробовал оба способа, также используя: xe / и: xe:
  • 0
    так в итоге это был и порт подключения?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню