如何将整数保存到数据库(SQLite)



在我的程序中,我有一个数据库,我的数据库中有一个以学生名义的表,在学生表中有一个名为StudentID的列应该保存十个数字现在我的问题是学生ID列无法保存数字,当我输入小于十的数字时它显示保存消息,但是在logcat中出现错误,当我输入十个数字时, 它将退出程序。

对不起,我的英语很差。

学生表的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)

问题是int的长度,你的号码溢出。 请改用Long

Long  studentId = Long.parseLong(studentId_et.getText().toString());
int

爪哇中的范围从 -2,147,483,648到 2,147,483,647 . 你的号码溢出了它.

对于UNIQUE constraint failed,您违反了主键约束。确保生成的 id 是唯一的,而不是始终为 null。

UNIQUE constraint failed

这意味着您正在尝试插入已经存在并且违反主键唯一性的 id 值。到使StudentID自动增量的空隙。

最新更新