Я пытаюсь подключить свое приложение 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;
}
После нескольких тестов и принудительного развертывания приложения несколько раз (хотя он будет показывать изменения кодирования без этого), следующий синтаксис закончился:
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;
}
Как упоминалось выше, вы уверены, что db работает на порту 8081, а не в стандарте 1521. Также является тестом dbname или XE, как у вас в URL-адресе. Я подозреваю, что xe, если у вас стандартная настройка.
Следующее должно получить ваше соединение, предполагая, что в качестве внешней библиотеки есть ящик драйвера oracle
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "your_user", "your_password");
Я думаю, что вы ошибаетесь в том, что вы объединяете url и dbname, и это должен быть только URL-адрес, поскольку вы подключаетесь к экземпляру xe, а не xeTest, а не
connect = DriverManager.getConnection((url+dbName), dbUsername, dbPassword);
использование
connect = DriverManager.getConnection((url), dbUsername, dbPassword);
tnsnames.ora