有人说无法update,但无法update的话,我强行加进数据去就重复了呢……
给它加属性让它变成中间表?
先遍历一遍,有就不管,没有就加上?
感觉都不太靠谱的样子啊
[quote]您说的这是……ROR吗?我怎么看不太懂的样子……[/quote]
不好意思,没留意分类。这是用jdbc来做的。如果要用ROR,估计没办法,因为ROR是基于约定的,一般又都有ID。
如果您只是想要针对查询到的资料进行一些简单的新增、更新或删除资料,您可以藉由ResultSet的一些方法来执行,而不一定要撰写SQL并执行。
想要使用ResultSet直接进行新增、更新或删除资料,在建立Statement时必须在createStatement()上指定ResultSet.TYPE_SCROLL_SENSITIVE(或ResultSet.TYPE_SCROLL_INSENSITIVE,如果不想取得更新后的资料的话)与ResultSet.CONCUR_UPDATABLE,例如:
[code="sql"]Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE); [/code]
假如我们想要针对查询到的资料进行更新的动作,我们先移动游标至想要更新的资料位置,然后使用updateXXX()等对应的方法即可,最后记得使用updateRow()让更新生效,例如:
[code="sql"]ResultSet result = stmt.executeQuery(
"SELECT * FROM message WHERE name='caterpillar'");
result.last();
result.updateString("name", "justin");
result.updateString("email", "justin@mail.com");
result.updateRow(); [/code]
使用updateXXX()等方法之后,并不会马上对资料库生效,而必须执行完updateRow()方法才会对资料库进行操作,如果在updateRow()前想要取消之前的updateXXX()方法,则可以使用cancelRowUpdates()方法取消。
如果想要新增资料,则先使用moveToInsertRow()移至新增资料处,执行相对的updateXXX()方法,然后再执行insertRow ()即可新增资料,例如:
[code="sql"]ResultSet result = stmt.executeQuery(
"SELECT * FROM message WHERE name='caterpillar'");
result.moveToInsertRow();
result.updateString("name", "caterpillar");
result.updateString("email", "caterpillar@mail.com");
result.updateString("subject", "test");
result.updateString("memo", "This is a test!");
result.insertRow(); [/code]
如果想要删除查询到的某笔资料,则可以将游标移至该笔资料,然后执行deleteRow()方法即可:
[code="sql"]ResultSet result = stmt.executeQuery(
"SELECT * FROM message WHERE name='caterpillar'");
result.last();
result.deleteRow(); [/code]