[android.database.sqlite.SQLiteException:无此类列或名称

问题描述 投票:0回答:1

当我运行我的应用程序时,它没有显示此类列。我想更新我的应用程序中的教师资料。我已经更改了database_name,table_name,column_name并分别签出了所有内容,我不知道更新查询出了什么问题,请帮忙,我在更新查询时总是会收到此错误什么是最好的解决方案以及替代的解决方案]

提前感谢

public class DatabaseTeacher extends SQLiteOpenHelper {

    public static final String databasename="Teacher";

    public static final String Teacher_table="Teacher_table";

    public static final String Teacher_name="Name";
    public static final String Teacher_Email_ID="Email";
    public static final String Teacher_Password="Password";
    public static final String Teacher_Confirm_Password="ConfirmPassword";
    public static final String Teacher_Phone_number="Phone";
    public static final String Teacher_Branch="Branch";
    public static final String Teacher_Subject="Subject";
    public static final int versioncode=1;

    public DatabaseTeacher(Context context){
        super(
                context,
                databasename,
                null,
                versioncode);
    }
    @Override
    public void onCreate(SQLiteDatabase database) {

        String teacher_query;
        teacher_query="CREATE TABLE IF NOT EXISTS "+Teacher_table+"(Name TEXT,Email TEXT PRIMARY KEY,Password TEXT,ConfirmPassword TEXT,Phone TEXT,Branch TEXT,Subject TEXT)";
        database.execSQL(teacher_query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {

        String teacher_query;
        teacher_query= "DROP TABLE IF EXISTS " + Teacher_table;
        database.execSQL(teacher_query);

    }

    public boolean Teacher_Data(String Name,String Email,String Password,String ConfirmPassword,String Phone,String Branch,String Subject){
        SQLiteDatabase db1=this.getWritableDatabase();
        ContentValues cv=new ContentValues();

        cv.put(Teacher_name,Name);
        cv.put(Teacher_Email_ID,Email);
        cv.put(Teacher_Password,Password);
        cv.put(Teacher_Confirm_Password,ConfirmPassword);
        cv.put(Teacher_Phone_number,Phone);
        cv.put(Teacher_Branch,Branch);
        cv.put(Teacher_Subject,Subject);

        long result=db1.insert(Teacher_table,null,cv);
        if(result==-1)
            return false;
        else
            return true;
    }
    public Cursor TeacherData()
    {
        SQLiteDatabase db1=this.getWritableDatabase();
        Cursor res = db1.rawQuery("select * from "+Teacher_table,null);
        return res;
    }
 public Boolean update(String Name,String Email,String Password,String ConfirmPassword,String Phone,String Branch,String Subject){

        ContentValues args= new ContentValues();
        args.put(Teacher_name,Name);
        args.put(Teacher_Email_ID,Email);
        args.put(Teacher_Password,Password);
        args.put(Teacher_Confirm_Password,ConfirmPassword);
        args.put(Teacher_Phone_number,Phone);
        args.put(Teacher_Branch,Branch);
        args.put(Teacher_Subject,Subject);


        SQLiteDatabase db = this.getWritableDatabase();
        int res = db.update(Teacher_table,args,Teacher_name + "=" + Name,null);
        return res>0;

    }

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_teacher_profile);


         editname=findViewById(R.id.teachername);
         editemail=findViewById(R.id.teacheremail);
         editpassword=findViewById(R.id.teacherpassword);
         editconfirm=findViewById(R.id.teacherconfirm);
         editphone=findViewById(R.id.teacherphone);
         editbranch=findViewById(R.id.teacherbranch);
         editsubject=findViewById(R.id.teachersubject);
         btnteacherupdate=findViewById(R.id.btnteacherupdate);

        dbh = new DatabaseTeacher(getApplicationContext());
        sqLiteDatabase=dbh.getReadableDatabase();
        res=dbh.TeacherData();

        if(res.moveToFirst())
        {
            do{
                String name,email,password,confirm,phone,branch,subject;

                name= res.getString(0);
                email=res.getString(1);
                password=res.getString(2);
                confirm=res.getString(3);
                phone=res.getString(4);
                branch=res.getString(5);
                subject=res.getString(6);


                editname.setText(name);
                editemail.setText(email);
                editpassword.setText(password);
                editconfirm.setText(confirm);
                editphone.setText(phone);
                editbranch.setText(branch);
                editsubject.setText(subject);


            }while(res.moveToNext());
        }


        btnteacherupdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try{
                    String name=  editname.getText().toString().trim();
                    String email=  editemail.getText().toString().trim();
                    String password= editpassword.getText().toString().trim();
                    String confirm= editconfirm.getText().toString().trim();
                    String phone =editphone.getText().toString().trim();
                    String branch=editbranch.getText().toString().trim();
                    String subject=editsubject.getText().toString().trim();




                    //Save into DBS
                    dbh.update(name,email,password,confirm,phone,branch,subject);

                    Toast.makeText(TeacherProfileActivity.this, "Modified Successfully", Toast.LENGTH_SHORT).show();
                    dbh.close();
                    startActivity(new Intent(TeacherProfileActivity.this, StudentHomeActivity.class));
                    finish();

                }catch (Exception e){

                    e.printStackTrace();
                }

            }
        });
    }
}

logcat

W/System.err: android.database.sqlite.SQLiteException: no such column: Hshs (Sqlite code 1 SQLITE_ERROR): , while compiling: UPDATE Teacher_table SET Email=?,Phone=?,Branch=?,Subject=?,Name=?,Password=?,ConfirmPassword=? WHERE Name=Hshs, (OS error - 11:Try again)
W/System.err:     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:948)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:559)
W/System.err:     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:603)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:63)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1969)
        at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1912)
        at com.example.collegecongruency.Database.DatabaseTeacher.update(DatabaseTeacher.java:102)
        at com.example.collegecongruency.TeacherProfileActivity$1.onClick(TeacherProfileActivity.java:89)
        at android.view.View.performClick(View.java:6659)
        at android.view.View.performClickInternal(View.java:6631)
W/System.err:     at android.view.View.access$3100(View.java:790)
        at android.view.View$PerformClick.run(View.java:26187)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
android-studio android-edittext sql-update android-sqlite multiple-columns
1个回答
0
投票

使用:-

int res = db.update(Teacher_table,args,Teacher_name + "='" + Name + "',null);

或更佳的:-

int res = db.update(Teacher_table,args,Teacher_name + "=?",new String[]{name});
  • 后者将引号引起来,并防止SQLInjection攻击。
© www.soinside.com 2019 - 2024. All rights reserved.