如何修复android中的sqlite中没有这样的列

时间:2015-02-18 06:37:29

标签: android sqlite

我正在创建一个Android应用程序,其中包含使用sqlite的注册和忘记密码字段表单,当我点击忘记密码字段内的重置密码按钮时,我收到一个名为 android.database.sqlite.SQLiteException的错误:没有这样的专栏:SECHINT(代码1): 即使我在表格中创建了一个列,请帮助我这是我的活动:

        forgot_reset = (ButtonFlat)forgot_dialog.findViewById(R.id.dialog_button_Reset_forgot);
            forgot_reset.setOnClickListener(new View.OnClickListener() 
            {

                @Override
                public void onClick(View v) 
                {
                    String stored_sec_hint = loginDataBaseAdapter.getAllTags(dialog_user_name_string);
                    if(confirm_sec_hint_forgot.equals(""))
                    {
                        Toast.makeText(Login_Page.this, "Please enter your security hint to proceed", Toast.LENGTH_LONG).show();
                    }
                    else
                    {
                        if(stored_sec_hint==null)
                        {
                            Toast.makeText(Login_Page.this, "Please Enter correct security hint to proceed", Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            show_pwd.setText(stored_pass);
                        }
                    }
                }
            });

            forgot_dialog.show();
    }

});

这是我的数据库适配器类:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class LoginDataBaseAdapter 
{
        static final String DATABASE_NAME = "login.db";
        static final int DATABASE_VERSION = 1;
        public static final int NAME_COLUMN = 1;
        // TODO: Create public field for each column in your table.
        // SQL Statement to create a new database.
        static final String DATABASE_CREATE = "create table "+"LOGIN"+
                                     "( " +"ID"+" integer primary key autoincrement,"+"USERNAME  text UNIQUE,PASSWORD text,"+"SECHINT text); ";
        // Variable to hold the database instance
        public  SQLiteDatabase db;
        // Context of the application using the database.
        private final Context context;
        // Database open/upgrade helper
        private DataBaseHelper dbHelper;
        public  LoginDataBaseAdapter(Context _context) 
        {
            context = _context;
            dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public  LoginDataBaseAdapter open() throws SQLException 
        {
            db = dbHelper.getWritableDatabase();
            return this;
        }
        public void close() 
        {
            db.close();
        }

        public  SQLiteDatabase getDatabaseInstance()
        {
            return db;
        }

        public void insertEntry(String dialog_user_name_string,String dialog_pasword_string,String dialog_seq_answer)
        {
           ContentValues newValues = new ContentValues();

            newValues.put("USERNAME", dialog_user_name_string);
            newValues.put("PASSWORD",dialog_pasword_string);
            newValues.put("SECHINT", dialog_seq_answer);
            // Insert the row into your table
            db.insert("LOGIN", null, newValues);
            ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
        }
        public int deleteEntry(String dialog_pasword_string)
        {
            //String id=String.valueOf(ID);
            String where="USERNAME=?";
            int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{dialog_pasword_string}) ;
           // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
            return numberOFEntriesDeleted;
        }   
        public String getSinlgeEntry(String dialog_user_name_string)
        {
            Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{dialog_user_name_string}, null, null, null);
            if(cursor.getCount()<1) // UserName Not Exist
            {
                cursor.close();
                return "NOT EXIST";
            }
            cursor.moveToFirst();
            String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
            cursor.close();
            return password;                
        }
        public void  updateEntry(String forgot_new_password_string)
        {
            // Define the updated row content.
            ContentValues updatedValues = new ContentValues();
            // Assign values for each row.
            //updatedValues.put("USERNAME", dialog_user_name_string);
            updatedValues.put("PASSWORD",forgot_new_password_string);


            String where="PASSWORD = ?";
            db.update("LOGIN",updatedValues, where, new String[]{forgot_new_password_string});             
        }

        public String getAllTags(String a) {

            Cursor c = db.rawQuery("SELECT * FROM " + "LOGIN" + " where SECHINT = '" +a + "'" , null);
            String str = null;
            if (c.moveToFirst()) {
            do {
            str = c.getString(c.getColumnIndex("PASSWORD"));
            } while (c.moveToNext());
            }
            return str;
            }


}

这是mylogcat:

02-18 12:07:26.552: E/AndroidRuntime(11605): android.database.sqlite.SQLiteException: no such column: SECHINT (code 1): , while compiling: SELECT * FROM LOGIN where SECHINT = 'null'
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:893)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:504)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1339)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1278)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at com.medequip.c1testpanel.LoginDataBaseAdapter.getAllTags(LoginDataBaseAdapter.java:91)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at com.medequip.c1testpanel.Login_Page$2$1.onClick(Login_Page.java:144)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at com.gc.materialdesign.views.ButtonFlat.onDraw(ButtonFlat.java:83)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.draw(View.java:14728)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13588)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13509)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13509)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13509)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13509)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3226)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13509)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.View.getDisplayList(View.java:13635)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1627)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1506)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2722)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2587)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2210)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6223)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.Choreographer.doCallbacks(Choreographer.java:591)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.Choreographer.doFrame(Choreographer.java:560)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.os.Handler.handleCallback(Handler.java:808)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.os.Handler.dispatchMessage(Handler.java:103)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.os.Looper.loop(Looper.java:193)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at android.app.ActivityThread.main(ActivityThread.java:5292)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at java.lang.reflect.Method.invokeNative(Native Method)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at java.lang.reflect.Method.invoke(Method.java:515)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
02-18 12:07:26.552: E/AndroidRuntime(11605):    at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

只有当您尝试将数据插入到不存在的列中时,才会出现此类错误。可能有两种情况: 1.存在的列和要插入的列不同或名称有问题。 2. DBHelper类的onCreate方法仅在您第一次实例化数据库时运行,并且可能存在表创建不正确的情况。

我建议从您的设备或模拟器中提取数据库并在SQLiteManager上检查它,即mozilla的插件,或者您可以在任何其他设备上进行检查。

要从真实设备中提取数据库,请执行以下操作:

adb shell "run-as package.name chmod 666 /data/data/package.name/databases/file"
adb pull /data/data/package.name/databases/file

通过比较数据库,您肯定会发现问题。