We’re currently using a PostgreSQL database and OrmLite. We now have a use case for using an Postgres hstore, but can’t find any way of accessing that table through OrmLite. I’d prefer to avoid opening a separate database connection just to select and insert to that one table, but I’m not seeing any other options.
At the very least I’d like a handle to the existing connection OrmLite is using so I can reuse it to build a prepared statement, but I haven’t found a way to get a java.sql.Connection starting from an OrmLite ConnectionSource.
I see that OrmLite has a JdbcCompiledStatement, but that’s just a wrapper around a PreparedStatement and requires the PreparedStatement to be passed in to the constructor. (Not sure what the use case for that is.)
I’ve tried to use DatabaseConnection.compileStatement(...), but that requires knowledge of the field types being used and OrmLite doesn’t seem to know what an hstore is.
I’ve tried to use updateRaw(), but that function only exists on an OrmLite dao that I don’t have because the table I would link the dao to has a field type OrmLite doesn’t recognize. Is there some way to get a generic dao to issue raw queries?
I get that hstores are database specific and probably won’t be supported by OrmLite, but I’d really like to find a way to transfer data to and from the database using unsupported fields instead of just unsupported queries.
Ok, that’s pretty easy. As @jsight mentioned, the ORMLite
ConnectionSourcefor JDBC isJdbcConnectionSource. When you get a connection from that class usingconnectionSource.getReadOnlyConnection(), you will get aDatabaseConnectionthat is really aJdbcDatabaseConnectionand can be cast to it. There is aJdbcDatabaseConnection.getInternalConnection()method which returns the associatedjava.sql.Connection.You really can use any DAO class to perform a raw function on any table. It is convenient to think of it as being an unstructured update to an DAO object’s table. But if you have any DAO, you can perform a raw update on any other table.
If you are using unsupported fields, then you are going to have to do it as a raw statement — either
SELECTorUPDATE. If you edit your post to show the raw statement you’ve tried, I can help more specifically.