【问题标题】:Retrieve data from database using Hibernate with Spring MVC. Error - "java.lang.NumberFormatException: For input string: "使用带有 Spring MVC 的 Hibernate 从数据库中检索数据。错误 - “java.lang.NumberFormatException:对于输入字符串:”
【发布时间】:2019-11-05 06:04:44
【问题描述】:

我正在尝试使用搜索页面创建一个简单的 web 应用程序。我已经实现了 CRUD 部分并且它正在工作。我是编码新手。搜索选项有问题。错误 - “java.lang.NumberFormatException:对于输入字符串:“ISBN””

我需要根据给定的搜索条件获取数据列表。

Database table name = Items 
Columns 
* id - primary key 
* ISBN - String 
* title - String
category_id - String (I changed this from Int to String as I decided to use the book name instead, to make it simple. So this is not an ID its basically the book name so it's kept as a String)
* Author - String 
* publisher_id - String (same logic as category_id)
* price - FLOAT
* stock - INT
* photo_id - INT
DB DESC

ItemsController.java

@RequestMapping(value ="/search_1")
    public ModelAndView search_1(HttpServletRequest request, HttpServletResponse response) {

        String category_id = request.getParameter("category_id");
        String publisher_id = request.getParameter("publisher_id");

        List<Items> listItems2 = ItemsService.searchitems(category_id,publisher_id);

        ModelAndView model = new ModelAndView();
        model.setViewName("searchResult");
        model.addObject("items", listItems2);

        return model;
    }

IteamsDAO

package com.jwt.dao;

import java.util.List;

import com.jwt.model.Items;

public interface ItemsDAO {

    public void additems(Items items);

    public List<Items> getAllitems();

    public void deleteitems(Integer itemsId);

    public Items updateitems(Items items);

    public Items getitems(int itemsId);

    public List<Items> searchitems(String category_id, String publsiher_id);
}

ItemsDAOImpl

package com.jwt.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.jwt.model.Items;

@Repository ("ItemsDAO")
public class ItemsDAOImpl implements ItemsDAO {

    @Autowired
    private SessionFactory sessionFactory;

    public void additems(Items items) {
        sessionFactory.getCurrentSession().saveOrUpdate(items);

    }

    @SuppressWarnings("unchecked")
    public List<Items> getAllitems() {

        return sessionFactory.getCurrentSession().createQuery("from Items")
                .list();
    }

    @Override
    public void deleteitems(Integer itemsId) {
        Items items = (Items) sessionFactory.getCurrentSession().load(
                Items.class, itemsId);
        if (null != items) {
            this.sessionFactory.getCurrentSession().delete(items);
        }

    }

    public Items getitems(int itemsId) {
        return (Items) sessionFactory.getCurrentSession().get(
                Items.class, itemsId);
    }

    @Override
    public Items updateitems(Items items) {
        sessionFactory.getCurrentSession().update(items);
        return items;
    }

    @SuppressWarnings("unchecked")
    public List<Items> searchitems(String category_id, String publsiher_id) {

        return sessionFactory.getCurrentSession().createQuery("from Items E where E.category_id = category_id AND E.publisher_id=publisher_id")
                .list();

    }

}

Items.java

package com.jwt.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "items")
public class Items implements Serializable {

    private static final long serialVersionUID = -3465813074586302847L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column
    private String ISBN;

    @Column
    private String title;

    @Column
    private String category_id;

    @Column
    private String Author;


    @Column
    private String publisher_id;

    @Column
    private float price;

    @Column
    private int stock;

    @Column
    private int photo_id;



    public int getid() {
        return id;
    }

    public void setid(int id) {
        this.id = id;

    }

    public String getISBN() {
        return ISBN;
    }

    public void setISBN(String ISBN) {
        this.ISBN = ISBN;
    }

    public String gettitle() {
        return title;
    }

    public void settitle(String title) {
        this.title = title;
    }

    public String getcategory_id() {
        return category_id;
    }

    public void setcategory_id( String category_id) {
        this.category_id = category_id;
    }

    public String getAuthor() {
        return Author;
    }

    public void setAuthor(String Author) {
        this.Author = Author;
    }

  public String getpublisher_id() {
        return publisher_id;
    }

    public void setpublisher_id(String publisher_id) {
        this.publisher_id = publisher_id;
    }


     public float getprice() {
        return price;
    }

    public void setprice(float price) {
        this.price = price;
    }

     public int getstock() {
        return stock;
    }

    public void setstock(int stock) {
        this.stock = stock;
    }


     public int getphoto_id() {
        return photo_id;
    }

    public void setphoto_id(int photo_id) {
        this.photo_id = photo_id;
    }
}

ItemsService.java

package com.jwt.service;

import java.util.List;

import com.jwt.model.Items;

public interface ItemsService {

    public void additems(Items items);

    public List<Items> getAllitems();

    public void deleteitems(Integer itemsId);

    public Items updateitems(Items items);

    public Items getitems(int itemsId);

    public List<Items> searchitems(String category_id, String publsiher_id);


}

ItemsServiceImpl.java


package com.jwt.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jwt.dao.ItemsDAO;
import com.jwt.model.Items;

@Service
@Transactional
public class ItemsServiceImpl implements ItemsService {

    @Autowired
    private ItemsDAO itemsDAO;

