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); |
}
|
}
|
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
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 = ? java.sql.SQLException: Parameter metadata not available for these statement Corrected version: Executing query: S1ELECT * from duala WHERE a = ? 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: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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 = ? java.sql.SQLException: Parameter metadata not available for these statement Corrected version: Executing query: S1ELECT * from duala WHERE a = ? 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: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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 = ? java.sql.SQLException: Parameter metadata not available for these statement Corrected version: Executing query: S1ELECT * from duala WHERE a = ? 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: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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: {code:sql} S1ELECT * from duala WHERE a = ? {code} java.sql.SQLException: Parameter metadata not available for these statement Corrected version: {code:sql} S1ELECT * from duala WHERE a = ? {code} 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: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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: {code:sql} S1ELECT * from duala WHERE a = ? {code} java.sql.SQLException: Parameter metadata not available for these statement Corrected version: {code:sql} S1ELECT * from duala WHERE a = ? {code} 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: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} java.sql.SQLException: Parameter metadata not available for these statement {noformat} Corrected version: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} 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 {noformat} Attached example: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} java.sql.SQLException: Parameter metadata not available for these statement {noformat} Corrected version: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} 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 {noformat} Attached example: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
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: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} java.sql.SQLException: Parameter metadata not available for these statement {noformat} Corrected version: {code:sql} S1ELECT * from duala WHERE a = ? {code} fails with {noformat} 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 {noformat} Attached example: {code:java} PreparedStatement pstmt = connection.prepareStatement(sql); final ParameterMetaData pmd = pstmt.getParameterMetaData(); //wrong error message: final int count = pmd.getParameterCount(); {code} I think one possible workaround is to change setParametersData() method in class org.mariadb.jdbc.MariaDbPreparedStatementClient to capture SQLSyntaxErrorException and to rethrow it {code:java} 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); } } {code} |
Fix Version/s | 2.2.0 [ 22557 ] |
Fix Version/s | 1.6.5 [ 22628 ] |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
Fix Version/s | 2.1.2 [ 22629 ] | |
Fix Version/s | 2.2.0 [ 22557 ] |
Workflow | MariaDB v3 [ 82585 ] | MariaDB v4 [ 135018 ] |