2016-09-19 15 views
0

いくつかのプロパティをデータベーステーブルに保存します。私はApache Commons Configuration 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 + "]"; 
     } 

    } 

} 

そして、これは「fechainicial」と「SV2」を取得したときにスローされる例外です:

java.sql.SQLSyntaxErrorException:あなたのSQL構文でエラーが発生しています。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が 'null WHERE key =' SV2 ''の近くにある行を参照してください。 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- org.apache.commons.configuration2.DatabaseConfiguration $ JdbcOperation.openResultSet(DatabaseConfiguration.java:847)〜[commons-configuration2-2.1.jar:2.1] at org。 $ 1performOperation(DatabaseConfiguration.java:333)〜[commons-configuration2-2.1.jar:2.1] at org.apache.commons.configuration2.DatabaseConfiguration $ JdbcOperation.execute(DatabaseConfiguration.java:742) )[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)[コモンズコンフィグレーション2-mmons.configuration2.AbstractConfiguration.getProperty(AbstractConfiguration.java:992) 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 [main] DEBUG com.in gartek.gtfs.bizkaibus.main。GenerarGtfs - DatosCalendario [descripcion = Sabados VERANOフリオ・アゴスト、INICIO = 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

関連する問題