在cmd下连接、插入、查询等操作都正常,但是用java连接derby数据库时总是出现如下错误:
java.sql.SQLTransactionRollbackException:A lock could not be obtained within the time requested
private Connection getConnection()
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
conn=DriverManager.getConnection("jdbc:derby:qq;create=true");
conn.setAutoCommit(false);
return conn;
}
public void insert(String tName)
{
String sql="insert into "+tName+"(id,email,count) values(4,'dfsqq,22)";
this.excuteSQL(sql);
}
public boolean excuteSQL(String sql)
{
Statement s;
conn=getConnection();
s = conn.createStatement();
s.executeUpdate(sql);
s.close();
//conn.close() 会出现关闭异常,提示:连接正处于活动状态**
return true;
}
public void close()
{
try
{
conn.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Dao dao=new Dao();
dao.insert(table);//出现异常
dao.close();
String sql=”insert into “+tName+”(id,email,count) values(4,’dfsqq,22)”; 看下这条SQL是否有问题,是不是少了个“ ‘ ”,应该是SQL执行失败导致的回滚,数据库连接配置本身是没错的。
conn.setAutoCommit(false);
这样子将取消自动提交,
conn.commit();
需要显示的调用 commit , 才能完成事务提交.
见 java api http://docs.oracle.com/javase/6/docs/…
建议最好在调用 close 方法之前,应用程序显式提交或回滚一个活动事务。如果调用 close 方法并且有一个活动事务,那么结果将由实现定义。
正文完