0

我知道这是一个老错误。我到处寻找,但仍然找不到解决方案。Stackoverflow 是我最后的选择。

这就是我正在做的事情。我正在尝试通过 java 将 txt 文件导入 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();
    }

如您所见,我已经共享了存储文件的文件夹。另外,我使用的是机器名称。

注意:为了检查机器名称是否正常工作,我从另一台机器的 SQL 服务器访问了 SMS-GIGO-IDEN,并且 Bulk 工作正常。简而言之,BULK QUERY 在任何机器的 SQL 服务器上工作。但是,它不适用于网豆。

SMS-GIGO-IDEN 是一个 SQL 服务器数据库,我正在从数据库所在的同一台服务器上运行 netbeans。

我正在使用 Windows 身份验证登录 SMS-GIGO-IDEN。由于我创建了 SQL 服务器连接,因此我没有使用 Windows 登录凭据。从我的连接字符串中可以看出,我创建了另一个。

那么,有没有人经历过同样的事情呢?

谢谢。

4

1 回答 1

1

当您从您的代码运行该查询时,您将其作为 SA 运行,并且尝试从网络共享中获取文件的用户是 SQL 进程正在运行的用户。您可能遇到了权限问题。

请参阅:批量插入 (Transact-SQL)

从一台计算机使用 sqlcmd 或 osql 执行 BULK INSERT 语句,将数据插入第二台计算机上的 SQL Server,并使用 UNC 路径指定第三台计算机上的 data_file 时,您可能会收到 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.

请参阅: 我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

另外:使用连接

 Connection con=DriverManager.getConnection("jdbc:sqlserver://SMS-GIGO-IDEN:1433; database=testing;integratedSecurity=true;");
于 2013-05-01T17:29:31.463 回答