我做了个JDBC 连接数据库的程序  在表单页面里增加一个数据   用Tomcat调试 结果显示 : name cannot be resolved   price cannot be resolved
 bookCont cannot be resolved   authr cannot be resolved
实在不知道是哪里出了问题,希望大家能看一下是不是这里有问题:              pstmt = conn.prepareStatement("insert into book (name,price,bookcont,authr) values (?,?,?,?)");
     pstmt.setString(1, name);
     pstmt.setInt(2,price);
     pstmt.setInt(3,bookCont);
     pstmt.setString(4,authr);创建名称为book类,用于封装图书对象信息  代码如下:package liyaya.book;public class liyaya {
private int id;
private String name;
private double price; private String authr;
private int bookCont;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getbookCont() {
return getbookCont();
}
public void setbookCont(int bookCont) {
this.bookCont = bookCont;
}
public String getauthr() {
return authr;
}
public void setauthr(String authr) {
this.authr = authr;
}



}
 创建index.jsp 页面,它是程序中的主页,用于放置添加图书信息所需要的表单,此表单提交到 addBook.jsp 页面进行处理,  index.jsp 如下:<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
        <title>添加图书信息</title>
 </head>
  
  <body>
    <form action="addBook.jsp" method="post">
     <table border="1">
     <tr>
     <td align="center" colspan="2" >
     <h2> 添加图书信息</h2>
              </td>
      </tr>
    
     <tr>
     <td align="centen" >图书名称 </td>
     <td> <input type="text" name="name"/></td>
     </tr>
    
     <tr>
     <td align="center" >价格</td>
     <td><input type="text" name="price"</td>
     </tr>
    
     <tr>
     <td align="center"> 数量</td>
     <td><input type="text" name="bookCount"/></td>
     </tr>
    
     <tr>
     <td align="center">作者</td>
     <td><input type="text" name="author"/> </td>
     </tr>
    
     <tr>
     <td><input type="submit" value="添加信息"/></td>
    
     </tr>
     </table>
    
    
    
    
    </form>
  </body>
</html>
 
创建 addBook.jsp  页面,用于对添加图书信息请求进行处理,此页面通过JDBC将提交的图书信息数据写入数据库中,其代码如下:<%@ page language="java" import="java.util.*,java.sql.*,liyaya.book.*" pageEncoding="GB18030"%><%

