使用jstl标记解析和将xml数据存储在数据库中时出错 [英] Error while parsing and storing xml data in database using jstl tags

查看:79
本文介绍了使用jstl标记解析和将xml数据存储在数据库中时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须阅读一个xml文件,以表的形式显示其内容,并且需要将数据存储在数据库表中.首先,我尝试仅在我的jsp中使用jstl1.2标签显示数据.一切正常.但是,当我尝试实现一些代码以插入记录时,出现此错误.

I have to read an xml file, display its content in the form of a table and need to store the data in database table. Firstly I tried to only display the data using jstl1.2 tags in my jsp. It is working fine. But when I tried to implement some code to insert the records I am getting this error..

 Can't infer the SQL type to use for an instance of org.apache.taglibs.standard.tag.common.xml.JSTLNodeList. Use setObject() with an explicit Types value to specify the type to use.

我的Jsp代码如下:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

<sql:setDataSource var="dataSource" driver="org.postgresql.Driver"
     url="jdbc:postgresql://localhost:5432/postgres" user="postgres" password="shail"
     scope="session" />

<html>
  <head>
    <title>cust_xml</title>
  </head>
  <body>

    <h1>Customer Information</h1>

    <c:import var="xmlFile" url="cust.xml"  charEncoding="UTF-8"/>
    <x:parse var="myDoc" xml="${xmlFile}" />

    <table border="1">
      <tr>
        <th>Customer Number</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Street</th>
        <th>City</th>
        <th>State</th>
        <th>Zipcode</th>
        <th>Balance</th>
      </tr>
      <x:forEach select="$myDoc/CUSTOMERS/Customer" var="cust">
        <tr>
             <td>
              <x:out select="$cust/CustNo" />
              <x:set var="custno" select="$cust/CustNo" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustFirstName" />
              <x:set var="custfn" select="$cust/CustFirstName" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustLastName" />
              <x:set var="custln" select="$cust/CustLastName" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustStreet" />
              <x:set var="custst" select="$cust/CustStreet" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustCity" />
              <x:set var="custcity" select="$cust/CustCity" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustState" />
              <x:set var="custstate" select="$cust/CustState" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustZip" />
              <x:set var="custz" select="$cust/CustZip" scope="session"/>
             </td>
             <td>
              <x:out select="$cust/CustBal" />
              <x:set var="custbal" select="$cust/CustBal" scope="session"/>
             </td>
        </tr>
      </x:forEach>
    </table>

    <sql:update dataSource="${dataSource}" var="updatedTable">
        INSERT INTO data  VALUES (?,?,?,?,?,?,?,?);
        <sql:param value="${custno}" />
        <sql:param value="${custfn}" />
        <sql:param value="${custln}" />
        <sql:param value="${custst}" />
        <sql:param value="${custcity}" />
        <sql:param value="${custstate}" />
        <sql:param value="${custz}" />
        <sql:param value="${custbal}" />
    </sql:update>
    <c:if test="${updatedTable>=1}">
     <font size="5" color='green'> Congratulations ! Data inserted successfully.</font>
    </c:if>

  </body>
</html>

请提出您的建议,我应使用哪个标记来设置值以插入查询参数?如何获取要在查询参数中设置的xml元素数据? 谢谢&问候

Please provide your suggestion which tag shall I use to set the values to insert query parameters? How to get the xml elements data to set in query parameters? Thanks & Regards

推荐答案

我尽力找到解决问题的方法,但不幸的是没有任何帮助. 在谷歌搜索时,我有一些基本的想法可以解决这个问题.我尝试过了

I tried hard to get the solution of my problem but unfortunately couldn't get any help. While googling I got some basic idea to cope with this. I tried this

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

<sql:setDataSource var="dataSource" driver="org.postgresql.Driver"
     url="jdbc:postgresql://localhost:5432/postgres" user="postgres" password="shail"
     scope="session" />

<html>
  <head>
    <title>cust_xml</title>
  </head>
  <body bgcolor="skyblue">

    <h1 align="center">Customer Information Stored In XMl File</h1>

    <c:import var="xmlFile" url="cust.xml"  charEncoding="UTF-8"/>
    <x:parse var="myDoc" xml="${xmlFile}" />

    <table border="1" cellspacing="1" cellpadding="1" bgcolor="pink" align="center">
      <tr>
        <th>Customer Number</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Street</th>
        <th>City</th>
        <th>State</th>
        <th>Zipcode</th>
        <th>Balance</th>
      </tr>
      <x:forEach select="$myDoc/CUSTOMERS/Customer" var="cust">
        <tr>
             <td>
              <c:set var="custno" >
              <x:out select="$cust/CustNo" />
              </c:set>
              <x:out select="$cust/CustNo" />
             </td>
             <td>
              <c:set var="custfn" >
              <x:out select="$cust/CustFirstName" />
              </c:set>
              <x:out select="$cust/CustFirstName" />
             </td>
             <td>
              <c:set var="custln" >
              <x:out select="$cust/CustLastName" />
              </c:set>
              <x:out select="$cust/CustLastName" />
             </td>
             <td>
              <c:set var="custst" >
              <x:out select="$cust/CustStreet" />
              </c:set>
              <x:out select="$cust/CustStreet" />
             </td>
             <td>
              <c:set var="custcity" >
              <x:out select="$cust/CustCity" />
              </c:set>
              <x:out select="$cust/CustCity" />
             </td>
             <td>
              <c:set var="custstate" >
              <x:out select="$cust/CustState" />
              </c:set>
              <x:out select="$cust/CustState" />
             </td>
             <td>
              <c:set var="custz" >
              <x:out select="$cust/CustZip" />
              </c:set>
              <x:out select="$cust/CustZip" />
             </td>
             <td>
              <c:set var="custbal" >
              <x:out select="$cust/CustBal" />
              </c:set>
              <x:out select="$cust/CustBal" />
             </td>
        </tr>
        <sql:update dataSource="${dataSource}" var="updatedTable">
        INSERT INTO data  VALUES (?,?,?,?,?,?,?,?);
        <sql:param value="${custno}" />
        <sql:param value="${custfn}" />
        <sql:param value="${custln}" />
        <sql:param value="${custst}" />
        <sql:param value="${custcity}" />
        <sql:param value="${custstate}" />
        <sql:param value="${custz}" />
        <sql:param value="${custbal}" />

    </sql:update>
    <c:set var="rowcount" value="${updatedTable+rowcount}"/>
      </x:forEach>

    <c:if test="${rowcount>=1}">
      <tr>
       <td colspan="8" align="center">
     <font size="5" color='red' align="center">
     Congratulations ! <c:out value="${rowcount}" /> Rows inserted successfully  in DB Table.</font>
       </td>
      </tr>
    </c:if>
    </table>
  </body>
</html>

但是我得到了这个错误:

But I got this error:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: 
        INSERT INTO data  VALUES (?,?,?,?,?,?,?,?);
ERROR: column "balance" is of type integer but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.

在我的表中,余额(最后一列)是整数类型. 当我用Google搜索时,我发现jstl标记会自动处理转换.但它显示错误为by default <c:set > tag places value for variable as string. 任何的想法?有什么帮助吗?有什么建议吗?请让我知道.

As in my table balance(last column) is integer type. When I googled I got that jstl tags automatically take care of casting. But it is showing error as by default <c:set > tag places value for variable as string. Any idea? Any help? Any suggestion? Please let me know.

这篇关于使用jstl标记解析和将xml数据存储在数据库中时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