Datagrip locks sqlite3 database permanently

Hi, my plan was to run a python (batch-style) program (in pycharm, of course) and simultaneously keep tabs on progress by running queries in Datagrip. However, datagrip seems to keep a permanent lock on the database, blocking my python program from storing results in the sqlite database.

Is this intentional? Is there a setting to fix this? Can I open the database in "read only" mode in Datagrip?

1

Using Xerial connector, you have access to sqlite pragmas on the advanced tab. Could you set open_mode to SQLITE_OPEN_READONLY? Maybe set shared_cache to true, also.

I don't know if that will work, but maybe.

 

 

 

0
Avatar
Permanently deleted user

This appears to not block the database, but there's a downside - I can't run queries anymore:

java.lang.NumberFormatException: For input string: "SQLITE_OPEN_READONLY"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at org.sqlite.SQLiteConfig.<init>(SQLiteConfig.java:74)
at org.sqlite.core.CoreConnection.<init>(CoreConnection.java:67)
at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:26)
at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:24)
at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:45)
at org.sqlite.JDBC.createConnection(JDBC.java:114)
at org.sqlite.JDBC.connect(JDBC.java:88)
at com.intellij.database.remote.jdbc.impl.RemoteDriverImpl.connect(RemoteDriverImpl.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)
at com.sun.proxy.$Proxy100.connect(Unknown Source)
at sun.reflect.GeneratedMethodAccessor244.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.execution.rmi.RemoteUtil.invokeRemote(RemoteUtil.java:175)
at com.intellij.execution.rmi.RemoteUtil.access$300(RemoteUtil.java:36)
at com.intellij.execution.rmi.RemoteUtil$RemoteInvocationHandler.invoke(RemoteUtil.java:280)
at com.sun.proxy.$Proxy101.connect(Unknown Source)
at com.intellij.database.dataSource.DatabaseConnectionEstablisher.connect(DatabaseConnectionEstablisher.java:172)
at com.intellij.database.dataSource.DatabaseConnectionEstablisher.tryConnect(DatabaseConnectionEstablisher.java:111)
at com.intellij.database.dataSource.DatabaseConnectionEstablisher.lambda$establishConnection$1(DatabaseConnectionEstablisher.java:63)
at com.intellij.database.dataSource.AsyncUtil.lambda$null$4(AsyncUtil.java:48)
at com.intellij.database.dataSource.AsyncUtil.lambda$underProgress$12(AsyncUtil.java:131)
at com.intellij.database.dataSource.AsyncUtil.lambda$underProgress$13(AsyncUtil.java:137)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:500)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
at com.intellij.database.dataSource.AsyncUtil.underProgress(AsyncUtil.java:137)
at com.intellij.database.dataSource.AsyncUtil.underProgress(AsyncUtil.java:131)
at com.intellij.database.dataSource.AsyncUtil.lambda$captureIndicator$5(AsyncUtil.java:48)
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:981)
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2124)
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:110)
at com.intellij.database.dataSource.DatabaseConnectionEstablisher.establishConnection(DatabaseConnectionEstablisher.java:53)
at com.intellij.database.dataSource.DatabaseConnectionManager$Executor.supplyAsync(DatabaseConnectionManager.java:380)
at com.intellij.database.dataSource.DatabaseConnectionManager$Executor.createInner(DatabaseConnectionManager.java:320)
at com.intellij.database.dataSource.DatabaseConnectionManager$Executor.lambda$create$3(DatabaseConnectionManager.java:314)
at com.intellij.database.dataSource.AsyncUtil.withAsyncFriendly(AsyncUtil.java:163)
at com.intellij.database.dataSource.DatabaseConnectionManager$Executor.create(DatabaseConnectionManager.java:312)
at com.intellij.database.dataSource.DatabaseConnectionManager$Executor.access$100(DatabaseConnectionManager.java:266)
at com.intellij.database.dataSource.DatabaseConnectionManager$Builder.create(DatabaseConnectionManager.java:116)
at com.intellij.database.console.JdbcEngine.createConnection(JdbcEngine.java:134)
at com.intellij.database.console.JdbcEngine.lambda$new$0(JdbcEngine.java:122)
at com.intellij.database.console.JdbcEngine.getConnection(JdbcEngine.java:192)
at com.intellij.database.console.JdbcEngine.getConnection(JdbcEngine.java:155)
at com.intellij.database.console.JdbcEngine.executeQueryInner(JdbcEngine.java:439)
at com.intellij.database.console.JdbcEngine.executeQueryRequest(JdbcEngine.java:939)
at com.intellij.database.console.JdbcEngine.lambda$visitQuery$3(JdbcEngine.java:300)
at com.intellij.database.console.AbstractEngine.lambda$submitRequest$3(AbstractEngine.java:171)
at com.intellij.database.console.AbstractEngine.lambda$submitRunnable$2(AbstractEngine.java:148)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745) (no stack trace)

 
0

java.lang.NumberFormatException: For input string: "SQLITE_OPEN_READONLY"

Change the open_mode value from SQLITE_OPEN_READONLY to a numeric one: 1.

 

 

SQLite C Interface

Flags For File Open Operations

#define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_DELETEONCLOSE    0x00000008  /* VFS only */
#define SQLITE_OPEN_EXCLUSIVE        0x00000010  /* VFS only */
#define SQLITE_OPEN_AUTOPROXY        0x00000020  /* VFS only */
#define SQLITE_OPEN_URI              0x00000040  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_MEMORY           0x00000080  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_MAIN_DB          0x00000100  /* VFS only */
#define SQLITE_OPEN_TEMP_DB          0x00000200  /* VFS only */
#define SQLITE_OPEN_TRANSIENT_DB     0x00000400  /* VFS only */
#define SQLITE_OPEN_MAIN_JOURNAL     0x00000800  /* VFS only */
#define SQLITE_OPEN_TEMP_JOURNAL     0x00001000  /* VFS only */
#define SQLITE_OPEN_SUBJOURNAL       0x00002000  /* VFS only */
#define SQLITE_OPEN_MASTER_JOURNAL   0x00004000  /* VFS only */
#define SQLITE_OPEN_NOMUTEX          0x00008000  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_FULLMUTEX        0x00010000  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_SHAREDCACHE      0x00020000  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* Ok for sqlite3_open_v2() */
#define SQLITE_OPEN_WAL              0x00080000  /* VFS only */
0

Try just a Read-only checkbox in the Data source properties.

0

Sorry for being a little daff on my end. Where is the Read-Only checkbox located? I've been through the DS properties and cannot find one.

0
Avatar
Permanently deleted user

@maxim The screenshot you posted seem to be from MySQL? The question was about sqlite, which doesn't have that read-only checkbox.

 

0

Ah, sorry. We discovered some time ago that for some databases this driver option actually lets you run updates and inserts. Now we're working on resolving it from our side, I mean the application will restrict you. But in the current version, there is no such possibility.

0

请先登录再写评论。