Hi everyone - this might be a general JDBC question rather than an SQLite specific question, but I'm not sure.
I've got an app that's writing to an SQLite database using the latest SQLite JDBC driver ("v056, based on SQLite 3.6.14.2") from http://www.zentus.com/sqlitejdbc/. I've done some basic profiling using hprof, and initially things are fine. But then my tables get quite large (e.g. 26 million / 7 million / 6 million rows), and after this point, I find that a huge amount of my apps time is being spent in "org.sqlite.NativeDB.step". Does anyone know why this method might be so expensive? I probably need to dig deeper with my profiling and find out exactly which methods are calling the expensive "step"s, but I'm fairly new to working with JDBC and any hints or suggestions would be helpful. During the applications run, I'll be running a certain amount of selects and inserts, but in all cases, I'll be selecting or inserting 1 row at a time, so I wouldn't expect that iterating over my ResultSet (I assume this is what org.sqlite.NativeDB.step is doing) would be very expensive. The code that does the selection of a row, given an SQL string and an array of string parameters is like: selectStatement = databaseConnection.prepareStatement(SQL); setStatementParameters(selectStatement, parameters); resultSet = selectStatement.executeQuery(); singleResult = parseResultForSingleElement(resultSet, columnName); The code that does the insertion of a row, given an SQL string and an array of string parameters is like: insertStatement = databaseConnection.prepareStatement(SQL); setStatementParameters(insertStatement, parameters); insertStatement.executeUpdate(); resultSet = insertStatement.getGeneratedKeys(); autoincrementPK = parseResultForSingleElement(resultSet, null); parseResultForSingleElement is like: if (numColumns == 1 && res.next()) { E val; if (columnName != null) { val = (E) res.getObject(columnName); } else { val = (E) res.getObject(1); } if (res.wasNull()) { ret = new SQLVal<E>(ResultStatus.RESULT_WAS_NULL); } else { ret = new SQLVal<E>(val); } } Thanks for any help. George. _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users