@@ -1408,76 +1408,82 @@ private void getCreateTableTemporalSQL(String tableName) throws SQLException {
14081408 }
14091409
14101410 /**
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.
14151412 */
14161413 @ 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 ());
14231447 }
14241448 }
14251449 }
14261450
14271451 /**
1428- * Test batch insert using accented and unicode characters .
1452+ * Test batch insert using bulk copy with string values when setSendStringParametersAsUnicode is false .
14291453 */
1430- public void runBulkInsertStringTest (boolean useBulkCopy , boolean sendUnicode ) throws Exception {
1454+ @ Test
1455+ public void testBulkInsertStringWhenNotSentAsUnicode () throws Exception {
14311456 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 (?, ?, ?, ?, ?, ?)" ;
14341458
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 "
14371460 + AbstractSQLGenerator .escapeIdentifier (tableNameBulkString );
14381461
14391462 try (Connection connection = PrepUtil .getConnection (
1440- connectionString + ";useBulkCopyForBatchInsert=" + useBulkCopy + ";sendStringParametersAsUnicode="
1441- + sendUnicode + ";" );
1463+ connectionString + ";useBulkCopyForBatchInsert=true;sendStringParametersAsUnicode=false;" );
14421464 SQLServerPreparedStatement pstmt = (SQLServerPreparedStatement ) connection .prepareStatement (insertSQL );
14431465 Statement stmt = (SQLServerStatement ) connection .createStatement ()) {
14441466
14451467 getCreateTableWithStringData ();
14461468
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" );
14661475 pstmt .addBatch ();
14671476 pstmt .executeBatch ();
14681477
14691478 // Validate inserted data
14701479 try (ResultSet rs = stmt .executeQuery (selectSQL )) {
14711480 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" ));
14811487 assertFalse (rs .next ());
14821488 }
14831489 }
@@ -1487,15 +1493,12 @@ private void getCreateTableWithStringData() throws SQLException {
14871493 try (Statement stmt = connection .createStatement ()) {
14881494 TestUtils .dropTableIfExists (AbstractSQLGenerator .escapeIdentifier (tableNameBulkString ), stmt );
14891495 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" + ")" ;
14991502
15001503 stmt .execute (createTableSQL );
15011504 }
0 commit comments