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

时间:2018-02-23 16:40:32

标签: android database performance sqlite android-sqlite

在我的程序中,我有一个数据库,我的数据库中有一个学生名称的表。在学生表中,有一个名为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)

2 个答案:

答案 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自动递增。