java.sql.SQLException: ORA-01722: 无效数字 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at com.test.db.DBOperator.executeUpdate(DBOperator.java:41)
at com.test.dao.StudentDAO.insertStudent(StudentDAO.java:20)
at com.test.servlet.ServletAction.insert(ServletAction.java:98)
at com.test.servlet.ServletAction.doPost(ServletAction.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
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:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

    数据库用的是oracle 有ID字段 number型的  age number型 name varchar2型 sex varchar2 型的 address 也是varchar2型的
      

  2.   

    在你的后台将执行的sql语句都输出来
    例如 
    String xx="xx";
    int y=0;
    String sql="insert into a values('"+xx+"',"+yy+")";
    System.out.print(sql);
    然后将输出的语句贴出来
      

  3.   

    不是你的ID 或者age传入的不是数字类型,是其他的类型吧?
      

  4.   

    自学的JSP 不是很懂啊  主要是添加时出错。
      

  5.   

    添加时id 和age 都是数字的啊 不知怎么还是出错了 我粘一下代码
      

  6.   

    at com.test.db.DBOperator.executeUpdate(DBOperator.java:41)
    at com.test.dao.StudentDAO.insertStudent(StudentDAO.java:20)
    at com.test.servlet.ServletAction.insert(ServletAction.java:98)
    at com.test.servlet.ServletAction.doPost(ServletAction.java:45)把报错的这几个类贴出来把 ,或者你看看你的 sql ,就是类型 和数据库的不一样 
      

  7.   

    好的这是studentdao的  /**
     * 向数据库新增一条记录的调用方法
     */
    public int insertStudent(Student cust) throws SQLException{
    String sql = "insert into Student values(?,?,?,?,?)";
    Object [] obj = new Object[]{cust.getId(),cust.getName(),cust.getAge(),cust.getSex(),cust.getAddress()};
    DBOperator db = new DBOperator();
    try {
    n = db.executeUpdate(sql, obj);
    } catch (SQLException e) {
    e.printStackTrace();

    return n;
    }
      

  8.   

    dboperate 类的   /**
     * 对数据库增,删,改操作的调用方法 
     */
    public int executeUpdate(String sql,Object[]obj) throws SQLException {
    stmt = conn.prepareStatement(sql);
    for (int i=0;i<obj.length;i++) {
    stmt.setObject(i+1,obj[i]);
    }
    int ri = stmt.executeUpdate();
    return ri;
    }
      

  9.   

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    request.setCharacterEncoding("gbk");
    response.setCharacterEncoding("gbk");
    String type=request.getParameter("type");
    if(type.equals("login")){
    this.show(request, response);
    }
    if(type.equals("delete")){
    this.delete(request, response);
    }
    if(type.equals("insert")){
    //45行显示出错  this.insert(request, response);
    }
    if(type.equals("modify")){
    this.modify(request, response);
    }
    if(type.equals("select")){
    this.select(request, response);
    }
    }
      

  10.   

    我也是刚自学的oracle 只是建了一个表 没有主键什么的 我感觉应该不会受影响吧 毕竟一个表 
    关系对应也好 是不是从文本框中的是字符型 要转换成int型啊 因为我的表里有两个int型的
    还有你们看一下我的出错那几个类 已经标好了哪一行 出错的 谢谢
      

  11.   

    servletAction 中部分代码:
    public void insert(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        int age = Integer.parseInt(request.getParameter("age"));
        String sex = request.getParameter("sex");
        String address = request.getParameter("address");
        
         Student stu=new Student();
         stu.setId(id);
         stu.setName(name);
         stu.setAge(age);
         stu.setSex(sex);
         stu.setAddress(address);
         try {
         //98行添加出错 s.insertStudent(stu);
         } catch (SQLException e) {
         e.printStackTrace();
         }
         response.sendRedirect("ServletAction?type=login");
    }
      

  12.   

    请问一下 如果我把所有的类型都改成字符串 可以么 就是把id age都改成 String型 可以么 ?求指教
      

  13.   

    嗯,有道理 但是能看到我的问题错在哪里呢?还有你刚开始说的sql语句 粘贴处结果 我输了 结果竟然发现试图或表不存在 明明我已经连接到了数据库 怎么会不存在呢 求指教!!!谢谢
      

  14.   

    你在哪里测试得到视图或表不存在的?在mysql里?还是在程序里?
      

  15.   

    oracle 在这里面 SQLPUSWORKsheet  输入的语句 我用的是oracle 9i的数据库
      

  16.   

    insert into emp1(hiredate) values('02-4月-81')
    insert into emp1(hiredate) values('02-4月-81')
                                      *
    第 1 行出现错误:
    ORA-01722: 无效数字
    这是怎么回事?