Ошибка массовой загрузки в Netbeans.

Я знаю, что это старая ошибка. Я искал везде, но все еще не мог найти решение. Stackoverflow - мое последнее средство.

Вот что я делаю. Я пытаюсь импортировать текстовый файл через java в SQL Server 2008.

Код, который я написал для выполнения этой задачи,

 public static void main(String[] args)throws Exception {
    try
    {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection con=DriverManager.getConnection("jdbc:sqlserver://SMS-GIGO-IDEN:1433; datbaseName=Testing","sa","paswword");

    Statement stmt = con.createStatement();
    ResultSet rs= stmt.executeQuery("Bulk INSERT Testing.dbo.Link from '\\SMS-GIGO-IDEN\\fa2\\Benchmark\\Output\\B20.link' with (FIELDTERMINATOR='\t', FIRSTROW=2)");

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

Как видите, я уже поделился папкой, в которой храню файл. Кроме того, я использую имя машины.

Примечание. Чтобы проверить, работает ли имя машины, я получил доступ к SMS-GIGO-IDEN с SQL-сервера другой машины, и Bulk работает нормально. Короче говоря, МАССОВЫЙ ЗАПРОС работает с SQL-сервера любой машины. Однако он не работает с чистыми компонентами.

SMS-GIGO-IDEN — это база данных SQL-сервера, и я запускаю netbeans с того же сервера, на котором расположена база данных.

Я вхожу в SMS-GIGO-IDEN, используя проверку подлинности Windows. Поскольку я создал соединение с SQL-сервером, я не использую учетные данные для входа в Windows. Я создал еще один, как видно из моей строки подключения.

Итак, есть ли кто-нибудь, кто испытал то же самое?

Спасибо.


person Huzaifa    schedule 01.05.2013    source источник


Ответы (1)


Когда вы запускаете этот запрос из своего кода, вы запускаете его как SA, а пользователь, который пытается получить файл из общего сетевого ресурса, является пользователем, от имени которого работает процесс SQL. Вероятно, вы столкнулись с проблемой разрешения.

См. раздел МАССОВАЯ ВСТАВКА (Transact-SQL).

При выполнении инструкции BULK INSERT с помощью sqlcmd или osql с одного компьютера, вставке данных в SQL Server на втором компьютере и указании файла данных на третьем компьютере с использованием пути UNC может появиться ошибка 4861. Чтобы устранить эту ошибку, используйте проверку подлинности SQL Server и укажите имя входа SQL Server, использующее профиль безопасности учетной записи процесса SQL Server, или настройте Windows для включения делегирования учетной записи безопасности. Сведения о том, как сделать учетную запись пользователя надежной для делегирования, см. в справке Windows.

Это похоже именно на то, что вы делаете.

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

If a SQL Server user is logged in using Windows Authentication, the user can read only the files accessible to the user account, independent of the security profile of the SQL Server process.

См.: Могу ли я подключиться к SQL Server использует аутентификацию Windows из веб-приложения Java EE?

Также: Работа с соединением

 Connection con=DriverManager.getConnection("jdbc:sqlserver://SMS-GIGO-IDEN:1433; database=testing;integratedSecurity=true;");
person John Sobolewski    schedule 01.05.2013
comment
Благодаря тонну. Но как я могу подключиться к SQL-серверу с проверкой подлинности Windows с Java? - person Huzaifa; 01.05.2013
comment
@John, если вы работаете с оконной машиной, строка подключения, которую я добавил выше, должна работать. Я не совсем понимаю, как работает ntlm auth с компьютеров, отличных от Windows. Если вы не используете Windows, этот вопрос/ответ может быть тем, что вы ищете: stackoverflow.com/questions/221149/ - person John Sobolewski; 02.05.2013
comment
Попался. IntegratedSecurity не работает в соединении JDBC. Однако он работает с jtds. Я использую jtds для проверки подлинности Windows. Благодаря тонну. - person Huzaifa; 02.05.2013