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