遇到ERROR:数据截断:第1行的“StudentID”列超出范围值

时间:2012-03-15 10:39:50

标签: java mysql

需要你对这个错误的帮助,我需要将数组的值插入MySQL中的一行,除了设置为自动增量的主键。但是我遇到这个错误,下面是我的数据库结构和我要插入的代码:

     CREATE TABLE `predicted`  
(`StudentID` int(10) NOT NULL AUTO_INCREMENT,`Calc1` varchar(50) NOT NULL,
      `ProgConcept` varchar(50) NOT NULL,
      `English1` varchar(50) NOT NULL,
      `Physics1` varchar(50) NOT NULL,
      `IntrotoIT` varchar(50) NOT NULL,
      PRIMARY KEY (`StudentID`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2147483648 ;

并且要插入的代码是:

/**
 *
 * @author fobia
 */
import java.sql.*;
import java.text.*;

public class arraytodb {
    public static void sendtodb(String[]toarray, int lengthofarray){

        String db="";
        System.out.println("Length of array: "+lengthofarray);
        for(int i=0;i<toarray.length;i++){
            if(i==0){
            db="'"+toarray[i]+"'";

            }else{
            db=db+"'"+toarray[i]+"'";

            }

            System.out.println(">>"+toarray[i]+"\t");
        }
        int counter=1;
        for(int a=1;a<Integer.MAX_VALUE;a++){
            counter++;
        }
//==============================================================================

        try{
            Connection con = null;
  String url = "jdbc:mysql://localhost:3306/thesis";
//  String db = "";
  String driver = "com.mysql.jdbc.Driver";
  Class.forName(driver);
  con =       (Connection) DriverManager.getConnection(url,"root","");
  try{
                java.sql.Statement st = con.createStatement();
                //int val = st.executeUpdate("INSERT dataset VALUES('019','"+db+")");
                int val = st.executeUpdate("INSERT INTO predicted (Calc1, ProgConcept, English1, Physics1, IntrotoIT) VALUES ('"+toarray[0]+"','"+toarray[1]+"' ,'"+toarray[2]+"', '"+toarray[3]+"', '"+toarray[4]+"')");
                System.out.println("1 row affected");
  }
  catch (SQLException s){
      s.printStackTrace();
  System.out.println("failed");
  }
  }
  catch (Exception e){
  e.printStackTrace();
  }
    }

}

StudentID的输入必须从一个自动递增,这样我就无法得到它并且总是遇到错误

  

com.mysql.jdbc.MysqlDataTruncation:数据截断:超出范围   第1行“StudentID”列的值

非常感谢你。

4 个答案:

答案 0 :(得分:1)

您必须增加主键值的大小。在运行时,您输入的值不受INT(10)的限制。

您必须在案例中增加 int 的主要字段的大小。

答案 1 :(得分:0)

创建时不应尝试插入ID。这就是自动增量色谱柱为您所做的事情;)

除此之外,您尝试插入的值大于列http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and-overflow.html的最大大小

答案 2 :(得分:0)

指定AUTO_INCREMENT = 2147483648。请删除此声明,它将解决您的问题。

答案 3 :(得分:0)

要么创建具有预定义自动增量字段的表,要么您似乎已达到自动增量字段的最大范围。

使用以下命令将自动增量值重置为1: ALTER TABLE预测AUTO_INCREMENT = 1;

重置时,请确保备份现有数据(如果有)并截断表。否则,将生成主键违规,因为可能存在具有相同密钥的现有数据。