@@ -1408,76 +1408,82 @@ private void getCreateTableTemporalSQL(String tableName) throws SQLException {
1408
1408
}
1409
1409
1410
1410
/**
1411
- * Test string values using prepared statement using accented and unicode characters.
1412
- * This test covers all combinations of useBulkCopyForBatchInsert and sendStringParametersAsUnicode.
1413
- *
1414
- * @throws Exception
1411
+ * Test batch insert using bulk copy with string values when setSendStringParametersAsUnicode is true.
1415
1412
*/
1416
1413
@ Test
1417
- public void testBulkInsertStringAllCombinations () throws Exception {
1418
- boolean [] bulkCopyOptions = { true , false };
1419
- boolean [] unicodeOptions = { true , false };
1420
- for (boolean useBulkCopy : bulkCopyOptions ) {
1421
- for (boolean sendUnicode : unicodeOptions ) {
1422
- runBulkInsertStringTest (useBulkCopy , sendUnicode );
1414
+ public void testBulkInsertStringWhenSentAsUnicode () throws Exception {
1415
+ String insertSQL = "INSERT INTO " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString )
1416
+ + " (charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol) VALUES (?, ?, ?, ?, ?, ?)" ;
1417
+
1418
+ String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol FROM "
1419
+ + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString );
1420
+
1421
+ try (Connection connection = PrepUtil .getConnection (
1422
+ connectionString + ";useBulkCopyForBatchInsert=true;sendStringParametersAsUnicode=true;" );
1423
+ SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement ) connection .prepareStatement (insertSQL );
1424
+ Statement stmt = (SQLServerStatement ) connection .createStatement ()) {
1425
+
1426
+ getCreateTableWithStringData ();
1427
+
1428
+ pstmt .setString (1 , "CHAR_VAL" );
1429
+ pstmt .setString (2 , "VARCHAR_VALUE" );
1430
+ pstmt .setString (3 , "LONGVARCHAR_VALUE_WITH_MORE_TEXT" );
1431
+ pstmt .setString (4 , "NCHAR_VAL" );
1432
+ pstmt .setString (5 , "NVARCHAR_VALUE" );
1433
+ pstmt .setString (6 , "LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" );
1434
+ pstmt .addBatch ();
1435
+ pstmt .executeBatch ();
1436
+
1437
+ // Validate inserted data
1438
+ try (ResultSet rs = stmt .executeQuery (selectSQL )) {
1439
+ assertTrue (rs .next (), "Expected at least one row in result set" );
1440
+ assertEquals ("CHAR_VAL" , rs .getString ("charCol" ));
1441
+ assertEquals ("VARCHAR_VALUE" , rs .getString ("varcharCol" ));
1442
+ assertEquals ("LONGVARCHAR_VALUE_WITH_MORE_TEXT" , rs .getString ("longvarcharCol" ));
1443
+ assertEquals ("NCHAR_VAL" , rs .getString ("ncharCol" ));
1444
+ assertEquals ("NVARCHAR_VALUE" , rs .getString ("nvarcharCol" ));
1445
+ assertEquals ("LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" , rs .getString ("longnvarcharCol" ));
1446
+ assertFalse (rs .next ());
1423
1447
}
1424
1448
}
1425
1449
}
1426
1450
1427
1451
/**
1428
- * Test batch insert using accented and unicode characters .
1452
+ * Test batch insert using bulk copy with string values when setSendStringParametersAsUnicode is false .
1429
1453
*/
1430
- public void runBulkInsertStringTest (boolean useBulkCopy , boolean sendUnicode ) throws Exception {
1454
+ @ Test
1455
+ public void testBulkInsertStringWhenNotSentAsUnicode () throws Exception {
1431
1456
String insertSQL = "INSERT INTO " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString )
1432
- + " (charCol, varcharCol, longvarcharCol, ncharCol1, nvarcharCol1, longnvarcharCol1, "
1433
- + "ncharCol2, nvarcharCol2, longnvarcharCol2) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)" ;
1457
+ + " (charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol) VALUES (?, ?, ?, ?, ?, ?)" ;
1434
1458
1435
- String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol1, nvarcharCol1, "
1436
- + "longnvarcharCol1, ncharCol2, nvarcharCol2, longnvarcharCol2 FROM "
1459
+ String selectSQL = "SELECT charCol, varcharCol, longvarcharCol, ncharCol, nvarcharCol, longnvarcharCol FROM "
1437
1460
+ AbstractSQLGenerator .escapeIdentifier (tableNameBulkString );
1438
1461
1439
1462
try (Connection connection = PrepUtil .getConnection (
1440
- connectionString + ";useBulkCopyForBatchInsert=" + useBulkCopy + ";sendStringParametersAsUnicode="
1441
- + sendUnicode + ";" );
1463
+ connectionString + ";useBulkCopyForBatchInsert=true;sendStringParametersAsUnicode=false;" );
1442
1464
SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement ) connection .prepareStatement (insertSQL );
1443
1465
Statement stmt = (SQLServerStatement ) connection .createStatement ()) {
1444
1466
1445
1467
getCreateTableWithStringData ();
1446
1468
1447
- String charValue = "Anaïs_Ni" ;
1448
- String varcharValue = "café" ;
1449
- String longVarcharValue = "Sørén Kierkégaard" ;
1450
- String ncharValue1 = "José Müll" ;
1451
- String nvarcharValue1 = "José Müller" ;
1452
- String longNvarcharValue1 = "François Saldaña" ;
1453
- String ncharValue2 = "Test1汉字😀" ;
1454
- String nvarcharValue2 = "汉字" ;
1455
- String longNvarcharValue2 = "日本語" ;
1456
-
1457
- pstmt .setString (1 , charValue );
1458
- pstmt .setString (2 , varcharValue );
1459
- pstmt .setString (3 , longVarcharValue );
1460
- pstmt .setString (4 , ncharValue1 );
1461
- pstmt .setString (5 , nvarcharValue1 );
1462
- pstmt .setString (6 , longNvarcharValue1 );
1463
- pstmt .setNString (7 , ncharValue2 );
1464
- pstmt .setNString (8 , nvarcharValue2 );
1465
- pstmt .setNString (9 , longNvarcharValue2 );
1469
+ pstmt .setString (1 , "CHAR_VAL" );
1470
+ pstmt .setString (2 , "VARCHAR_VALUE" );
1471
+ pstmt .setString (3 , "LONGVARCHAR_VALUE_WITH_MORE_TEXT" );
1472
+ pstmt .setString (4 , "NCHAR_VAL" );
1473
+ pstmt .setString (5 , "NVARCHAR_VALUE" );
1474
+ pstmt .setString (6 , "LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" );
1466
1475
pstmt .addBatch ();
1467
1476
pstmt .executeBatch ();
1468
1477
1469
1478
// Validate inserted data
1470
1479
try (ResultSet rs = stmt .executeQuery (selectSQL )) {
1471
1480
assertTrue (rs .next (), "Expected at least one row in result set" );
1472
- assertEquals (charValue , rs .getString ("charCol" ));
1473
- assertEquals (varcharValue , rs .getString ("varcharCol" ));
1474
- assertEquals (longVarcharValue , rs .getString ("longvarcharCol" ));
1475
- assertEquals (ncharValue1 , rs .getString ("ncharCol1" ));
1476
- assertEquals (nvarcharValue1 , rs .getString ("nvarcharCol1" ));
1477
- assertEquals (longNvarcharValue1 , rs .getString ("longnvarcharCol1" ));
1478
- assertEquals (ncharValue2 , rs .getString ("ncharCol2" ));
1479
- assertEquals (nvarcharValue2 , rs .getString ("nvarcharCol2" ));
1480
- assertEquals (longNvarcharValue2 , rs .getString ("longnvarcharCol2" ));
1481
+ assertEquals ("CHAR_VAL" , rs .getString ("charCol" ));
1482
+ assertEquals ("VARCHAR_VALUE" , rs .getString ("varcharCol" ));
1483
+ assertEquals ("LONGVARCHAR_VALUE_WITH_MORE_TEXT" , rs .getString ("longvarcharCol" ));
1484
+ assertEquals ("NCHAR_VAL" , rs .getString ("ncharCol" ));
1485
+ assertEquals ("NVARCHAR_VALUE" , rs .getString ("nvarcharCol" ));
1486
+ assertEquals ("LONGNVARCHAR_VALUE_WITH_UNICODE_TEXT" , rs .getString ("longnvarcharCol" ));
1481
1487
assertFalse (rs .next ());
1482
1488
}
1483
1489
}
@@ -1487,15 +1493,12 @@ private void getCreateTableWithStringData() throws SQLException {
1487
1493
try (Statement stmt = connection .createStatement ()) {
1488
1494
TestUtils .dropTableIfExists (AbstractSQLGenerator .escapeIdentifier (tableNameBulkString ), stmt );
1489
1495
String createTableSQL = "CREATE TABLE " + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString ) + " (" +
1490
- "charCol CHAR(8), " +
1491
- "varcharCol VARCHAR(50), " +
1492
- "longvarcharCol VARCHAR(MAX), " +
1493
- "ncharCol1 NCHAR(9), " +
1494
- "nvarcharCol1 NVARCHAR(50), " +
1495
- "longnvarcharCol1 NVARCHAR(MAX), " +
1496
- "ncharCol2 NCHAR(9), " +
1497
- "nvarcharCol2 NVARCHAR(50), " +
1498
- "longnvarcharCol2 NVARCHAR(MAX)" + ")" ;
1496
+ "charCol CHAR(8) NOT NULL, " +
1497
+ "varcharCol VARCHAR(50) NOT NULL, " +
1498
+ "longvarcharCol VARCHAR(MAX) NOT NULL, " +
1499
+ "ncharCol NCHAR(9) NOT NULL, " +
1500
+ "nvarcharCol NVARCHAR(50) NOT NULL, " +
1501
+ "longnvarcharCol NVARCHAR(MAX) NOT NULL" + ")" ;
1499
1502
1500
1503
stmt .execute (createTableSQL );
1501
1504
}
0 commit comments