    @Override
    @Transactional
    public void additems(Items items) {
        itemsDAO.additems(items);
    }

    @Override
    @Transactional
    public List<Items> getAllitems() {
        return itemsDAO.getAllitems();
    }

    @Override
    @Transactional
    public void deleteitems(Integer itemsId) {
        itemsDAO.deleteitems(itemsId);
    }

    public Items getitems(int itemsid) {
        return itemsDAO.getitems(itemsid);
    }

    public Items updateitems(Items items) {
        // TODO Auto-generated method stub
        return itemsDAO.updateitems(items);
    }

    public void setitemsDAO(ItemsDAO itemsDAO) {
        this.itemsDAO = itemsDAO;
    }

    @Override
    @Transactional
    public List<Items> searchitems(String category_id, String publsiher_id) {
        return itemsDAO.searchitems(category_id, publsiher_id);   
        }


}

输入搜索JSP页面

search_1.jsp

<div align="center">
        <h1>Search Items</h1>


        <form action="search_1" method="get" modelAttribute="items">
        <table>
        <tr>
            <td>Category:</td>
            <td>
          <select  type="text" name="category_id">
            <option value="Book">Book</option>
            <option value="Audio Books">Audio Books</option>
            <option value="Videos">Videos</option>
            <option value="Music">Music</option>
          </select>
             </td>
        </tr>

        <tr>
            <td>Publisher ID:</td>
            <td>
          <select  type="text" name="publisher_id">
            <option value="Harper Collins">Harper Collins</option>
            <option value="Penguins">Penguins</option>
            <option value="Franciscan Media">Franciscan Media</option>
            <option value="Orbis">Orbis</option>
          </select>
             </td>
        </tr>



        <tr>
                <td colspan="2" align="center"><input type="submit" value="search"></td>
            </tr>

        </table>


        </form>


    </div>

搜索结果将在此处填充

searchResult.jsp



      <div align="center">
        <h1>Book shop Inventory</h1>

        <table>

            <th>ISBN</th>
            <th>Title</th>
            <th>Category</th>
            <th>Author</th>
            <th>Publisher</th>
            <th>Price</th>
            <th>Stock</th>
            <th>Photo</th>


            <c:forEach var="items" items="${listItems2}">
                <tr>


                    <td>${items.ISBN}</td>
                    <td>${items.title}</td>
                    <td>${items.category_id}</td>
                    <td>${items.author}</td>
                    <td>${items.publisher_id}</td>
                    <td>${items.price}</td>
                    <td>${items.stock}</td>
                    <td>${items.photo_id}</td>


                </tr>
            </c:forEach>
        </table>
         </br>
        <input type="button" class="btn btn-info" value="Search Again" onclick="window.location.href='http://localhost:8080/SpringMVCHibernateCRUD_1/search'">
    </div>

完整的错误信息


root cause

java.lang.NumberFormatException: For input string: "ISBN"
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    java.lang.Integer.parseInt(Integer.java:580)
    java.lang.Integer.parseInt(Integer.java:615)
    javax.el.ListELResolver.coerce(ListELResolver.java:163)
    javax.el.ListELResolver.getValue(ListELResolver.java:51)
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
    org.apache.el.parser.AstValue.getValue(AstValue.java:183)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026)
    org.apache.jsp.WEB_002dINF.pages.searchResult_jsp._jspService(searchResult_jsp.java:131)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1228)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1011)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

【问题讨论】:

  • 你在使用 mysql 如果是,请分享 DESC 你的表名
  • 删除您的表并重新创建它。可能是您的列在单列中同时包含 stringint
  • @Vipul 我刚刚将其添加到问题中。
  • @Sudhir Ojha 数据没有混合。列的数据仅根据定义的数据类型。无论如何,我会放下并创建另一个来检查
  • @NalakaSapumal 您使用的是哪个数据库仍不清楚;您也可以在终端控制台中执行此 DESC 表名

标签: hibernate spring-mvc


【解决方案1】:

您必须将条件设置为参数才能在ItemsDAOImpl 中获得结果

public List<Items> searchitems(String category_id, String publsiher_id) {

        return sessionFactory.getCurrentSession().createQuery("from Items E where E.category_id = :category_id AND E.publisher_id= :publisher_id")
                .setParameter("category_id", category_id)
                .setParameter("publisher_id", publsiher_id)
                .list();

    }

在您的 searchResult.jsp 中,您正在迭代 listItems2,但您在控制器中添加了属性为 items

改变

 <c:forEach var="items" items="${listItems2}">

 <c:forEach var="items" items="${items}">

另一方面,请正确命名实体。实体名称应为Item,集合名称应为Items。但是稍后再做,首先尝试解决当前的问题。

【讨论】:

  • 它修复了一些问题,但我仍然遇到同样的错误。但是,我可以从 IDE hibernate 中看到正在处理给定的查询。错误-“java.lang.NumberFormatException:对于输入字符串:“ISBN”“
【解决方案2】:

最后是简单的语法问题。 @saifulislamplabon 答案修复了我的 Hibernate 部分和错误 -" java.lang.NumberFormatException For input string: "ISBN" 是因为我的 JSP 页面有 &lt;c:forEach 标签错误。这是由 &lt;% @page 之间的空格引起的。我将其更正为&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;,现在一切正常。感谢您的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2013-06-27
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多