如何从 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 土地中处理结果字符串。
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 土地中处理结果字符串。