Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
2.1.1
-
None
Description
When calling getParameterCount() from the ParameterMetaData of a PreparedStatement with incorrect SQL, it fails with "Parameter metadata not available for these statement" instead of "You have an error in your SQL syntax; ..."
For example:
Executing query:
S1ELECT * from duala WHERE a = ? |
fails with
java.sql.SQLException: Parameter metadata not available for these statement
|
Corrected version:
S1ELECT * from duala WHERE a = ? |
fails with
java.sql.SQLSyntaxErrorException: (conn=20657507) Error preparing query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'S1ELECT * from duala WHERE a = ?' at line 1
|
Attached example:
PreparedStatement pstmt = connection.prepareStatement(sql);
|
final ParameterMetaData pmd = pstmt.getParameterMetaData(); |
//wrong error message: |
final int count = pmd.getParameterCount(); |
I think one possible workaround is to change setParametersData() method in
class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it
private void setParametersData() throws SQLSyntaxErrorException { |
try (MariaDbPreparedStatementServer ssps = new MariaDbPreparedStatementServer(connection, this.sqlQuery, |
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, Statement.NO_GENERATED_KEYS)) {
|
resultSetMetaData = ssps.getMetaData();
|
parameterMetaData = ssps.getParameterMetaData();
|
} catch (SQLSyntaxErrorException sqlsse) { |
// syntax error thrown |
throw sqlsse; |
} catch (SQLException sqle) { |
//if statement cannot be prepared |
parameterMetaData = new MariaDbParameterMetaData(null); |
}
|
}
|