Не могу подключиться к БД (Oracle) при помощи JDBC Thin driver

273
26 апреля 2018, 11:37

Извиняюсь за возможно глупый вопрос, я новичок и только разбираюсь.

Пытаюсь выполнить подключение к БД. Использую код из мануала:

class JDBCVersion
{
  public static void main (String args[]) throws SQLException
  {
    OracleDataSource ods = new OracleDataSource();
    ods.setURL("jdbc:oracle:thin:jdbc/jdbc@localhost:1521/XE");
    Connection conn = ods.getConnection();
    // Create Oracle DatabaseMetaData object
    DatabaseMetaData meta = conn.getMetaData();
    // gets driver info:
    System.out.println("JDBC driver version is " + meta.getDriverVersion());
  }
}

Не получается:

Exception in thread "main" java.sql.SQLRecoverableException: Ошибка ввода/вывода: Undefined Error at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:774) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691) at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:384) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:273) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:198) at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:176) at JDBC.JDBCVersion.main(JDBCVersion.java:12) Caused by: oracle.net.ns.NetException: Undefined Error at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:271) at oracle.net.ns.NSProtocol.connect(NSProtocol.java:317) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518) ... 8 more

Средствами IDE подключение к базе происходит нормально. Помогите пожалуйста разобраться.

Answer 1

Проблема решилась путём замены региональных настроек перед открытием соединения:

Locale.setDefault(Locale.ENGLISH);

Спасибо всем кто откликнулся.

Answer 2

Вы можете получить соединение следующим образом:

String jdbcUrl = "jdbc:oracle:thin:@localhost:1521/XE"
String userid = "hr";
String password = "hr";
Connection conn;
public void getDBConnection() throws SQLException{
    OracleDataSource ds;
    ds = new OracleDataSource();
    ds.setURL(jdbcUrl);
    conn=ds.getConnection(userid,password);
}
Answer 3

Как вариант, можно попробовать таким образом через DriverManager. Он сам находит необходимый ему драйвер по виду url.

public static Connection getConnection(String url, String user, String password) {
    try {
        Properties props = new Properties();
        props.setProperty("user", user);
        props.setProperty("password", password);
        return DriverManager.getConnection(url, props);
    } catch (SQLException | ClassNotFoundException e) {
        logger.error(e);
        return null;
    }
}
READ ALSO
Сериализация DTO объекта. Json

Сериализация DTO объекта. Json

Есть класс Building

192
Управление панелью навигации

Управление панелью навигации

Скрыл программно статус-бар и нижнюю панель навигацииНо при свайпе снизу вверх в нижней части экрана навигационная панель выезжает

197
Как на java подменить код библиотеки?

Как на java подменить код библиотеки?

Есть библиотека которая использует HashMap из стандартной библиотекиКак можно сделать так, чтобы она использовала мой HashMap? Код библиотеки трогать...

189