2016-09-19 2 views
0

일부 속성을 데이터베이스 테이블에 저장하려고합니다. 나는 아파치 커먼즈 설정 2.1을 사용하고있다. this을 찾았지만 제대로 작동하지 않습니다 ...Commons Configuration을 사용하여 데이터베이스 내에 속성 저장

저는 인터넷 검색을 해봤지만 위의 글이나 예제는 찾지 못했습니다.

-- Table: public.propcalendars 

-- DROP TABLE public.propcalendars; 

CREATE TABLE public.propcalendars 
(
    name character varying NOT NULL, 
    key character varying NOT NULL, 
    value character varying, 
    CONSTRAINT pk PRIMARY KEY (name, key) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE public.propcalendars 
    OWNER TO postgres; 

그리고 다음과 같은 데이터가 저장됩니다 :

name   key  value 
diasemana  SV2  0000010 
fechafinal  SV2  31/08 
fechainicial SV2  01/07 

이 내 코드입니다 :

이 데이터베이스 구조 (PostgreSQL을)입니다 (편집 코드가 수정되었습니다) :

public class PropertiesConfiguration { 

    /* 
    * Atributos 
    */ 
    private static PropertiesConfiguration INSTANCE = null; 

    private DatabaseConfiguration configFechaInicioAnual; 
    private DatabaseConfiguration configFechaFinAnual; 
    private DatabaseConfiguration configDiasSemana; 

    /* 
    * Métodos 
    */ 
    private PropertiesConfiguration() throws ConfigurationException { 
     configure(); 
    } 

    private void configure() throws ConfigurationException { 

     PGSimpleDataSource postgres = new PGSimpleDataSource(); 
     postgres.setServerName("ip"); 
     postgres.setDatabaseName("database"); 
     postgres.setPortNumber(5433); 
     postgres.setUser("user"); 
     postgres.setPassword("***"); 
     postgres.setCurrentSchema("public"); 

     BasicConfigurationBuilder<DatabaseConfiguration> builder = new BasicConfigurationBuilder<DatabaseConfiguration>(DatabaseConfiguration.class); 
     builder.configure(
      new Parameters() 
      .database() 
      .setDataSource(postgres) 
      .setTable("propcalendars") 
      .setKeyColumn("key") 
      .setValueColumn("value") 
      .setConfigurationNameColumn("name") 
      .setConfigurationName("fechainicial") 
     ); 

     configFechaInicioAnual = new DatabaseConfiguration(); 
     configFechaInicioAnual.setDataSource(postgres); 
     configFechaInicioAnual.setKeyColumn("key"); 
     configFechaInicioAnual.setValueColumn("value"); 
     configFechaInicioAnual.setConfigurationName("fechainicial"); 

    } 

    public static PropertiesConfiguration getInstance() throws ConfigurationException{ 
     if(INSTANCE == null){ 
      INSTANCE = new PropertiesConfiguration(); 
     } 
     return INSTANCE; 
    } 

    public DatosCalendario getInfoCalendario(String pClaveCalendario, String pInfoCalendario){ 
     DatosCalendario dc = new DatosCalendario(); 
     dc.descripcion = pInfoCalendario; 
     dc.inicio  = configFechaInicioAnual.getString(pClaveCalendario); 
     dc.fin   = "";//configFechaInicioAnual.getString(pClaveCalendario); 
     dc.diasSemana = 1;//configFechaInicioAnual.getInt(pClaveCalendario); 

     return dc; 
    } 

    public class DatosCalendario{ 
     public String descripcion; 
     public String inicio; 
     public String fin; 
     public Integer diasSemana; 

     @Override 
     public String toString(){ 
      return " DatosCalendario [ descripcion=" + descripcion + ", inicio=" + inicio + ", fin=" + fin + ", diasSemana=" + diasSemana + "]"; 
     } 

    } 

} 

그리고이 'SV2'을 가져올 때 'fechainicial'로 던져진 예외 :

java.sql.SQLSyntaxErrorException : 당신은 당신의 SQL 구문에 오류가 있습니다; 올바른 문법이 'null WHERE key ='SV2 ''1 근처에서 사용하도록 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. com.mysql.cj.jdbc.exceptions.SQLError.createSQLException (SQLError.java:686)) ~ [mysql-connector-java-6.0.3.jar : 6.0.3] com.mysql.cj.jdbc.exceptions.SQLError.createSQLException (SQLError.java:663) ~ [mysql-connector-java-6.0 .3.jar : 6.0.3] com.mysql.cj.jdbc.exceptions.SQLError.createSQLException (SQLError.java:653) ~ [mysql-connector-java-6.0.3.jar : 6.0.3] com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException (SQLExceptionsMapping.java:115) ~ [mysql-connector-java-6.0.3.jar : 6.0.3] at com.mysql.cj.jdbc.ConnectionImpl .execSQL (ConnectionImpl.java:2041) ~ [mysql-connector-java-6.0.3.jar : 6.0.3] at com.mysql.cj.jdbc.PreparedStatement.executeInternal (Prepare dstatement.java:1827) ~ [mysql-connector-java-6.0.3.jar : 6.0.3] at com.mysql.cj.jdbc.PreparedStatement.executeQuery (PreparedStatement.java:1930) ~ [mysql-connector- java-6.0.3.jar : 6.0.3] at org.apache.commons.configuration2.DatabaseConfiguration $ JdbcOperation.openResultSet (DatabaseConfiguration.java:847) ~ [commons-configuration2-2.1.jar : 2.1] at org. org.apache.commons.configuration2.DatabaseConfiguration $ JdbcOperation.execute (DatabaseConfiguration.java:333) ~ [commons-configuration2-2.1.jar : 2.1] 에서 org.apache.commons.configuration2.DatabaseConfiguration $ 1.performOperation을 실행하십시오.) [commons-configuration2-2.1.jar : 2.1] at org.apache.commons.configuration2.DatabaseConfiguration.getPropertyInternal (DatabaseConfiguration.java:359) [commons-configuration2-2.1.jar : 2.1] at org.apache.co (commons-configuration2-2.1.jar : 2.1) at org.apache.commons.configuration2.AbstractConfiguration.getAndConvertProperty (AbstractConfiguration.java:1749) [commons-configuration2- 2.1.jar : 2.1] at org.apache.commons.configuration2.AbstractConfiguration.convert (AbstractConfiguration.java:1785) [commons-configuration2-2.1.jar : 2.1] at org.apache.commons.configuration2.AbstractConfiguration.getString (AbstractConfiguration.java:1344) [commons-configuration2-2.1.jar : 2.1] at com.ingartek.gtfs.bizkaibus.configuration.PropertiesConfiguration.getInfoCalendario (PropertiesConfiguration.java:83) [classes/:?] at com. ingartek.gtfs.bizkaibus.main.GenerarGtfs.main (GenerarGtfs.java:43) [classes/:?] 13 : 55 : 15.120 [주] DEBUG com.in gartek.gtfs.bizkaibus.main.GenerarGtfs - DatosCalendario [descripcion = Sabados 베라 훌리오 아고 스토, 크리에이터 = null이, 지느러미 = diasSemana = 1] 내가 잘못 뭐하는 거지

? 누군가가 추가 자습서 나 문서를 제공 할 수 있습니까?

@Thilo가 나에게 말했다로서,이 솔루션은 "하이픈"를 포함하지 않고 테이블 이름을 사용하는 것이었다 해결

("-"). 불행히도 PostgreSQL과 MySQL에서만 작동합니다. 예외가 발생합니다 :

java.sql.SQLSyntaxErrorException : SQL 구문에 오류가 있습니다. MySQL의

를 사용하는 동안 올바른 구문은 내가 같은 문제가 발생하여 1

+2

하이픈없는 테이블 이름을 사용해보십시오. – Thilo

+0

지금 사용해 보겠습니다. – russellhoff

+0

예! 그것은 또한 postgresql을 사용하여 효과적입니다. 고마워! – russellhoff

답변

1

라인에 가까운 '키 ='SV2 'AND 이름 =' ''fechainicial을 사용하는 MySQL 서버 버전에 해당하는 설명서를 확인 약간의 디버그 후, KeyColumn의 이름을 'key'에서 'code'로 변경하여 해결했습니다. 다른 열 이름을 사용할 수 있지만 '키'는 사용할 수 없습니다.

+0

게시 해 주셔서 감사합니다. – russellhoff

관련 문제