黑马程序员技术交流社区

标题: 这个异常怎么解决? [打印本页]

作者: 崔增阳    时间: 2013-5-22 22:02
标题: 这个异常怎么解决?
本帖最后由 崔增阳 于 2013-5-23 10:20 编辑

package mysql;
import java.sql.*;
import java.text.SimpleDateFormat;

public class Test {

public static void main(String[] args) throws Exception{
  Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "nazi1987");
  
  String name="fff";
  int age=27;
  String birthday="2001-07-23";
  String password="789";
  String sex="'female'";
  String sql="insert into user(name,password,age,sex,birthday)values(?,?,?,?,?)";
  PreparedStatement ps=con.prepareStatement(sql);
  ps.setString(1,name);
  ps.setString(2,password);
  ps.setInt(3,age);
  ps.setString(4,sex);
  java.util.Date temp=new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
  java.sql.Date bir=new java.sql.Date(temp.getTime());
  ps.setDate(5,bir);
  ps.executeUpdate();
  
  Statement st=con.createStatement();
  String sql1="select * from user";
  ResultSet rs=st.executeQuery(sql1);
  while(rs.next()){
   int id=rs.getInt(1);
   String name1=rs.getString(2);
   String pass=rs.getString(3);
   int age1=rs.getInt(4);
   String sex1=rs.getString(5);
   java.util.Date d=rs.getDate(6);
   System.out.println(id+":"+name1+":"+pass+":"+age1+":"+sex1+":"+d);
  }
  con.close();
}
}





Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'sex' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4118)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
at mysql.Test.main(Test.java:27)

作者: 江大海    时间: 2013-5-22 22:09
我了个去,想帮你解决的,但是看到这些代码我就吓尿了,太多啦,又还没用到elic什么工具来着
帮你顶一个
                                                
作者: SOAR    时间: 2013-5-22 22:13
Data too long for column 'sex' at row 1
数据太长了啊。你的表中sex的字段设置的太短了。
作者: 谢孔营    时间: 2013-5-22 22:33
package mysql;
import java.sql.*;
import java.text.SimpleDateFormat;

public class Test {

public static void main(String[] args) throws Exception{
   Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "nazi1987");
   
   String name="fff";
   int age=27;
   String birthday="2001-07-23";
   String password="789";
  String sex="'female'";//此处赋值过大,估计是数据库中该字段的长度为2,太小了。
   String sql="insert into user(name,password,age,sex,birthday)values(?,?,?,?,?)";
   PreparedStatement ps=con.prepareStatement(sql);
   ps.setString(1,name);
   ps.setString(2,password);
   ps.setInt(3,age);
   ps.setString(4,sex);
   java.util.Date temp=new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
   java.sql.Date bir=new java.sql.Date(temp.getTime());
   ps.setDate(5,bir);
   ps.executeUpdate();
   
   Statement st=con.createStatement();
   String sql1="select * from user";
   ResultSet rs=st.executeQuery(sql1);
   while(rs.next()){
    int id=rs.getInt(1);
    String name1=rs.getString(2);
    String pass=rs.getString(3);
    int age1=rs.getInt(4);
    String sex1=rs.getString(5);
    java.util.Date d=rs.getDate(6);//估计此处也会有异常,因为从数据库中取的时间格式是:java.sql.Date  所有需要转换成java.util.Date  即java.util.Date d= new java.util.Date(rs.getDate(6).getTime());
    System.out.println(id+":"+name1+":"+pass+":"+age1+":"+sex1+":"+d);
   }
   con.close();
}
}





作者: 曹睿翔    时间: 2013-5-22 23:05
问题解决就再次编辑更改问题类型,没有解决继续追问
作者: 袁梦希    时间: 2013-5-22 23:55
曹睿翔 发表于 2013-5-22 23:05
问题解决就再次编辑更改问题类型,没有解决继续追问

老曹很负责




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2