Uploaded image for project: 'MariaDB Connector/J'
  1. MariaDB Connector/J
  2. CONJ-526

Wrong error message when calling ParameterMetaData getParameterCount() with incorrect SQL in PreparedStatement

Details

    • Bug
    • Status: Closed (View Workflow)
    • Minor
    • Resolution: Fixed
    • 2.1.1
    • 1.6.5, 2.1.2
    • Other
    • 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

          diego dupin Diego Dupin added a comment -

          Thanks for reporting that.
          Clearly error message has to be reported in case of bad SQL syntax.

          This will be corrected in 2.2.0 version and 1.6.5 version

          (actually available in snapshot :

          <repositories>
              <repository>
                  <id>sonatype-nexus-snapshots</id>
                  <name>Sonatype Nexus Snapshots</name>
                  <url>https://oss.sonatype.org/content/repositories/snapshots</url>
              </repository>
          </repositories>
           
          <dependencies>
              <dependency>
                  <groupId>org.mariadb.jdbc</groupId>
                  <artifactId>mariadb-java-client</artifactId>
                  <version>2.2.0-SNAPSHOT</version>
              </dependency>
          </dependencies>
          

          diego dupin Diego Dupin added a comment - Thanks for reporting that. Clearly error message has to be reported in case of bad SQL syntax. This will be corrected in 2.2.0 version and 1.6.5 version (actually available in snapshot : <repositories> <repository> <id>sonatype-nexus-snapshots</id> <name>Sonatype Nexus Snapshots</name> <url>https: //oss.sonatype.org/content/repositories/snapshots</url> </repository> </repositories>   <dependencies> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version> 2.2 . 0 -SNAPSHOT</version> </dependency> </dependencies>

          People

            diego dupin Diego Dupin
            rafalopez79 Rafael Lopez Fernández
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.