如何从 ResultSet 中读取日期数组 Date[] 以用于 java.time 类?

How to read an array of dates Date[] from a ResultSet for use with java.time classes?

Screenshot from Eclipse.

我正在尝试从我的 ResultSet 变量中读取一个属性,该属性是一个日期数组 Date [],但我无法使用任何可用函数来执行此操作。任何人都可以帮助我吗?谢谢你。 读取日期数组的 ResultSet 函数不存在,因此由于我在 postgresql 中有一个 daterange [],所以我将其替换为 LocalDate []。我在 GitHub 上找到了一个实现范围的文件,但导入对我不起作用。

public static ArrayList<Parlamentare> elenco_Parlamentari()throws 
NullPointerException{
     
    String url = "jdbc:postgresql://localhost/Parlamento"; //cambia mydb
    String user = "postgres";
    String password = "";
    ArrayList<Parlamentare> elenco = new ArrayList<Parlamentare>();
    
    Range r;
    Statement st;
    ResultSet rs;
    String sql; 
    
    try(Connection cn = DriverManager.getConnection(url, user, password);) 
    {
           if(cn != null) {
               System.out.println("Connected to PostgreSQL server 
    successfully!");
           }else {
               System.out.println("Failed to connect PostgreSQL server");
           }
           
          
    sql = "SELECT 
    nome,partito,circoscrizione,data_nascita,luogo,titolo_studi,
    mandati,commissioni,periodo_carica FROM parlamentari;";
    
        st = cn.createStatement(); // creo sempre uno statement sulla
                                    // connessione
        
        String nome = "";
        String partito = "";
        String circoscrizione = "";  
        Date data_nascita = null;
        String luogo = null;
        String titolo_studi = "";
        String[] mandati = null;
        String[] commissioni = null; 
        LocalDate[] periodo_carica = null;
       // LocalDate localDate = null;
        
        rs = st.executeQuery(sql); // faccio la query su uno statement
        while (rs.next() == true) {
            
            try {
            Parlamentare a=new Parlamentare();
            nome = rs.getString("nome");
            partito = rs.getString("partito");
            circoscrizione = rs.getString("circoscrizione");  
            data_nascita = rs.getDate("data_nascita");
            luogo = rs.getString("luogo");
            titolo_studi = rs.getString("titolo_studi");
            
            if(rs.getArray("mandati") == null)
               mandati=null;
            else  mandati=rs.getArray("mandati").toString().split(",");
            
            if(rs.getArray("commissioni") == null)
                   commissioni=null;
                else  
           commissioni=rs.getArray("commissioni").toString().split(",");
            rs.getObject("periodo_carica").getClass();
           // LocalDate localDate =
                    rs.getObject(1, LocalDate.class);
        //  case "daterange":
            //  return Range.localDateRange(value);
            rs.getType()==
            if(rs.getArray("periodo_carica") == null)
                periodo_carica = null;
                else  periodo_carica = 
        rs.getObject("periodo_carica").getClass();
                        //rs.getArray("periodo_carica").toString();
                    //  getDate();
            //          getObject("periodo_carica").;
                    /// toString().;// toString().split(",");
            // .getDate("periodo_carica");//.toString().split(",");
            
            


    System.out.print("rs.getObject(\"periodo_carica\").getClass()="+
     rs.getObject("periodo_carica").getClass());
            //rs.getObject(...).getClass()
         
            a = new 
   Parlamentare(nome,partito,circoscrizione,data_nascita,
   luogo,titolo_studi,
   mandati,commissioni,periodo_carica);
            elenco.add(a);  
            }
            catch(NullPointerException obj) {
                obj.printStackTrace();
          }            
            
        }           
        
        cn.close(); // chiusura connessione
    } catch (SQLException e) {
        System.out.println("errore:" + e.getMessage());
           e.printStackTrace();
       }    

    return elenco;
    } //end  elenco_Parlamentari()

在 postgresql 中:

CREATE TABLE public.parlamentari (
     nome character varying(100) COLLATE pg_catalog."default" NOT NULL,
     partito character varying(100) COLLATE pg_catalog."default" NOT NULL,
     circoscrizione character varying(100) COLLATE pg_catalog."default" 
     NOT NULL,
     data_nascita date,
     luogo character varying(100) COLLATE pg_catalog."default",
     titolo_studi character varying(100) COLLATE pg_catalog."default",
     mandati character varying(1000)[] COLLATE pg_catalog."default",
     commissioni character varying(100)[] COLLATE pg_catalog."default",
     periodo_carica daterange[],
     CONSTRAINT parlamentari_pkey PRIMARY KEY (nome, partito, 
     circoscrizione),
     CONSTRAINT parlamentarinomekey UNIQUE (nome),
     CONSTRAINT parlamentaripartitonomekey UNIQUE (partito, nome)
     )

TABLESPACE pg_default;

ALTER TABLE public.parlamentari
OWNER to postgres;

GRANT ALL ON TABLE public.parlamentari TO postgres;

GRANT ALL ON TABLE public.parlamentari TO PUBLIC;

Parlamentare.java

      public Parlamentare() {
           String nome = "";
           String partito = "";
           String circoscrizione = "";  
           Date data_nascita = null;
           String luogo = null;
           String titolo_studi = "";
           String[] mandati = null;
           String[] commissioni = null; 
           LocalDate[] periodo_carica = null;
           }

Sample Query Output

如果您无法使您的 JDBC 库与来自 PG 的 daterange 类型一起工作,也许您可​​以重新编写查询以将 daterange DB objs 转换为字符串(所以一个 ARRAY 但类型为字符串)或只是一个组合字符串 - 请参阅 pg array_to_string fn - 在这种情况下,您在 Java 土地中处理结果字符串。