Я использую Docker контейнер, содержащий базу данных Oracle NoSQL. Я пытаюсь создать таблицу и заполнить некоторые записи с помощью программы Java.
Данные, которые я пытаюсь сохранить, представляют собой метаданные из твита, хранящегося в файле JSON, но для простоты я подготовил демонстрацию с гораздо более простым примером. В этой демонстрации я постараюсь создать и заполнить таблицу, содержащую только 4 поля, и очень простой файл JSON с данными для хранения. Вот код:
private static void demo(KVStore kvstore, String file2load) {
//Creating the table
String query = "CREATE TABLE Carros (plate STRING, brand STRING, owner STRING, km NUMBER, primary key (plate))";
try {
kvstore.executeSync(query);
} catch (IllegalArgumentException e) {
System.out.println("Invalid statement:\n" + e.getMessage());
} catch (FaultException e) { //ATENTION HERE <-
System.out.println("Statement couldn't be executed, please retry: " + e);
}
System.out.println("Table created");
//Fill up the table
populateTable(kvstore, file2load);
System.exit(0);
}
То, что вы видите выше, это метод, вызываемый в main. Теперь я также оставлю здесь метод populateTable (), хотя он отлично работает:
private static void populateTable(KVStore kvstore, String file2load) {
TableAPI tableH = kvstore.getTableAPI();
Table myTable = tableH.getTable("Carros");
BufferedReader br = null;
FileReader fr = null;
try {
String jObj = "";
String currLine;
int tCount = 0;
boolean buildObj = false;
boolean beganParsing = false;
fr = new FileReader(file2load);
br = new BufferedReader(fr);
while ((currLine = br.readLine()) != null) {
tCount += countParens(currLine, '{');
if ((currLine = br.readLine()) == "\n") {
continue;
}
if (tCount > 0) {
buildObj = true;
beganParsing = true;
}
//Anadimos la linea leida
if (buildObj) {
jObj += currLine;
}
tCount -= countParens(currLine, '}');
if (tCount < 1)
buildObj = false;
if (beganParsing && !buildObj) {
Row row = myTable.createRowFromJson(jObj, false);
tableH.put(row, null, null);
jObj = "";
}
}//While
} catch (FileNotFoundException fnfe) {
System.out.println("File not found: " + fnfe);
System.exit(-1);
} catch (IOException ioe) {
System.out.println("IOException: " + ioe);
System.exit(-1);
} finally {
try {
if (br != null)
br.close();
if (fr != null)
fr.close();
} catch (IOException iox) {
System.out.println("IOException on close: " + iox);
}
}
}//populateTable
Итак, моя проблема в том, что каждый раз, когда я выполняю эту программу, она без проблем достигает конца выполнения, потому что я использую блоки try-catch, однако она не создает и не заполняет какую-либо таблицу. Я получаю сообщение:
Оператор не может быть выполнен, повторите попытку: oracle.kv.FaultException: такого объекта нет в таблице (12.1.4.3.11) (18.3.10)
Имя класса ошибки: oracle.kv.impl.admin.AdminFaultException
Я прокомментировал исключение, которое вызывает это, в первом фрагменте кода выше. Поскольку я не нашел успеха в поиске этой проблемы, я удалил try-catch, чтобы получить более подробную трассировку ошибок:
Исключение в потоке "main" oracle.kv.FaultException: в таблице нет такого объекта (12.1.4.3.11) (18.3.10)
Имя класса ошибки: oracle.kv.impl.admin.AdminFaultException
в oracle.kv.impl.client.admin.DdlStatementExecutor.executeDdl (DdlStatementExecutor.java:400)
в oracle.kv.impl.api.KVStoreImpl.executeDdl (KVStoreImpl.java:3242)
в oracle.kv.impl.api.KVStoreImpl.execute (KVStoreImpl.java:3157)
в oracle.kv.impl.api.KVStoreImpl.executeSync (KVStoreImpl.java:3328)
в oracle.kv.impl.api.KVStoreImpl.executeSync (KVStoreImpl.java:3321)
at writer_v01.demo (writer_v01.java:267)
at writer_v01.main (writer_v01.java:51)
Причина: нет такого объекта в таблице (12.1.4.3.11) java.rmi.NoSuchObjectException: такого объекта нет в таблице
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:283)
at sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:260)
at sun.rmi.server.UnicastRef.invoke (UnicastRef.java:161)
в java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod (RemoteObjectInvocationHandler.java:227)
в java.rmi.server.RemoteObjectInvocationHandler.invoke (RemoteObjectInvocationHandler.java:179)
на com.sun.proxy. $ Proxy23.getSerialVersion (неизвестный источник)
в oracle.kv.impl.util.registry.RemoteAPI. (RemoteAPI.java:40)
в oracle.kv.impl.sna.StorageNodeAgentAPI. (StorageNodeAgentAPI.java:95)
в oracle.kv.impl.sna.StorageNodeAgentAPI.wrap (StorageNodeAgentAPI.java:104)
в oracle.kv.impl.util.registry.RegistryUtils.getStorageNodeAgent (RegistryUtils.java:577)
в oracle.kv.impl.admin.Admin.getSNStatus (Admin.java:3973)
в oracle.kv.impl.admin.Admin.getSNsVersion (Admin.java:3938)
в oracle.kv.impl.admin.Admin.getStoreVersion (Admin.java:3781)
в oracle.kv.impl.admin.plan.TablePlanGenerator.checkStoreVersion (TablePlanGenerator.java:122)
в oracle.kv.impl.admin.plan.TablePlanGenerator.createAddTablePlan (TablePlanGenerator.java:100)
в oracle.kv.impl.admin.plan.Planner.createAddTablePlan (Planner.java:493)
в oracle.kv.impl.admin.TableDdlOperation $ CreateTable.perform (TableDdlOperation.java:97)
в oracle.kv.impl.admin.DdlHandler $ DdlOperationExecutor.execute (DdlHandler.java:645)
в oracle.kv.impl.admin.DdlHandler.handleResults (DdlHandler.java:293)
на oracle.kv.impl.admin.DdlHandler. (DdlHandler.java:105)
в oracle.kv.impl.admin.Admin.executeStatement (Admin.java:4488)в oracle.kv.impl.admin.ClientAdminServiceImpl $ 1.execute (ClientAdminServiceImpl.java:65) в oracle.kv.impl.admin.ClientAdminServiceImpl $ 1.execute (ClientAdminServiceImpl.java:62) в oracle.kault.v.execute (ProcessFaultHandler.java:118) в oracle.kv.impl.admin.ClientAdminServiceImpl.execute (ClientAdminServiceImpl.java:62) в sun.reflect.GeneratedMethodAccessor176.invoke (НеизвестныйИмпортируемый ответ на запрос.java: 43) в java.lang.reflect.Method.invoke (Method.java:498) в oracle.kv.impl.security.MethodHandlerUtils.invokeMethod (MethodHandlerUtils.java:44) в oracle.kv.impl.security.SecureProxy $ CheckingHandler.invoke (SecureProxy.java:559) в oracle.kv.impl.security.SecureProxy.invoke (SecureProxy.java:114) в com.sun.proxy. $ Proxy18.execute (Неизвестный источник) в sun.reflect.GeneratedMethodAccessor176.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:357) в sun.rmi.transport.Transport $ 1.run (Transport.java:200)) на sun.rmi.transport.Transport $ 1.run (Transport.java:197) на java.security.AccessController.doPrivileged (собственный метод) на sun.rmi.transport.Transport.serviceCall (Transport.java:196) на солнце.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:573) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:834) в sun.rmi.transport.tcp.TCPTransport $.lambda $ run $ 0 (TCPTransport.java:688) в java.security.AccessController.doPrivileged (собственный метод) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:687) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в java.lang.Thread.run (Thread.java:7v at).impl.admin.Admin.getSNStatus (Admin.java:3975) в oracle.kv.impl.admin.Admin.getSNsVersion (Admin.java:3938) в oracle.kv.impl.admin.Admin.getStoreVersion (Admin.java:3781) в oracle.kv.impl.admin.plan.TablePlanGenerator.checkStoreVersion (TablePlanGenerator.java:122) при oracle.kv.impl.admin.plan.TablePlanGenerator.createAddTablePlan (TablePlanGenerator.java:100) при oracle.kv.impl.admin.plan.Plannerс) в oracle.kv.impl.admin.DdlHandler.handleResults (DdlHandler.java:293) в oracle.kv.impl.admin.DdlHandler. (DdlHandler.java:105) в oracle.kv.impl.admin.Admin.executeStatement(Admin.java:4488) в oracle.kv.impl.admin.ClientAdminServiceImpl $ 1.execute (ClientAdminServiceImpl.java:65) в oracle.kv.impl.admin.ClientAdminServiceImpl $ 1.execute (ClientAdminServiceI62l).kv.impl.fault.ProcessFaultHandler.exeCute (ProcessFaultHandler.java:118) в oracle.kv.impl.admin.ClientAdminServiceImpl.execute (ClientAdminServiceImpl.java:62) в sun.reflect.GeneratedMethodAccessor176.invoke (Неизвестный источник) ПоступлениеJava: 43) в java.lang.reflect.Method.invoke (Method.java:498) в oracle.kv.impl.security.MethodHandlerUtils.invokeMethod (MethodHandlerUtils.java:44) в oracle.kv.impl.security.SecureProxy$ CheckingHandler.invoke (SecureProxy.java:559)в oracle.kv.impl.security.SecureProxy.invoke (SecureProxy.java:114)
на com.sun.proxy. $ Proxy18.execute (неизвестный источник)
at sun.reflect.GeneratedMethodAccessor176.invoke (неизвестный источник)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:357)
на sun.rmi.transport.Transport $ 1.run (Transport.java:200)
на sun.rmi.transport.Transport $ 1.run (Transport.java:197)
at java.security.AccessController.doPrivileged (собственный метод)
at sun.rmi.transport.Transport.serviceCall (Transport.java:196)
в sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:573)
в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:834)
на sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.lambda $ run $ 0 (TCPTransport.java:688)
at java.security.AccessController.doPrivileged (собственный метод)
в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:687)
в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
на java.lang.Thread.run (Thread.java:748)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:283)
at sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:260)
at sun.rmi.server.UnicastRef.invoke (UnicastRef.java:161)
в java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod (RemoteObjectInvocationHandler.java:227)
в java.rmi.server.RemoteObjectInvocationHandler.invoke (RemoteObjectInvocationHandler.java:179)
на com.sun.proxy. $ Proxy2.execute (неизвестный источник)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
в oracle.kv.impl.security.MethodHandlerUtils.invokeMethod (MethodHandlerUtils.java:44)
в oracle.kv.impl.security.ContextProxy $ ContextMethodHandler.invoke (ContextProxy.java:197)
в oracle.kv.impl.security.ContextProxy.invoke (ContextProxy.java:61)
на com.sun.proxy. $ Proxy2.execute (неизвестный источник)
в oracle.kv.impl.client.admin.ClientAdminServiceAPI.execute (ClientAdminServiceAPI.java:111)
в oracle.kv.impl.client.admin.DdlStatementExecutor.executeDdl (DdlStatementExecutor.java:363)
... еще 6
Я искал несколько дней, почему это не работает. Более того, я даже не могу выполнять операции на терминале kv, как
execute "CREATE TABLE ....."
Потому что это тоже не сработало. Есть идеи? Заранее спасибо.