我必须阅读一个xml文件,以表的形式显示其内容,并且需要将数据存储在数据库表中。首先,我尝试仅在我的jsp中使用jstl1.2标签显示数据。一切正常。但是,当我尝试实现一些代码以插入记录时,出现此错误。
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元素数据?感谢和问候
我尽了最大的努力来解决我的问题,但是很遗憾没有任何帮助。在谷歌搜索时,我有一些基本的想法可以解决这个问题。我试过了
<%@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>
但是我得到了这个错误:
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. 任何想法?有什么帮助吗?有什么建议吗?请告诉我。
by default <c:set > tag places value for variable as string.