comment exécuter l'instruction d'insertion en bloc dans Java (à l'aide de JDBC) avec db = SQL Server 2008 Express

J'essaie d'exécuter une instruction BULK INSERT sur SQL Server 2008 Express. (Il prend en principe tous les champs d'un file spécifié et insère ces champs dans les colonnes appropriées d'une table.)

Ci-dessous est un exemple de l'instruction d'insertion en bloc:

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

Ci-dessous est le code Java que j'essaie d'utiliser (mais ça ne marche pas) … Quelqu'un peut-il me dire ce que je fais de mal ici ou me pointer vers un exemple / tutoriel Java qui utilise l'instruction Bulk Insert? –

 public void insertdata(Ssortingng filename) { Ssortingng path = System.getProperty("user.dir"); Ssortingng createSsortingng = "BULK INSERT Assignors FROM " + path + "\\" +filename+ ".txt WITH (FIELDTERMINATOR = ',')"; try { // Load the SQLServerDriver class, build the // connection ssortingng, and get a connection Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Ssortingng 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. Ssortingng 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.getSsortingng(1) + " " + rs.getSsortingng(2)); System.out.println(" Going through data"); } } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } } 

Je suppose que votre string SQL manque les guillemets simples autour du nom de file. Essayez ce qui suit:

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

EDIT en réponse à votre commentaire: Je ne m'attendrais pas à ce qu'il y ait quoi que ce soit dans le ResultSet après une insertion en bloc, de la même manière que je ne m'attendrais à rien dans un ResultSet suite à une instruction INSERT ordinaire. Ces instructions insèrent simplement datatables qui leur sont données dans une table, elles ne les renvoient pas aussi.

Si vous n'obtenez aucun message d'erreur, il semble que votre insertion en bloc fonctionne. Si vous interrogez la table dans SQLCMD ou SQL Server Management Studio, voyez-vous datatables?

INSERT , UPDATE , DELETE et BULK INSERT ne sont pas des requêtes, vous ne devriez donc pas les utiliser avec la méthode executeQuery() . executeQuery() est uniquement destiné à exécuter des requêtes SELECT . Je recommand d'utiliser la executeUpdate(Ssortingng) place. Cette méthode returnne un int , qui est normalement le nombre de lignes insérées / mises à jour / supprimées.