diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index 189c589b404d..9b14e946b094 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -103,8 +103,10 @@ class BigQueryPreparedStatement extends BigQueryStatement implements PreparedSta } private int resolveParameterCount(String query, QueryStatistics queryStatistics) { - if (queryStatistics != null && queryStatistics.getQueryParameters() != null) { - return queryStatistics.getQueryParameters().size(); + if (queryStatistics != null) { + return queryStatistics.getQueryParameters() == null + ? 0 + : queryStatistics.getQueryParameters().size(); } return (int) query.chars().filter(ch -> ch == POSITIONAL_PARAMETER_CHAR).count(); } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java index 31853252d06d..96a8f2972828 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/it/ITBigQueryJDBCTest.java @@ -1089,6 +1089,19 @@ public void testPreparedQueryWithExtraPositionalParameterCharacter() throws SQLE ResultSet selectResult2 = selectStmt.executeQuery(); assertNotNull(selectResult2); + // string literal with ? should pass even if there are no parameters. + String noParameterQuery = + String.format("SELECT 'Hello, ?World!' FROM %s.%s", DATASET, TABLE_NAME); + + PreparedStatement noParameterStmt = bigQueryConnection.prepareStatement(noParameterQuery); + + // Tests that parameter Metadata is populated before query execution and setter. + ParameterMetaData noParameterMetaData = noParameterStmt.getParameterMetaData(); + assertNotNull(noParameterMetaData); + assertEquals(0, noParameterMetaData.getParameterCount()); + + ResultSet selectResult3 = noParameterStmt.executeQuery(); + boolean dropStatus = bigQueryStatement.execute(dropQuery); assertFalse(dropStatus); }