【问题标题】:how to execute bulk insert statement in java (using JDBC) with db=SQL Server 2008 Express如何使用 db=SQL Server 2008 Express 在 Java(使用 JDBC)中执行批量插入语句
【发布时间】:2011-09-24 14:21:00
【问题描述】:

我正在尝试在 SQL Server 2008 Express 上执行 BULK INSERT 语句。 (它基本上获取指定文件中的所有字段并将这些字段插入到表中的适当列中。)

下面给出了一个批量插入语句的例子--

BULK INSERT SalesHistory FROM 'c:\SalesHistoryText.txt' WITH (FIELDTERMINATOR = ',')

下面给出的是我正在尝试使用的 Java 代码(但它不起作用)...有人可以告诉我我在这里做错了什么或指向我使用 Bulk Insert 语句的 Java 代码示例/教程吗? --

public void insertdata(String filename)
{
    String path = System.getProperty("user.dir");
    String createString = "BULK INSERT Assignors FROM  " + path + "\\" +filename+ ".txt WITH (FIELDTERMINATOR = ',')";   
    try  
       { 
            // Load the SQLServerDriver class, build the 
            // connection string, and get a connection 
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
            String connectionUrl = "jdbc:sqlserver://arvind-pc\\sqlexpress;" + 
                                    "database=test01;" + 
                                    "user=sa;" + 
                                    "password=password1983"; 
            Connection con = DriverManager.getConnection(connectionUrl); 
            System.out.println("Connected."); 

            // Create and execute an SQL statement that returns some data.  
            String SQL = "BULK INSERT dbo.Assignor FROM  " + path + "\\" +filename+ ".txt WITH (FIELDTERMINATOR = ',')";  
            Statement stmt = con.createStatement();  
            ResultSet rs = stmt.executeQuery(SQL);

            // Iterate through the data in the result set and display it.  
            while (rs.next())  
            {  
               //System.out.println(rs.getString(1) + " " + rs.getString(2));
                System.out.println(" Going through data");
            }

       }  
       catch(Exception e)  
       { 
            System.out.println(e.getMessage()); 
            System.exit(0);  
       } 
}

【问题讨论】:

  • “它不工作”是什么意思?应该发生什么,但不是?您收到什么错误消息(如果有)?
  • @LukeWoodward- 令人惊讶的是,我没有收到任何类型的消息(成功或错误)......我已经将一些消息在成功连接时输出到控制台,以及执行语句后循环遍历结果集...整个代码块有一个 try..catch 错误消息打印到控制台...但是没有显示任何消息..??!!

标签: java sql-server jdbc sql-server-express


【解决方案1】:

我猜您的 SQL 字符串缺少文件名周围的单引号。请尝试以下操作:

        String SQL = "BULK INSERT dbo.Assignor FROM '" + path + "\\" +filename+ ".txt' WITH (FIELDTERMINATOR = ',')";  

EDIT 回应您的评论:我不希望在批量插入之后 ResultSet 中有任何内容,就像我不希望在 ResultSet 之后出现任何内容一样一个普通的INSERT 声明。这些语句只是将它们提供的数据插入到一个表中,它们也不会返回它。

如果您没有收到任何错误消息,则表明您的批量插入工作正常。如果在 SQLCMD 或 SQL Server Management Studio 中查询表,是否看到数据?

INSERTUPDATEDELETEBULK INSERT 语句不是查询,因此您不应该将它们与 executeQuery() 方法一起使用。 executeQuery() 仅用于运行 SELECT 查询。我建议改用executeUpdate(String) 方法。该方法返回一个int,通常是插入/更新/删除的行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多