2017-12-02 13 views
0

我想要做的這個Java代碼相當於源碼在加薪的錯誤消息(中止,「消息」),sqlite的格式文本與變量值

String location = //initialize string 
String output = String.format("Error: Insert into the SIGHTINGS table references location %s that is not found in database.", location); 

這是我嘗試過,但它似乎沒有工作:

CREATE TRIGGER SightingLocationError 
    BEFORE INSERT ON SIGHTINGS 
    FOR EACH ROW 
    WHEN NEW.LOCATION NOT IN FEATURES 
BEGIN 
    SELECT RAISE(ABORT, 'Error: Insert into the SIGHTINGS table references location'|| CAST(NEW.LOCATION AS TEXT) || 
'that is not found in the database.'); 
END; 

我也試了一下沒有投成文本,並與周圍的整個消息的一部分括號,這些方法也不能工作。 格式化錯誤消息的正確方法是什麼,以便它將顯示無法插入的位置的名稱,因爲它不在FEATURE表中?

回答

0

它看起來像你試圖重塑與觸發FOREIGN KEY

我建議使用:

CREATE TABLE FEATURES (ID INT PRIMARY KEY /*rest of columns*/); 

CREATE TABLE SIGHTINGS(ID INT PRIMARY KEY, LOCATION INT, 
      FOREIGN KEY (LOCATION) REFERENCES FEATURES(id)); 

DBFiddle Demo

+0

這實際上是對觸發器的分配與已經被創建的數據庫。該分配表示,如果LOCATION屬性不存在於FEATURES表中,並且顯示錯誤消息,我們必須創建一個觸發器來中止插入到SIGHTINGS表的行。如果需要,我可以發佈架構。 –