Вставить в ExistDB с помощью Java - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблемы с вставкой нового узла в exist-db с использованием Java.

Если я запускаю этот Xquery из eXide, он будет работать нормально и вставит новый отдел:

обновить вставку 1 </ DEPT_NO> A A </ DEP_ROW> в / departamentos

Однако, если я пытаюсь сделать это из Java, он говорит, что есть синтаксическая ошибка. Код:

    String queryString = "update insert <DEP_ROW><DEPT_NO>1</DEPT_NO><DNOMBRE>A</DNOMBRE><LOC>A</LOC></DEP_ROW> into /departamentos";

    consulta = conn.prepareExpression(queryString);
    consulta.executeQuery();

И ошибка:

Exception in thread "main" javax.xml.xquery.XQException:
XQJQS001 - Invalid XQuery syntax, syntax does not pass static 
validation.
Root Cause:
XQueryParseException: Encountered "insert" at line 1, column 8.
Was expecting one of:
<EOF> 
"%%%" ...
"=" ...
"," ...
"or" ...
"and" ...
"to" ...
"*" ...
"div" ...
"idiv" ...
"mod" ...
"union" ...
"|" ...
"intersect" ...
"except" ...
"instance" ...
"treat" ...
"castable" ...
"cast" ...
"!=" ...
"<=" ...
">" ...
">=" ...
"eq" ...
"ne" ...
"lt" ...
"le" ...
"gt" ...
"ge" ...
"is" ...
"<<" ...
">>" ...
"[" ...
"-" ...
"+" ...
"<" ...
"/" ...
"//" ...
"(" ...

at Visualizar.insertadep(Visualizar.java:58)
at Visualizar.main(Visualizar.java:23)
at Visualizar.insertadep(Visualizar.java:58)
at Visualizar.main(Visualizar.java:23)

Я очень ценю вашу помощь.

Спасибо

1 Ответ

0 голосов
/ 03 апреля 2019

У меня была точно такая же проблема, как у Yeray, и наткнулся на этот пост.Теперь я нашел решение, поэтому я вернулся, чтобы поделиться своим кодом, который, я надеюсь, может помочь Yeray или кому-то еще.

public class InsertDepartment {

public static final String DRIVER = "org.exist.xmldb.DatabaseImpl";
public final static String URI = "xmldb:exist://localhost:8080/exist/xmlrpc";
public final static String COLLECTION = "/db/first_steps";
public final static String USERNAME = "admin";
public final static String PASSWORD = "";

public static void main(String[] args) throws Exception {
    String value = "";

    Class cl = Class.forName(DRIVER);
    Database database = (Database) cl.newInstance();
    DatabaseManager.registerDatabase(database);
    Collection col = DatabaseManager.getCollection(URI + COLLECTION, USERNAME, PASSWORD);

    int depNumber = 42;
    String depName = "Department 42";
    String depAddress = "42 Galaxy Avenue, Betelgueuse 23458 OH";

    String sQuery = "update insert <department><dep_number>" + depNumber
            + "</dep_number><dep_name>" + depName + "</dep_name><dep_address>"
            + depAddress + "</dep_address></department> into /departments";

    EXistXQueryService service = (EXistXQueryService) col.getService("XQueryService", "1.0");
    service.setProperty("indent", "yes");
    service.query(sQuery);
}

Обратите внимание, что для того, чтобы этот код работал, я закончил сследующий список библиотек в моем проекте.Некоторым может не потребоваться, чтобы этот код работал.

exist-xqj-1.0.1.jar
j8fu-1.21.jar
log4j-1.2-api-2.11.0.jar
log4j-api-2.11.0.jar
log4j-core-2.11.0.jar
log4j-jul-2.11.0.jar
log4j-slf4j-impl-2.11.0.jar
org.apache.commons.pool.jar
org-apache-commons-logging.jar
ws-commons-util-1.0.2.jar
xmldb-api-1.7.0.jar
xmlrpc-client-3.1.3.jar
xmlrpc-common-3.1.3.jar
xqj2-0.0.1.jar
xqjapi.jar
exist.jar
exist-optional.jar

Кроме того, мне пришлось добавить файл log4j2.xml в папку src моего проекта.Вы можете найти образец этого файла в этом посте .

...