2015-05-15 22 views
4

假設下表爲我想要得到的主鍵約束的名字是uapplication_pkey如何使用Java

CREATE TABLE application 
(
    applicationid integer NOT NULL, 
    screatedby character varying(255), 
    screatedon timestamp without time zone, 
    sfwversion integer, 
    smodifiedby timestamp without time zone, 
    smodifiedon character varying(255), 
    stenantid character varying(255), 
    CONSTRAINT uapplication_pkey PRIMARY KEY (applicationid) 
) 

我已經採取的幫助這個How to get the exact "constraint name" from SQLException

獲得從SQL Server primay鍵約束的名字但無法找到解決方案。

+1

您可以訪問有關數據庫本身的信息(元數據)通過['java.sql.connection#getMetaData()'](http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#getMetaData%28%29)。這將允許您使用['java.sql.DatabaseMetaData'](http://docs.oracle.com/javase/7/docs/api/java/)的方法檢查約束,鍵,列,表等。 SQL/DatabaseMetaData.html)。作爲評論發佈,因爲它只是幾個鏈接,我現在沒有時間寫一些例子。 –

回答

2

您可以使用DatabaseMetadata接口。

DatabaseMetaData meta = connection.getMetaData(); 

例子:

DatabaseMetaData meta=conn.getMetaData(); 
rs= meta.getTables(null, null, tablename, new String[]{"TABLE"}); 
rs=meta.getPrimaryKeys(null, null, tablename); 
while(rs.next()) 
2

如果你只是在表中的單個約束,我認爲這可能幫助:

SELECT OBJECT_NAME(object_id) AS ConstraintName 
FROM sys.objects 
WHERE OBJECT_NAME(parent_object_id)='application' AND type = 'PK' 

如果沒有,只是嘗試另一種方式來訪問該表。

爲了定製你想要的查詢,你可以檢查這個SYS.OBJECTS。這肯定會非常有幫助;)

+0

也將工作,如果有任何數量的約束,觸發器,在表上,因爲與此查詢將始終返回0或1記錄(因爲它只能有0或1個PrimaryKey約束每個表) – CeOnSql

+0

@CeOnSql,對,感謝您的編輯和建議;) – Drumnbass

+1

歡迎:) – CeOnSql

0

還有一個系統存儲過程,可以幫助你:

EXEC sp_pkeys 'application' 

這將返回一個結果與列:

  • TABLE_QUALIFIER
  • TABLE_OWNER
  • TABLE_NAME
  • COLUMN_NAME
  • KEY_SEQ
  • PK_NAME

其中PK_NAME應該是你的PK-約束的名稱