在我的程序中,我有一个数据库,我的数据库中有一个学生名称的表。在学生表中,有一个名为StudentID的列,现在应该保存十个数字我的问题是学生ID列无法保存数字,当我输入小于10的数字时,它显示保存信息,但是在logcat中有错误,当我输入10个数字时,它将从程序中输出。
抱歉我的英语不好。
学生表的SQLite代码:
create table student(student_id integer(10) primary key not null , class_id int , student_name nvarchar(50) , FOREIGN KEY (class_id) REFERENCES class(class_id))
保存学生方法:
public void SaveStudent(int studentId , int classID , String studentName)
{
ContentValues values = new ContentValues();
values.put("student_id" , studentId);
values.put("class_id" , classID);
values.put("student_name" , studentName);
database.insert("student" , null , values);
Toast.makeText(context, "Save!" , Toast.LENGTH_SHORT).show();
}
获取学生信息:
Button saveStudent_btn = (Button)viewLayout.findViewById(R.id.item_btn_SaveStudent);
saveStudent_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HashMap<String, Object> obj = (HashMap<String, Object>) adapter.getItem(position);
int classId = (int) obj.get("class_id");
EditText studentName_et = (EditText)viewLayout.findViewById(R.id.item_et_StudentName);
String studentName = studentName_et.getText().toString();
EditText studentId_et = (EditText)viewLayout.findViewById(R.id.item_et_StudentId);
int studentId = Integer.parseInt(studentId_et.getText().toString());
database.OpenDatabase();
database.SaveStudent(studentId , classId , studentName);
database.close();
}
});
输入10个数字时的Logcat错误:
02-23 19:05:07.850 1896-1896/com.example.user.classmanager E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.classmanager, PID: 1896
java.lang.NumberFormatException: Invalid int: "4318659489"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:413)
at java.lang.Integer.parseInt(Integer.java:367)
com.example.user.classmanager.SecondTab$1$1$1.onClick(SecondTab.java:94)
at android.view.View.performClick(View.java:5225)
at android.view.View$PerformClick.run(View.java:21195)
at android.os.Handler.handleCallback(Handler.java:739)
少于10个数字的logcat错误:
02-23 19:42:32.502 10388-10388/com.example.user.classmanager E/SQLiteDatabase: Error inserting
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: student.student_id (code 1555)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:780)
at com.example.user.classmanager.DatabaseHandler.SaveStudent(DatabaseHandler.java:189)
at com.example.user.classmanager.SecondTab$1$1$1.onClick(SecondTab.java:97)
答案 0 :(得分:2)
问题是int
的长度,你的号码溢出了。
请改用Long
。
Long studentId = Long.parseLong(studentId_et.getText().toString());
int
java范围从-2,147,483,648到2,147,483,647。而且你的号码溢出来了。
对于UNIQUE constraint failed
,您违反了主键约束。确保生成的id是唯一的,并且始终不为null。
答案 1 :(得分:1)
UNIQUE constraint failed
这意味着您正在尝试插入已存在且已违反主键唯一性的ID值,以使StudentID
自动递增。