2016-08-23 95 views
0

我在postgreSQL中有一個沒有時區的時間列的函數。然後在我的方法中,設置參數時出現錯誤。它說這種類型是未知的。我該如何設置當前系統時間的這個參數?該方法的目的是驗證寄存器是否存在於數據庫中。在Java中沒有時區的情況下得到時間

功能:

CREATE OR REPLACE FUNCTION public.inserir_posicao(
    _tag bigint, 
    _data_hora timestamp without time zone, 
    _lat double precision, 
    _long double precision, 
    _gado_id bigint) 
    RETURNS integer AS 
$BODY$declare 
    tagPesq BigInt; 
begin 

    select tag into tagPesq from coordenadas where tag = $1; 
    if tagPesq is not null and tagPesq > 0 then 
    update coordenadas set pos_data = $2, 
    pos_latitude = $3, 
    pos_longitude = $4, 
    gado_id = $5 
    where tag_id = $1; 
    else 
    insert into coordenadas(pos_data,pos_latitude,pos_longitude, 
    tag_id, gado_id) values ($2,$3,$4,$1,$5); 
    end if; 

    return 1; 

    EXCEPTION WHEN RAISE_EXCEPTION THEN 
    BEGIN 
    return 0; 
    END; 
end;$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION public.inserir_posicao(bigint, time with time zone, double precision, double precision, bigint) 
    OWNER TO postgres; 

方法:

public int insertPosicao(BigInteger tagId, BigInteger gadoId, double lat, double lon) { 

     Query qry = manager.createNativeQuery("select inserir_posicao(:tag,:data,:lat,:lng,:gado)"); 
     qry.setParameter("tag", tagId); 
     qry.setParameter("data", ???); //this parameter. 
     qry.setParameter("lat", lat); 
     qry.setParameter("lng", lon); 
     qry.setParameter("gado", gadoId); 
     return (int) qry.getSingleResult(); 
    } 
+2

_「我在postgreSQL中有一個函數」_ - 向我們展示函數。它期望什麼類型?請訪問[幫助]並閱讀[問]以瞭解如何有效地使用StackOverflow。現在顯示的是 –

+0

。 –

回答

1

UMH你可以使用類似

SimpleDateFormat sdf = new SimpleDateFormat(**pattern**); 
String sData = sdf.format(GregorianCalendar.getInstance()); 
qry.setParameter("date",sData); 

,你必須指定模式

在我的代碼中,我放了GregorianCalendar.getInstance返回當前時間。您也可以通過查詢獲得sysdate。 你的函數,在

pos_data = $2你必須設置pos_data=to_date($2,**pattern**)因爲現在,你傳遞一個字符串表示的日期和通過Postgres的功能,您transfor成日期

參見:SimpleDateFormatto_date PostgreSQL

+0

謝謝!但我該如何處理這個「to_date」? –

+0

對不起使用了正確的答案編輯 –

+0

我用了你寫的前三行。它應該正確嗎?因爲我得到的錯誤:無法格式化給定的對象作爲日期 –

1

你可以使用下面,只在Java 8,獲得本地時間偏移量爲UTC和無區域:

String ldt = Instant.now().atOffset(ZoneOffset.UTC).toLocalDateTime().toString(); 
qry.setParameter("data",ldt); 

如果你有自己的日期,你可以使用相同的代碼,只需將Instant.now()替換爲Instant.parse(date),但它必須格式正確。

相關問題