I'm trying to read from my ResultSet variable an attribute which is an array of dates Date [], but I can't do it with any of the available functions. Could anyone kindly help me? Thank you. a ResultSet function that reads an array of Dates does not exist, so since I had a daterange [] in postgresql, I replaced it with LocalDate []. I found a file on GitHub that implements the range, but the import doesn't work for me.
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()
in 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;
}
In the event you can't make your JDBC library work with the daterange
type from PG, perhaps you can re-write the query to convert the daterange DB objs into strings (so an ARRAY but of type string) OR just a combined string - see pg array_to_string fn - in which case you process the resultant string in Java land.