2013-05-01 5 views
0

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

Вот что я делаю. Я пытаюсь импортировать текстовый файл с помощью Java в сервере SQL 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(); 
    } 

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

Примечание: Чтобы проверить, работает ли имя машины, я получил доступ к SMS-GIGO-IDEN с SQL-сервера другого компьютера, и Bulk работает нормально. В коротком BULK QUERY работает с SQL-сервером любой машины. Тем не менее, он не работает с чистыми бобами.

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

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

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

Спасибо.

ответ

1

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

См: BULK INSERT (Transact-SQL)

При выполнении оператора BULK INSERT с помощью SQLCMD или OSQL, с один компьютер, вставляя данные в SQL Server на втором компьютере, и указания data_file на третьем компьютере с помощью 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. 

См: Can I connect to SQL Server using Windows Authentication from Java EE webapp?

также: Working with a Connection

Connection con=DriverManager.getConnection("jdbc:sqlserver://SMS-GIGO-IDEN:1433; database=testing;integratedSecurity=true;"); 
+0

Благодаря тонну. Но как я могу подключиться к SQL-серверу с помощью Windows Authentication с Java? – Huzaifa

+0

@John Если вы находитесь на оконной машине, строка подключения, которую я добавил выше, должна работать. Я не совсем уверен, как ntlm auth работает с не-windows-машинами. Если вы не на окнах, этот вопрос/ответ может быть тем, что вы ищете: http://stackoverflow.com/questions/221149/how-does-the-sql-server-jdbc-trusted-connection-authentication-work –

+0

Попался. IntegratedSecurity не работает в соединении JDBC. Тем не менее, он работает с jtds. Я использую jtds для проверки подлинности Windows. Благодаря тонну. – Huzaifa

Смежные вопросы