If sharing a connection across multiple threads, I sometimes get a "No data 
is available [2000-175]" if returning a generated key. The same code runs 
fine if I use one connection per thread.

*Question:* Is it known and accepted behavior, that connections may not be 
used concurrently from separate threads?

   - If yes, it would be good to state this in the h2 documentation, since 
   the topic arises from time to time, see for example 
   
https://groups.google.com/forum/#!searchin/h2-database/identity$20concurrency/h2-database/za6Ox1mrFIU/P_ZZm59ZiaMJ
   - If no, this can be considered a bug report.

To reproduce, execute the following scala app:


object H2BugReport extends App {

  import java.sql._
  import scala.concurrent.ExecutionContext.Implicits.global
  import scala.concurrent.Future

  Class forName "org.h2.Driver"
  val url = "jdbc:h2:mem:"
  val connection = DriverManager getConnection (url, "sa", "")
  
  connection.createStatement execute """
    CREATE SEQUENCE treeEntriesIdSeq;
    CREATE TABLE TreeEntries (
      id      BIGINT DEFAULT (NEXT VALUE FOR treeEntriesIdSeq) PRIMARY KEY,
      name    VARCHAR(256) NOT NULL
    );
    CREATE TABLE DataEntries (
      id      BIGINT PRIMARY KEY,
      name    VARCHAR(256) NOT NULL
    );
  """

  val insertTree = connection prepareStatement (
    "INSERT INTO TreeEntries (name) VALUES (?);",
    Statement.RETURN_GENERATED_KEYS
  )

  val insertData = connection prepareStatement (
    "INSERT INTO DataEntries (id, name) VALUES (?, ?);"
  )

  Future {  // comment out this block, and the other block executes fine
    (1 to 50) foreach { n =>
      insertData setLong (1, n)
      insertData setString (2, s"$n")
      insertData executeUpdate
    }
  }

  (1 to 50) foreach { n =>
    println(s"inserting $n in tree")
    insertTree setString (1, s"$n")
    insertTree executeUpdate
    val keys = insertTree.getGeneratedKeys
    keys.next
    keys.getLong(1)
  }
}


This will yield:


inserting 1 in tree
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Keine Daten 
verfügbar
No data is available [2000-175]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
    at org.h2.message.DbException.get(DbException.java:172)
    at org.h2.message.DbException.get(DbException.java:149)
    at org.h2.message.DbException.get(DbException.java:138)
    at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:3111)
    at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3117)
    at org.h2.jdbc.JdbcResultSet.getLong(JdbcResultSet.java:637)
    at 
bugreport.h2.H2BugReport$$anonfun$2.apply$mcJI$sp(H2BugReport.scala:48)


-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to