That's what i do in SQLite. The question is how to do it in java DB sql syntax. In sqlite it is SELECT( RAISE, 'error) WHERE ... in java db??
Also, I was wondering if I could find a way to implement the constraint as a column constraint. Unfortunately the details , are far from complete. http://developers.sun.com/docs/javadb/10.5.3.0/ref/index.html Basically I'm trying to check that no more than 4 rows have the same value for the column. In SQL that would be the count -group by query, as mentioned below, but since that counts as a not allowed subquery, is there some other way in java db to achieve exactly that? 2010/2/26, Rick Hillegas <[email protected]>: > Hi Gabriele, > > One way to solve this problem would be to have your trigger call a > database procedure, passing in whatever parameters you need from the > triggering row. The procedure would run the sanity check query and raise > an exception if the sanity check failed. > > Hope this helps, > -Rick > > Gabriele Kahlout wrote: >> Hello, >> >> I'm porting my application from SQLite to Java DB, but don't know how >> to enforce an assertion, achieved in SQLite by: >> >> st.execute("CREATE TRIGGER _fk_meanings_update_1 BEFORE UPDATE ON " + >> batTable.getName() + " FOR EACH ROW BEGIN SELECT RAISE(FAIL, 'error') >> WHERE (EXISTS (SELECT COUNT(*) FROM " + batTable.getName() + " GROUP >> BY " + lastPubColumn.getName() + " HAVING COUNT(*)>"+maxPub+")); >> END;"); >> >> However the constraint couldn't be added as a table constraint, and >> I'm not finding how to raise an exception with Java DB, although it's >> described here: >> >> http://developers.sun.com/docs/javadb/10.5.3.0/devguide/index.html >> >> One way was to set the identity column to null, but that was not >> allowed at compile time too. I guess I'd have to use some dirty way. >> >> > > -- Regards, K. Gabriele --- unchanged since 25/1/10 --- P.S. Unless a notification (LON), please reply either with an answer OR with " ACK" appended to this subject within 48 hours. Otherwise, I might resend. In(LON, this) ∨ In(48h, TimeNow) ∨ ∃x. In(x, MyInbox) ∧ IsAnswerTo(x, this) ∨ (In(subject(this), subject(x)) ∧ In(ACK, subject(x)) ∧ ¬IsAnswerTo(x,this)) ⇒ ¬IResend(this). Also note that correspondence may be received only from specified a priori senders, or if the subject of this email ends with a code, eg. -LICHT01X, then also from senders whose reply contains it. ∀x. In(x, MyInbox) ⇒ In(senderAddress(x), MySafeSenderList) ∨ (∃y. In(y, subject(this) ) ∧ In(y,x) ∧ isCodeLike(y, -LICHT01X) ).
