这种方法运行正常。这里我从book表中获取max bookid但是当数据库为null时我得到空指针异常。那么,如何处理这个异常。
public void insertData() {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
Book book = new Book();
SQLQuery query = session.createSQLQuery("select MAX(bookid) from books");
List<Book> rows = query.list();
for (Object row : rows) {
book.setBookid(Integer.parseInt(row.toString()));
Integer id1 = book.getBookid() + 1;
selbookid = id1;
}
book.setBookname("Java");
book.setDateofcreation(new Date());
book.setLastmodifieddate(new Date());
session.save(book);
tx.commit();
session.flush();
session.close();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
当您的查询返回单个行/列值时,请使用uniqueResult()而不是list()。
希望在表中没有行时引发异常。 我对您的代码进行了一些更改。
试试这个
public void insertData()
{
Transaction tx = null;
Session session = getSession();
int result =0;
try {
tx = session.beginTransaction();
Book book = new Book();
SQLQuery query = session.createSQLQuery("select MAX(bookid) from books");
try
{
result = (int)query.uniqueResult();
}
catch(Exception e)
{
//do whatever you want with exception
}
book.setBookid(result+1);
book.setBookname("Java");
book.setDateofcreation(new Date());
book.setLastmodifieddate(new Date());
session.save(book);
tx.commit();
session.flush();
session.close();
}
catch (RuntimeException e) {
e.printStackTrace();
}
}
答案 1 :(得分:1)
您的问题尚不清楚,但您可以在问题中看到,如果数据库为空,那么只有您正在获得执行。
我在系统中检查了这个方法,发现了为什么会出现异常,因为在SQL查询中你从books表中获取bookid的最大值,但是如果数据库为null,那么如何获取最大值以便你需要做一些更改在查询中。您应该使用IFNULL条件,如:
select IFNULL(MAX(bookid),1) from books
即使数据库为空也是如此,因为如果books表为空,则插入bookid 1。