之前要进行新增、更新或删除数据,都必须要撰写SQL,然后使用 executeUpdate()来执SQL,将SQL写在executeUpdate ()之中,其实是一件麻烦又容易出错的动作,如果您只是想要针对查询到的数据进行一些简单的新增、更新或删除资料,您可以藉由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();