【问题标题】:Changing Password - Update SQLite Database - No Such Column更改密码 - 更新 SQLite 数据库 - 没有这样的列
【发布时间】:2016-07-30 19:46:38
【问题描述】:

我写了一个类,我想更改用户的密码。除了它说没有这样的列之外,我已经把它全部设置好了,即使我已经将数据输入到与之匹配的数据库中,并且“C3438525”用于登录(它成功地显示它在数据库中很好) )

我尝试了几种不同格式的 SQL 语句,但没有结果

这是课程,如果需要其他任何内容,请询问,我会粘贴它们。

changePassword.java

public class changePassword extends Activity {  

    SQLiteDatabase checkDB;
    DB db = new DB(this);   
    //Load session name 
    String sessionName;
    String sessionPassword;
    String currentPasswordString;
    String newPassword1String;
    String newPassword2String;
    //Load text fields
    EditText currentPassword;
    EditText newPassword1;
    EditText newPassword2;  

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.changepassword);
        Button changePassword = (Button)findViewById(R.id.changePasswordButton);
        //Load session name
        SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
        sessionName = preferences.getString("sessionName", ""); 
        sessionPassword = preferences.getString("sessionPassword", ""); 
        currentPassword = (EditText)findViewById(R.id.currentPassword);
        newPassword1 = (EditText)findViewById(R.id.newpassword1);       
        newPassword2 = (EditText)findViewById(R.id.newpassword2);   
    }

    //Mismatched password checking
    public void updatePassword(View v)
    {       
        currentPasswordString = currentPassword.getText().toString();
        newPassword1String = newPassword1.getText().toString();
        newPassword2String = newPassword2.getText().toString();
        Toast.makeText(changePassword.this, sessionName.toString(), Toast.LENGTH_LONG).show();
        Toast.makeText(changePassword.this, newPassword2String.toString(), Toast.LENGTH_LONG).show();
        if (currentPasswordString.equals(sessionPassword))
        {
            if (newPassword1String.equals(newPassword2String))
            {
            checkDB = db.getWritableDatabase();
            checkDB.execSQL("UPDATE Students SET Student_Password=" + newPassword2String + " WHERE CNumber= " + sessionName);
            Log.d("Password", "Changed");
            }
        }
    }

LogCat:

04-09 10:40:23.895: E/AndroidRuntime(2144): FATAL EXCEPTION: main
04-09 10:40:23.895: E/AndroidRuntime(2144): Process: com.example.project, PID: 2144
04-09 10:40:23.895: E/AndroidRuntime(2144): java.lang.IllegalStateException: Could not execute method of the activity
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.view.View$1.onClick(View.java:3823)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.view.View.performClick(View.java:4438)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.view.View$PerformClick.run(View.java:18422)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.os.Handler.handleCallback(Handler.java:733)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.os.Looper.loop(Looper.java:136)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.app.ActivityThread.main(ActivityThread.java:5001)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at dalvik.system.NativeStart.main(Native Method)
04-09 10:40:23.895: E/AndroidRuntime(2144): Caused by: java.lang.reflect.InvocationTargetException
04-09 10:40:23.895: E/AndroidRuntime(2144):     at java.lang.reflect.Method.invokeNative(Native Method)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at java.lang.reflect.Method.invoke(Method.java:515)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.view.View$1.onClick(View.java:3818)
04-09 10:40:23.895: E/AndroidRuntime(2144):     ... 11 more
04-09 10:40:23.895: E/AndroidRuntime(2144): Caused by: android.database.sqlite.SQLiteException: no such column: C3438525 (code 1): , while compiling: UPDATE Students SET Student_Password=1234 WHERE CNumber=C3438525
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
04-09 10:40:23.895: E/AndroidRuntime(2144):     at com.example.project.changePassword.updatePassword(changePassword.java:64)
04-09 10:40:23.895: E/AndroidRuntime(2144):     ... 14 more

【问题讨论】:

  • 在 UPDATE 语句中的 sessionName 周围设置 '..'
  • 还有newPassword2String
  • 您是否再次尝试卸载?
  • @Rasel 它与添加新列无关。这只是一个常见的 SQL 语法错误。
  • 不要在方法之外启动你的变量:DB db = new DB(this);而是将其移至您的 onCreate() 方法

标签: java android sql eclipse sqlite


【解决方案1】:

一些选项:

  • 尝试在 SQL 语句中的值中添加单引号,例如:

... SET Student_Password='1234' WHERE ...

  • 您可能最近对数据库架构进行了更改,请尝试将 DBHelper 中的数据库版本增加一(或在您正在使用的设备中重新安装应用程序)。

  • 检查 create 语句并验证列名和类型。

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多