2014-04-10 2 views
0

xqj를 사용하여 쿼리를 수행하려고 할 때이 오류가 발생합니다.XQuery 구문이 잘못되었습니다. 구문이 정적 유효성 검사를 통과하지 않습니다.

Exception in thread "main" javax.xml.xquery.XQException: 
    XQJQS001 - Invalid XQuery syntax, syntax does not pass static validation. 
    Root Cause: 
    XQueryParseException: Encountered "$" at line 1, column 36. 
Was expecting one of: 
    "=" ... 
    "order" ... 

공공 정적 무효 Consultar (XQConnection의 connexio)는 XQException { 스캐너 SC = 새로운 스캐너 (System.in)을 발생;

System.out.println(">>>>Please select a mminim stock :)"); 

    int selec = sc.nextInt(); 

    String squery = "for $prod in /productos/produc" 
      + "for $zone in $prod/cod_zona" 
      + "let $stock :=$prod/stock_minimo" 
      + "let $deno :=$prod/denominacion" 
      + "let $codi_prod :=$prod/cod_prod" 
      + "let $cod:=/zonas/zona[cod_zona = $zone]/cod_zona" 
      + "let $nomzona:=/zonas/zona[cod_zona = $zone]/nombre" 
      + "let $direc:=/zonas/zona[cod_zona = $zone]/director" 
      + "where $prod/$stock < " + selec + "" 
      + "return concat('Denominacio:',$deno,'&#xa;' ," 
      + "'Codi producte:',$codi_prod,'&#xa;' ," 
      + "'Stock mínim:',$stock,'&#xa;' ," 
      + "'Codi zona:',$cod,'&#xa;' ," 
      + " 'Nom zona:',$nomzona),'&#xa;'"; 

    XQPreparedExpression consulta = connexio.prepareExpression(squery); 

    XQResultSequence resultat = consulta.executeQuery(); 

    while (resultat.next()) { 
     System.out.println(resultat.getItemAsString(null)); 
     System.out 
       .println("..................................................................."); 
    } 

    connexio.close(); 

} 

같은 도움. 감사합니다.

답변

1

문자열 연결 표현

"for $prod in /productos/produc" 
+ "for $zone in $prod/cod_zona" 

for $prod in /productos/producfor $zone in $prod/cod_zona 

당신은 +의 문자열 리터럴 양쪽 중 하나에, producfor 사이에 공백의 어떤 종류를 추가 할 필요가 캐릭터를 생성합니다 예 :

String squery = "for $prod in /productos/produc " 
      + "for $zone in $prod/cod_zona " 
      + "let $stock :=$prod/stock_minimo " 
      + "let $deno :=$prod/denominacion " 
      // etc etc. 
+0

죄송합니다. 이해가 안되요. 이미 그들 사이에 공백이 있습니다. 나는 당신의 대답과 내가 가진 것의 차이점을 보지 못했습니다. 감사합니다. – user3325719

+0

@ user3325719 당신은''foo "+"bar "=" "''foobar"'대신''foo "+"bar "="foobar "'문자열 리터럴의 한쪽 또는 다른 쪽을'+' "=>"foo bar "'. –

+0

Ok i inderstand .i 시도했지만 \ t 및 "-".하지만 아무 것도. – user3325719