1)Invalid operation for the current cursor position.错误信息提示
原因是返回的ResultSet对象的游标还在数据集的最上方,需要加一句:rs.next()!
2)数据操作要严紧所有声明的对象用完后要关掉,不然以后程序可能慢慢死掉:
rs.close();
stmt.close();
conn.close();
3)在执行数据库插入,删除,修改操作时最好要用事务操作:
在插入,删除,修改代码前先把自动提交设为false;
引用java的API文档:
setAutoCommit
void setAutoCommit(boolean autoCommit) throws SQLException
- 将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则它的所有 SQL 语句将被执行并作为单个事务提交。否则,它的 SQL 语句将聚集到事务中,直到调用
commit
方法或rollback
方法为止。默认情况下,新连接处于自动提交模式。提交发生在语句完成时。语句完成的时间取决于 SQL 语句的类型:
- 对于 DML 语句(比如 Insert、Update 或 Delete)和 DDL 语句,语句在执行完毕时完成。
- 对于 Select 语句,语句在关联结果集关闭时完成。
- 对于
CallableStatement
对象或者返回多个结果的语句,语句在所有关联结果集关闭并且已获得所有更新计数和输出参数时完成。
注:如果在事务和自动提交模式更改期间调用此方法,则提交该事务。如果调用
setAutoCommit
而自动提交模式未更改,则该调用无操作(no-op)。 - 参数:
autoCommit
- 为true
表示启用自动提交模式;为false
表示禁用自动提交模式- 抛出:
SQLException
- 如果发生数据库访问错误,在参与分布式事务的同时调用 setAutoCommit(true),或者在关闭的连接上调用此方法- 另请参见:
getAutoCommit()
- 简单来说就是在插入,删除,修改代码前加上conn.setAutoCommit(false);
- 代码后加上:
- conn.commit();
conn.setAutoCommit(true);