Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheJena SDB事务支持_Java_Sql_Transactions_Jena - Fatal编程技术网

Java ApacheJena SDB事务支持

Java ApacheJena SDB事务支持,java,sql,transactions,jena,Java,Sql,Transactions,Jena,我在SQL数据库上使用ApacheJena Api,Microsoft SQL server称为Jena SDB 当我想以非常规方式访问数据库时,我遇到了问题。 当我使用Jena TDB时,支持事务,但当我以狭隘的方式使用Jena TDB时 java.lang.UnsupportedOperationException:不支持事务 我抛出了一个异常 正在工作的Jena TDB的代码片段如下: Dataset dataset = return TDBFactory.createDataset("

我在SQL数据库上使用ApacheJena Api,Microsoft SQL server称为Jena SDB 当我想以非常规方式访问数据库时,我遇到了问题。 当我使用Jena TDB时,支持事务,但当我以狭隘的方式使用Jena TDB时 java.lang.UnsupportedOperationException:不支持事务 我抛出了一个异常

正在工作的Jena TDB的代码片段如下:

Dataset dataset =  return TDBFactory.createDataset("datasetLocation");
dataset.begin(ReadWrite.WRITE);
//...
   StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash, 
   DatabaseType.SQLServer);
   SDBConnection sdbConn = new SDBConnection(getConnection());
   Store store = StoreFactory.create(storeDesc, sdbConn);
   Dataset dataset =DatasetStore.create(store);
   dataset.begin(ReadWrite.WRITE);
   //...this throws the exception
Jena SDB中不工作的代码段如下所示:

Dataset dataset =  return TDBFactory.createDataset("datasetLocation");
dataset.begin(ReadWrite.WRITE);
//...
   StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash, 
   DatabaseType.SQLServer);
   SDBConnection sdbConn = new SDBConnection(getConnection());
   Store store = StoreFactory.create(storeDesc, sdbConn);
   Dataset dataset =DatasetStore.create(store);
   dataset.begin(ReadWrite.WRITE);
   //...this throws the exception
我的问题是,因为我的要求是从TDB迁移到SDBi,所以我知道不建议这样做
有没有办法以事务方式使用Jena SDB?它始终是事务性的-默认情况下,它是自动提交,可能非常昂贵

您可以直接操作JDBC连接设置,也可以使用任何模型的TransactionHandler,因为同一数据集的所有模型都映射到相同的代码以对JDBC连接进行操作,JDBC连接还可以通过以下方式提供:


因此,您的解决方案是直接在jdbc连接上执行提交/回滚,如:Store.getConnection.getSqlConnection.setAutoCommitfalse;store.getConnection.getSqlConnection.commit;或使用事务处理程序,请对此进行确认。我的想法是使用dataset.beginReadWrite.WRITE;dataset.commit;因为Dataset是TDB和SDB的公共接口,所以我可以根据需要使用这两种接口。类似于DatasetGraphSDB,它是SDB中的数据集实现,不支持事务。正确-SDB不支持它之前的数据集事务。谢谢你的回答。我最后的疑问是,当在SDB中使用jdbc事务时,我是否应该使用model.enterCriticalSection之类的读/写锁定机制,如前所示注释或JDBC transactioin隔离级别足以解决读写器问题。您还需要锁定,因为JDBC连接在同一JVM中的多个线程之间共享。在我的情况下,它不是共享的,我在每个请求上从连接池实例化新的JDBC连接,然后使用该连接实例化SDB存储。