Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблема с коннектом к Oracle через Java


Автор: agR 10.4.2007, 21:09
hi

Установил Oracle XE. Тестовой прогой, чтобы проверить все ли настроено норм, пытаюсь законнектиться к базе и натыкаюсь на:

ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified 

Пробовал в реестре менять значение NLS_LANG - не помогло. 

Потом посмотрел настройки базы:

NLS_CALENDAR                        GREGORIAN
NLS_CHARACTERSET                AL32UTF8
NLS_COMP                               BINARY
NLS_CURRENCY                         р.
NLS_DATE_FORMAT                    DD.MM.RR
NLS_DATE_LANGUAGE             RUSSIAN
NLS_DUAL_CURRENCY             р.
NLS_ISO_CURRENCY               RUSSIA
NLS_LANGUAGE                          RUSSIAN
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NUMERIC_CHARACTERS           ,
NLS_SORT                               RUSSIAN
NLS_TERRITORY                           RUSSIA
NLS_TIME_FORMAT                         HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT            DD.MM.RR HH24:MI:SSXFF
NLS_TIMESTAMP_TZ_FORMAT          DD.MM.RR HH24:MI:SSXFF TZR
NLS_TIME_TZ_FORMAT              HH24:MI:SSXFF TZR

Стоит ли вообще менять значение NLS_LANG? Сейчас ее значение: 

RUSSIAN_RUSSIA.CL8MSWIN1251

Смотрел решение в инете.... нашел, но как-то не одно не подошло... может плохо искал.... сейчас пойду еще копаться... 

Автор: Llucas 11.4.2007, 13:56
таблицы посоздавал? пользоватея завел? что за тестовая прога? код выкладывай...

Автор: agR 11.4.2007, 18:07
Та прога обычная... из книженции.... 
Код

package TheFirst;

import java.sql.*;
import java.io.*;
import java.util.*;

public class TestDB {
    public static void main(String[] args) {
        try {
            runTest();
        }
        catch (SQLException ex) {
            while(ex!=null) {
                ex.printStackTrace();
                ex=ex.getNextException();
            }
        }
        catch(IOException ex) {
            ex.printStackTrace();
        }
    }
    
    public static void runTest() throws SQLException, IOException {
        Connection conn = getConnection();
        try {
            Statement stat = conn.createStatement();
            stat.execute(
                    "CREATE TABLE Greetings (Message CHAR(20))");
            stat.execute(
                    "INSERT INTO Greetings VALUES('Hello, World!')");
            ResultSet result = stat.executeQuery("SELECT * FROM Greetings");
            result.next();
            System.out.println(result.getString(1));
            stat.execute("DROP TABLE Greetings");
        }
        finally {
            conn.close();
        }
    }
    public static Connection getConnection() throws SQLException,IOException {
        Properties props = new Properties();
        FileInputStream in = new FileInputStream(TestDB.class.getResource("database.properties").getPath());
        props.load(in);
        in.close();
        
        String drivers = props.getProperty("jdbc.drivers");
        if(drivers!=null)
            System.setProperty("jdbc.drivers", drivers);
        String url = props.getProperty("jdbc.url");
        String username = props.getProperty("jdbc.username");
        String password = props.getProperty("jdbc.password");
        
        return DriverManager.getConnection(url,username,password);
    }
}

База стандартная - "XE".... пользователь тоже уже был - "HR"
Пароль к нему "hr", "hr".... короче говоря в Oracle сделал все так, как было написано в "Get Started" (Тока начинаю осваивать smile).

Файл database.properties:
Код

jdbc.drivers=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc.username=hr
jdbc.password=hr

Вот вроде бы все....  но коннекта нет...

Автор: foster 12.4.2007, 11:27
XE сильно урезан!  Я тоже сталкивался с такой проблемой и решением было изменение региональных стандартов на EN!

Автор: Llucas 12.4.2007, 14:56
Попробуй коннект сделать вообще без database.properties, что то типа:

Код

 private void connect() {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                connection = DriverManager.getConnection("jdbc:oracle:thin:user/password@10.151.1.3:1521:nameofDB");

            } catch (Exception e) {
                System.out.println("Unable to connect : " + e);
                System.exit(-1);
            }
        }


Вообще с XE  много проблем возникает....

Автор: Oberon2 13.4.2007, 09:45
Попробуй почитать здесь, наверное поможет:
http://www.ors.kz/?mod=html&id=277

Автор: agR 14.4.2007, 00:05
Спасибо, сейчас займусь.... а то пришлось с изменением локализации системы поменять кодировку в Eclipse, после чего во всех ранее сделанных прогах вместо кириллицы разный бред пишется.
Хоть это тема уже отдельного поста, но может, если это не прокатит, кто-то знает как поступить, чтоб при нынешних настройках локализации вернуть старые проги в нормальное состояние?

Автор: agR 14.4.2007, 00:27
Все работает!!!  smile 
Новые драйвера решили все проблемы. Региональные настройки вернул, кодировку поменял обратно.
Псб  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)