Home  >  Q&A  >  body text

Rewrite the title to: By getting the id of the ResultSet and returning it as a java.sql.Array

<p>I have the following:</p> <pre class="brush:scala;toolbar:false;"> def getIds(name: String): java.sql.Array = { val ids: Array[Integer] = Array() val ps: PreparedStatement = connection.prepareStatement("SELECT id FROM table WHERE name = ?") ps.setString(1, name) val resultSet = ps.executeQuery() while(resultSet.next()) { val currentId = resultSet.getInt(1) ids: currentId } return connection.createArrayOf("INTEGER", ids.toArray) } </pre> <p>My intention is to use the output of this method into another PreparedStatement, using <code>.setArray(1, <array>)</code></p> <p>But I get the following error: <code>java.sql.SQLFeatureNotSupportedException</code></p> <p>I'm using MySQL. Already tried INTEGER, INT, BIGINT. But all failed. </p>
P粉905144514P粉905144514388 days ago458

reply all(1)I'll reply

  • P粉265724930

    P粉2657249302023-09-04 14:49:07

    The translated content is:

    After research, we found:

    So my solution is to create a temporary table containing only the ids:

    val idsStatement = connection.prepareStatement(
       "CREATE TEMPORARY TABLE to_delete_ids SELECT id FROM table WHERE name = ?")
    idsStatement.setString(1, name)
    idsStatement.executeUpdate()
    

    Then do an inner join with other statements/queries to achieve the same result:

    val statementDeleteUsingIds = connection.prepareStatement(
        "DELETE to_delete_rows FROM table2 to_delete_rows INNER JOIN to_delete_ids tdi ON tdi.id = to_delete_rows.other_tables_id")
    statementDeleteUsingIds.executeUpdate()
    

    reply
    0
  • Cancelreply