2017-12-02 104 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表的行。如果需要,我可以发布架构。 –