如何解决如何从 ResultSet 中读取日期数组 Date[] 以与 java.time 类一起使用?
我试图从我的 ResultSet 变量中读取一个属性,它是一个日期数组 [],但我无法使用任何可用函数来完成它。任何人都可以帮助我吗?谢谢你。 读取日期数组的 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,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,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;
}
解决方法
如果你不能让你的 JDBC 库使用来自 PG 的 daterange
类型,也许你可以重新编写查询以将 daterange DB objs 转换为字符串(所以一个 ARRAY 但类型为 string ) 或只是一个组合字符串 - 请参阅 pg array_to_string fn - 在这种情况下,您可以在 Java 中处理结果字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。