我用flex做前台,java做后台。使用的平台是myeclipse8.5。想实现前台输入一些数据,然后把这些数据存储到mysql中。但是在进行的过程中出现了以下的错误:(搜索了网上一些说法,说是编码问题,要使用统一编码。但是搞了好久,我始终不知道怎样设定它们的编码,还请各位赐教。先谢过了)
insert into student values(?,?,?,?,?,?,?,?);
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'grade' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:995)
at book.BookService.savePsInfo(BookService.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:406)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1417)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:878)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:49)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
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) 
java关键代码:
public int savePsInfo(String Snum,String Sname,String college,String grade,String major,int classes,String tel,String tel2){
int result=0;
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
try{
conn=DriverManager.getConnection(url,"root","4455121"); //获取数据库连接
stm=conn.createStatement(); //获取表达式
String sql="insert into student values(?,?,?,?,?,?,?,?);";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, Snum);
ps.setString(2, Sname);
ps.setString(3, college);
ps.setString(4, grade);
ps.setString(5, major);
ps.setInt(6, classes);
ps.setString(7, tel);
ps.setString(8, tel2);
System.out.println(sql);
ps.execute();
result=1;
}catch(SQLException e){
e.printStackTrace();
}
return result;
}

解决方案 »

  1.   

    ps.setString(4, grade);格式不对 ,是日期格式,你给的是long
      

  2.   

     Data too long for column 'grade'grade字段长度太短了
      

  3.   

    格式不对?我的grade只是字符串而已,表示年级,比如2008。
      

  4.   

    grade字段的设定的是varchar(8),我输入的是2010.字段的长度没有问题呀
      

  5.   

      Data too long for column 'grade':grade字段长度太短了
      
       产生这个的原因是 位参数在设值时的起始位子为 0.  不是1.
      

  6.   

    你是指这段ps.setString(1, Snum);
    ps.setString(2, Sname);
    ps.setString(3, college);
    ps.setString(4, grade);
    ps.setString(5, major);
    ps.setInt(6, classes);
    ps.setString(7, tel);
    ps.setString(8, tel2);
    System.out.println(sql);
    的起始位子是0么?   这个是1开始的吧……我把grade注释掉,在insert里插入数据就可以执行了但是中文字就变成了object Object.