Как выполнить массовую инструкцию вставки в Java (используя JDBC) с db = SQL Server 2008 Express - PullRequest
2 голосов
/ 24 сентября 2011

Я пытаюсь выполнить оператор BULK INSERT в SQL Server 2008 Express. (Он в основном берет все поля в указанном файле и вставляет эти поля в соответствующие столбцы таблицы.)

Ниже приведен пример оператора массовой вставки -

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

Ниже приведен код Java, который я пытаюсь использовать (но он не работает) ... Может кто-нибудь сказать мне, что я здесь делаю неправильно, или указать мне пример / учебник по Java-коду, который использует оператор Bulk Insert? -

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);  
       } 
}

1 Ответ

3 голосов
/ 24 сентября 2011

Я предполагаю, что в вашей строке SQL отсутствуют одинарные кавычки вокруг имени файла. Попробуйте следующее:

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

РЕДАКТИРОВАТЬ в ответ на ваш комментарий: я бы не ожидал, что в ResultSet будет что-либо после массовой вставки, во многом так же, как я бы не ожидал ничего в ResultSet после обычное INSERT заявление. Эти операторы просто вставляют данные, которые они дают, в таблицу, а также не возвращают их.

Если вы не получаете сообщение об ошибке, значит, ваша массовая вставка работает. Если вы запрашиваете таблицу в SQLCMD или SQL Server Management Studio, вы видите данные?

Операторы

INSERT, UPDATE, DELETE и BULK INSERT не являются запросами, поэтому их не следует использовать с методом executeQuery(). executeQuery() предназначен только для выполнения SELECT запросов. Я рекомендую вместо этого использовать метод executeUpdate(String). Этот метод возвращает int, который обычно является числом вставленных / обновленных / удаленных строк.

...