2014-04-17 2 views
1

알고있는 데이터베이스에서 데이터를 가져 오는 데 문제가 있습니다.JOOQ 쿼리에서 "알 수없는 테이블"예외를 수정할 수 없습니다.

아래의 코드 조각에서 "if conn! = null"은 데이터베이스 이름, 테이블 이름 등을 확인하는 테스트 일 뿐이며 모두 올바른지 확인합니다.

마지막 줄 아래에 여기 네트워크

에 대한 클래스 파일을 생성 한 JOOQ의 일부가이 completness를 위해서 출력

TEST: nwid 1 name Network 1 

org.jooq.exception.DataAccessException: SQL [select `network`.`NetworkId`, `network`.`Name` from dual]; Unknown table 'network' in field list 
    at org.jooq.impl.Utils.translate(Utils.java:1288) 
    at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:495) 
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:327) 
    at org.jooq.impl.AbstractResultQuery.fetch(AbstractResultQuery.java:330) 
    at org.jooq.impl.SelectImpl.fetch(SelectImpl.java:2256) 
    at com.nvi.kpiserver.remote.KpiCollectorUtil.getNetworkMapFromRemote(KpiCollectorUtil.java:328) 
    at com.nvi.kpiserver.remote.KpiCollectorUtilTest.testUpdateKpiNetworksForRemoteIntravue(KpiCollectorUtilTest.java:61) 
    ................. 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table 'network' in field list 
    ................. 

입니다

public static HashMap<Integer, String> getNetworkMapFromRemote(DSLContext dslRemote, Connection conn, Logger logger) { 
    HashMap<Integer,String> remoteMap = new HashMap<Integer, String>(); 
    // conn is only used for test purposes 
    if (conn != null) { 
     // test to be sure database is ok 
     try 
     { 
      ResultSet rs = conn.createStatement().executeQuery("SELECT networkid, name FROM network"); 
      while (rs.next()) { 
       System.out.println("TEST: nwid " + rs.getString(1) + " name " + rs.getString(2)); 
      } 
      rs.close(); 
     } 
     catch (SQLException se) 
     { 
      logger.trace("getNetworksForDevices SqlException: " + se.toString()); 
     } 
    } 
    // ----------- JOOQ problem section ------------------------ 
    Network nR = Network.NETWORK.as("network"); 
    // THE FOLLOWING LINE GENERATES THE UNKNOWN TABLE 
    Result<Record2<Integer, String>> result  = dslRemote.select(nR.NETWORKID, nR.NAME).fetch(); 

예외를 생성하는 것입니다

package com.wbcnvi.intravue.generated.tables; 
@javax.annotation.Generated(value = { "http://www.jooq.org", "3.3.1" }, 
          comments = "This class is generated by jOOQ") 
@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" }) 
public class Network extends org.jooq.impl.TableImpl<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> { 
    private static final long serialVersionUID = 1729023198; 
    public static final com.wbcnvi.intravue.generated.tables.Network NETWORK = new com.wbcnvi.intravue.generated.tables.Network(); 
    @Override 
    public java.lang.Class<com.wbcnvi.intravue.generated.tables.records.NetworkRecord> getRecordType() { 
     return com.wbcnvi.intravue.generated.tables.records.NetworkRecord.class; 
    } 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NWID = createField("NwId", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETWORKID = createField("NetworkId", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, ""); 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> NAME = createField("Name", org.jooq.impl.SQLDataType.CHAR.length(40).nullable(false).defaulted(true), this, ""); 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> USECOUNT = createField("UseCount", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, ""); 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.Integer> NETGROUP = createField("NetGroup", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this, ""); 
    public final org.jooq.TableField<com.wbcnvi.intravue.generated.tables.records.NetworkRecord, java.lang.String> AGENT = createField("Agent", org.jooq.impl.SQLDataType.CHAR.length(16), this, ""); 

    public Network() { 
     this("network", null); 
    } 
    public Network(java.lang.String alias) { 
     this(alias, com.wbcnvi.intravue.generated.tables.Network.NETWORK); 
    } 
    .......... 

"알 수없는 테이블"예외를 기반으로 나는 연결된 문제가 있다고 생각했습니다. 잘못된 데이터베이스 또는 잘못된 서버이지만 콘솔 출력이 JDBC 쿼리에 대해 올바르지 않습니다.

아무 생각이 들지 않습니다. 아마도 다른 원인이 근본 원인 일 수 있거나 DSLContext가 유효하지 않습니다.하지만 다른 예외가 발생한다고 생각합니다.

답변

4

대답은, 내가 피하여,() 메소드를 포함하지 않았다 심플 끝

테이블이 알 수없는 이유, 내가의 방법에서 넣어되지 않습니다
Result<Record2<Integer, String>> result = dslRemote.select(nR.NETWORKID, nR.NAME) 
    .from(nR) 
    .fetch(); 

.

+0

네, 확실히 도움이 :-) –