如何使用mysql查询

时间:2016-04-02 11:57:17

标签: java mysql hibernate

这种方法运行正常。这里我从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();
            } 
        }

2 个答案:

答案 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。