PreparedStatement pstmt = null;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=root");
pstmt = conn.prepareStatement("insert into book (name,price,bookcont,authr) values (?,?,?,?)");
pstmt.setString(1, name);
pstmt.setInt(2,price);
pstmt.setInt(3,bookCont);
pstmt.setString(4,authr);
int ret = pstmt.executeUpdate();
if(ret > 0){
out.print("cheng gong");
}
pstmt.close();
conn.close();
} catch (Exception e) {
out.print("shibai");
e.printStackTrace();


%>
数据库 book.sql 文件如下 :create table book 
(
id int primary key auto_increment,
name varchar(255),
price int,
bookCont int,
authr varchar(255)
);insert into book values (null,'Java开发典型模块大全',79,50,'明日科技');
insert into book values (null,'Java程序设计自学手册',49,50,'明日科技');
insert into book values (null,'Jsp技术开发大全',49,50,'明日科技');

解决方案 »

  1.   

    name cannot be resolved price cannot be resolved
     bookCont cannot be resolved authr cannot be resolved

    这个报错的意思是  你在addBook.jsp 没有将 name、price、bookCont、authr没有取值就直接插入,相当于刚开始没声明 int a=0; 你直接a = a+1,程序找不到a在哪里定义。所以,你在addBook.jsp中需要将index.jsp 中填写的数据取到,比如 String name = request.getParameter(“name”); String price = request.getParameter(“price ”); String bookCont = request.getParameter(“bookCont”); String author= request.getParameter(“author”); 然后就可以使用
    pstmt = conn.prepareStatement("insert into book (name,price,bookcont,authr) values (?,?,?,?)");
    pstmt.setString(1, name);
    pstmt.setInt(2,price);
    pstmt.setInt(3,bookCont);
    pstmt.setString(4,authr);

    其中的 pstmt.setString(1, name)中的name为你的变量值,不是列名。祝你成功!呵呵。
      

  2.   

    对头,set的变量还没被初始化。所以会这种错
      

  3.   

    在BEAN 中初始化一下,还有 你的包名,看着蛋疼,注意编码规范!
      

  4.   

    pstmt.setString(4,authr);
    其中的 pstmt.setString(1, name)中的name为你的变量值,不是列名。祝你成功!呵呵。
      

  5.   

    按照你说的我改了addBook.jsp 的代码  <%

    String name = request.getParameter("name");
    int price = Integer.parseInt(request.getParameter("price"));
    int bookCont = Integer.parseInt(request.getParameter("bookCont"));
    String authr= request.getParameter("authr");

    Connection conn = null;
    liyaya a = new liyaya();
    try {
    Class.forName("com.mysql.jdbc.Driver");
    //new oracle.jdbc.driver.OracleDriver();
    conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=root");
    PreparedStatement pstmt = conn.prepareStatement("insert into book (name,price,bookCont,authr) values (?,?,?,?)");
    pstmt.setString(1, name);
    pstmt.setInt(2,price);
    pstmt.setInt(3,bookCont);
    pstmt.setString(4,authr);
    int ret = pstmt.executeUpdate();
    if(ret > 0){
    out.print("cheng gong");
    }
    pstmt.close();
    conn.close();
    } catch(ClassNotFoundException e){
    e.printStackTrace();
    }catch(NumberFormatException e){
    return;
    }catch(SQLException e){
    e.printStackTrace();
    }
    %>再运行一次TOMCAT 又报错是这样的信息严重: Servlet.service() for servlet jsp threw exception
    java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:415)
    at java.lang.Integer.parseInt(Integer.java:497)
    at org.apache.jsp.addBook_jsp._jspService(addBook_jsp.java:67)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)我在网上查了一下 也有可能参数没有传过来  在index.jsp 里怎么把参数传过去啊
     
    大家帮帮忙了
      

  6.   

    String name = request.getParameter("name");
    int price = Integer.parseInt(request.getParameter("price"));
    int bookCont = Integer.parseInt(request.getParameter("bookCont"));
    String authr= request.getParameter("authr"); 
    java.lang.NumberFormatException: null
    红色部分报错,是因为你的页面的price或者bookCount没取到。你这些值一定是一个页面中,包含着表单,里面有这些参数。请确保你的数据提交.jsp到addBook.jsp中所有的参数都取到了。或者你把黄色部分处理下Null.比如 int price = request.getParameter("price")==null?0:Integer.parseInt(request.getParameter("price")); 每个都处理下,给个默认值,这样就不会报错了。如果你查看数据库的数据,全都是默认值的话,那就说明你页面中没有接收到这四个值。你可以先System.out.println(price+bookCount)这些值,然后看看问题出在哪。form提交,然后页面接收参数。一般业务都是这样的。所以,建议楼主细心的调试。
      

  7.   

    我把     
    String name = request.getParameter("name");
    int price = Integer.parseInt(request.getParameter("price"));
    int bookCont = Integer.parseInt(request.getParameter("bookCont"));
    String authr= request.getParameter("authr"); 
    放到try 里面就不报错了  但是运行后网页是空的 什么都没有  数据提取不到呢  不知道怎么回事                Connection conn = null;
    liyaya a = null;
    try {
    String name = request.getParameter("name");
    int price = Integer.parseInt(request.getParameter("price"));
    int bookCont = Integer.parseInt(request.getParameter("bookCont"));
    String authr= request.getParameter("authr");

    Class.forName("com.mysql.jdbc.Driver");
    //new oracle.jdbc.driver.OracleDriver();
    conn = DriverManager.getConnection("jdbc:mysql://localhost/bbs?user=root&password=root");
    PreparedStatement pstmt = conn.prepareStatement("insert into book (name,price,bookCont,authr) values (?,?,?,?)");
    pstmt.setString(1, name);
    pstmt.setInt(2,price);
    pstmt.setInt(3,bookCont);
    pstmt.setString(4,authr);
    int ret = pstmt.executeUpdate();
    if(ret > 0){
    out.print("cheng gong");
    }
    pstmt.close();
    conn.close();
    } catch(ClassNotFoundException e){
    e.printStackTrace();
    }catch(NumberFormatException e){
    return;
    }catch(SQLException e){
    e.printStackTrace();
    }
      

  8.   

    加在try{}catch也需要处理null.你的页面的form表单没有提交到这个页面吗?你可以打印下看看。白页面有可能是出异常了。你慢慢的调试就可以了。