I'm making a Clojure library that runs Microsoft SQL Server in a Docker image. I'm using image 2019-CU14-ubuntu-20.04.
There's a JDBC macro with-db-transaction that can take a read-only parameter. This works with a PostgreSQL image, but not with Microsoft SQL Server. Is there some way I can set a connection to SQL Server as read-only?
CodePudding user response:
JDBC doesn't have a concept of read-only transactions, but it does support read-only connections (but only as a hint, so it doesn't necessarily require support of the underlying database or driver). Some drivers ignore this hint, while others use it to start read-only transactions.
The Microsoft SQL Server JDBC driver doesn't support it; the implementation of Connection.setReadOnly(boolean) in SQLServerConnection does nothing:
@Override
public void setReadOnly(boolean readOnly) throws SQLServerException {
if (loggerExternal.isLoggable(Level.FINER))
loggerExternal.entering(loggingClassName, "setReadOnly", readOnly);
checkClosed();
// do nothing per spec
loggerExternal.exiting(loggingClassName, "setReadOnly");
}
In other words, no it is not possible to set a connection as read-only for SQL Server.
