Как создать приложение CRUD для Android, используя базу данных SQLite, HashMap и HashSet для выполнения операций crud

Я начал программировать с некоторыми базовыми идеями и создал класс Student для создания хэш-карты объектов для выполнения вставки и обновления. Ниже показан класс с именем DatabaseHelper для выполнения операций и основной деятельности SQLite.

Student.java — это класс, в котором такие переменные, как номер броска, имя студента, стандарт, курс и процент, а также параметризованный конструктор со всеми переменными.

 package com.app.myapplication.Model;
    import java.io.Serializable;

    public class Student implements Serializable {
       public String rollNo;
       public String studentName;
       public String standard;
       public String course;
       public String CGPA;

       public Student(String rollNo, String studentName, String standard,String course, String CGPA) {
        this.rollNo = rollNo;
        this.studentName = studentName;
        this.standard = standard;
        this.course = course;
        this.CGPA = CGPA;
    }}

MainActivity.java

    public class MainActivity extends AppCompatActivity {

    private DatabaseHelper db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        db= new DatabaseHelper(MainActivity.this);
        HashMap<String,Student> map=new HashMap<String,Student>();
        Student student1 = new Student("101","Linet","XII","Commerce","89%");
        map.put("1",student1);
        Boolean insert_student_details = db.InsertStudentDetails(map);
        if(insert_student_details){
            Log.v("Success msg","Student details insertion success");
        }else{
            Log.v("Failure msg","Student details insertion failed");
        }
    }
    }

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 4;
    SQLiteDatabase database;
    String TBL_STUDENT = "tbl_student";

    public DatabaseHelper(@Nullable Context context) {
        super(context, "studentDb", null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "  +TBL_STUDENT+ "(id INTEGER PRIMARY KEY "+" AUTOINCREMENT,rollNo TEXT,studentName TEXT,standard TEXT,course TEXT,subject TEXT,CGPA TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TBL_STUDENT);
        onCreate(db);

    }
    
    public Boolean InsertStudentDetails(HashMap<String,Student> studentMap) {
        long result = 0;
        database = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        for(HashMap.Entry<String,Student> entry : studentMap.entrySet()) {
            String key=entry.getKey();
            Student student = entry.getValue();
            contentValues.put(key, student.rollNo);
            contentValues.put(key, student.studentName);
            contentValues.put(key, student.standard);
            contentValues.put(key, student.course);
            contentValues.put(key, student.CGPA);
            Log.v("msg", "rollNo:"+student.rollNo);
            Log.v("msg", "studentName:"+student.studentName);
            Log.v("msg", "standard:"+student.standard);
            Log.v("msg", "course:"+student.course);
            Log.v("msg", "CGPA:"+student.CGPA);

            result = database.insert("tbl_student", null, contentValues);
           // result = database.insert(TBL_STUDENT,null, contentValues);
        }

        
        if (result == -1) {
            Log.v("msg", "Failed");
            //Remove_all_values_in_the_table_request();
            return false;
        } else {
            Log.v("msg", "Success");
            return true;
        }
    }
    public boolean updateStudent(HashMap<String,Student> studentMap,String rollNo){
        database = this.getReadableDatabase();
        long res = 0;
        Log.v("tbl_interval_timer", "rollNo   " + rollNo);
        String query = "select * from " + TBL_STUDENT + " where rollNo ='" + rollNo + "'";
        Cursor cursor = database.rawQuery(query, null);
        int count = cursor.getCount();
        if(count>0) {
            Log.v("msg", "Data exist");
            ContentValues contentValues = new ContentValues();
            for(HashMap.Entry<String,Student> entry : studentMap.entrySet()) {
                String key = entry.getKey();
                Student student = entry.getValue();
                contentValues.put(key, student.rollNo);
                contentValues.put(key, student.studentName);
                contentValues.put(key, student.standard);
                contentValues.put(key, student.course);
                contentValues.put(key, student.CGPA);
                Log.v("msg", "rollNo:" + student.rollNo);
                Log.v("msg", "studentName:" + student.studentName);
                Log.v("msg", "standard:" + student.standard);
                Log.v("msg", "course:" + student.course);
                Log.v("msg", "CGPA:" + student.CGPA);
                res = database.update(TBL_STUDENT, contentValues, "rollNo = ? ",
                        new String[]{String.valueOf(rollNo)});
            }
            if (res == -1) {
                Log.v("updateCyclicTimer msg", "Failed");
                //Remove_all_values_in_the_table_request();
                return false;
            } else {
                Log.v("updateCyclicTimer msg", "Success");
                return true;
            }
        }else{
            Log.v("updateCyclicTimer msg", "Data does not exist");
            return false;
        }

    }

    }

Я получаю ошибки, как показано ниже.

com.app.myapplication E/SQLiteLog: (1) near "1": syntax error in "UPDATE tbl_student SET 1=? WHERE rollNo = ?"
android.database.sqlite.SQLiteException: near "1": syntax error (code 1 SQLITE_ERROR): , while 
compiling: UPDATE tbl_student SET 1=? WHERE rollNo = ?
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)

E/SQLiteLog: (1) near "1": syntax error in "INSERT INTO tbl_student(1) VALUES (?)"
E/SQLiteDatabase: Error inserting 1=89%
android.database.sqlite.SQLiteException: near "1": syntax error (code 1 SQLITE_ERROR): , while compiling: INSERT INTO tbl_student(1) VALUES (?)

Как это решить?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
map.put("1",student1); 
Boolean insert_student_details = db.InsertStudentDetails(map);

String key=entry.getKey();  // Is always 1 
Student student = entry.getValue();
Student student = entry.getValue();
contentValues.put(key, student.rollNo);
contentValues.put(key, student.studentName);
contentValues.put(key, student.standard);
contentValues.put(key, student.course);
contentValues.put(key, student.CGPA);

Когда вы добавляете что-то в свой contentValues, вам нужно ввести имя столбца вместо ключа, поэтому ваш оператор SQL будет выглядеть примерно так: insert into table_student(1,1,1,1,1) values (...) но он должен выглядеть так insert into table_student(rollNo,studentName,standard,course,CGPA) values (...)

Сделайте это как-то так в вашем методе обновления и вставки:

map.put("1",student1); 
Boolean insert_student_details = db.InsertStudentDetails(map);

String key=entry.getKey();  // Is always 1 
Student student = entry.getValue();
Student student = entry.getValue();
contentValues.put('rollNo', student.rollNo);  
contentValues.put('studentName', student.studentName);
contentValues.put('standard', student.standard);
contentValues.put('course', student.course);
contentValues.put('CGPA', student.CGPA);

Я не знаю имен ваших столбцов, поэтому предположил, что это рулонНет, имя студента, стандартный, курс и CGPA.

Другие вопросы по теме