我先把数据库贴一下
create table login(
username varchar(10) primary key not null,
password varchar(16) not null,
age varchar(10) not null,
sex varchar2(10) not null,
brithday varchar(30) not null,
phone number(18) not null
)
然后是java代码:
package com.jstgx.struts;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.*;
import java.sql.*;
import java.io.PrintWriter;public class LoggingAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
// TODO 自动生成方法存根
LoggingActionForm lac = (LoggingActionForm) form;
String username = lac.getUsername();
String password = lac.getPassword();
String age = lac.getAge();

String sex=lac.getSex();

String brithday=lac.getBrithday();
String phone=lac.getPhone();
DBConnection dbconn = new DBConnection();
String sql = "insert into login values(?,?,?,?,?,?)";

Connection conn = dbconn.getConnection();
String result = "false";
PreparedStatement pstat = null;
try {
pstat = conn.prepareStatement(sql);
pstat.setString(1, username);
System.out.println(lac.getUsername());
pstat.setString(2, password);
System.out.println(lac.getPassword());
pstat.setString(3, age);
System.out.println(lac.getAge());
pstat.setString(4, sex);
System.out.println(lac.getSex());
pstat.setString(5, brithday);
System.out.println(lac.getBrithday());
pstat.setString(6, phone);
System.out.println(lac.getPhone());
pstat.execute();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

request.setAttribute("username", username);
return mapping.findForward("success");


}
}
运行之后:在页面里输入了信息。
就报java.sql.SQLException: ORA-00913: 值过多
错误行数是:pstat.execute();
在网页里输入的信息全部能取到。LoggingActionForm经检查无错。也是6个字段名。
该如何修改呢?

解决方案 »

  1.   

    先把你表中的phone字段改成VARCHAR2试试.
      

  2.   

    pstat.setString(0, username);从“0”开始
      

  3.   

    username varchar(10) primary key not null,把varchar(10)改大一点 改成100试试
      

  4.   

    还是不行,很诡异阿。我在公司的时候是不会报错的。数据可以存到数据库里。到家里就不行。我把PLSQL Developer卸载了,因为用它数据查询的不全。用oracle里的SQLPLUS把数据都查到。但是往里存入也不行。谁能帮帮我?即使是往里存5个数据都会报值过多。
      

  5.   

    正常来讲,值过多就是说你insert的字段太多了
      

  6.   

    myeclipse重新编译下试试,可能编译时有关oracle的jar包没编译成功
      

  7.   

    我也遇到过,兄弟你把sql语句打印出来,你就会发现有问题。我追加了两个字段,忘了加“,“
      

  8.   

    一般是你插入的表的字段与你的占位符的个数不一致,你把你的SQL改成
    "insert into login(username,password,age,sex,birthday,phone) values(?,?,?,?,?,?)"
    应该没问题!