Установка NLS_LANG для тонкого драйвера JDBC?

#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>

std::string exec(const char* cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
    if (!pipe) {
        throw std::runtime_error("popen() failed!");
    }
    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
        result += buffer.data();
    }
    return result;
}

предC++ 11 версий:

#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>

std::string exec(const char* cmd) {
    char buffer[128];
    std::string result = "";
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

Замена popen и pclose с _popen и _pclose для Windows.

23
задан skaffman 7 March 2012 в 11:09
поделиться

2 ответа

The NLS_LANG settings are derived from the java.util.Locale . Therefore, you will need to make a call similar to this before connecting:

Locale.setDefault(Locale.<your locale here>);
13
ответ дан 29 November 2019 в 01:45
поделиться

Я боролся с той же проблемой и обнаружил, что тонкие jdbc драйверы Oracle не требуют указания NLS_LANG или системной локали. Но когда вы подключаетесь к неанглийским базам данных, вы должны иметь orai18n.jar в classpath.

из Oracle® Database JDBC Developer's Guide and Reference

Обеспечение поддержки глобализации

Основные файлы Java Archive (JAR), ojdbc5.jar и ojdbc6.jar, содержат все необходимые классы для обеспечения полной поддержки глобализации для:

  • Наборы символов Oracle для CHAR, VARCHAR, LONGVARCHAR или CLOB данных которые не извлекаются или не вставляются в качестве члена данных объекта Oracle объекта или типа коллекции.
  • CHAR или VARCHAR члены данных объекта и коллекции для наборов символов US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252, и UTF8.

Для использования любых других наборов символов в CHAR или VARCHAR в членах данных объектов или коллекций, вы должны включить файл orai18n.jar в CLASSPATH переменную окружения вашего приложения.

9
ответ дан 29 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: