Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 表教师没有名为First\u Name的列。。。向SQLite插入值时_Android_Sqlite_Insert - Fatal编程技术网

Android 表教师没有名为First\u Name的列。。。向SQLite插入值时

Android 表教师没有名为First\u Name的列。。。向SQLite插入值时,android,sqlite,insert,Android,Sqlite,Insert,尝试插入包含用户类型“teacher”的用户信息的行时,出现以下错误。我相信这个错误与TeacherDAOtest类中addTeacher()方法的insert有关,因为它的值为-1。然而,我无法找出原因。请你帮我解决这个问题好吗 logcat给出以下错误: 12-1722:02:46.896:I/System.out(669):创建表教师(用户ID) 文本主键不为空,名字文本不为空,姓氏文本不为空 无效); 12-1722:02:46.896:E/SQLiteLog(669):(1)表教师没有

尝试插入包含用户类型“teacher”的用户信息的行时,出现以下错误。我相信这个错误与TeacherDAOtest类中addTeacher()方法的insert有关,因为它的值为-1。然而,我无法找出原因。请你帮我解决这个问题好吗

logcat给出以下错误:

12-1722:02:46.896:I/System.out(669):创建表教师(用户ID) 文本主键不为空,名字文本不为空,姓氏文本不为空 无效); 12-1722:02:46.896:E/SQLiteLog(669):(1)表教师没有名为First_Name的列 12-17 22:02:46.936:E/SQLiteDatabase(669):插入First_Name=help User_ID=hepl220246 Name=please时出错 12-17 22:02:46.936:E/SQLiteDatabase(669):android.database.sqlite.SQLiteException:表教师没有名为First_Name(代码1)的列,编译时:插入教师(First_Name,User_ID,姓氏)值(?,?) 12-17 22:02:46.936:E/SQLiteDatabase(669):位于android.database.sqlite.SQLiteConnection.nativepreparest陈述(Native) (方法)

22:02:46.936:E/SQLiteDatabase(669):位于dalvik.system.NativeStart.main(本机方法) 12-1722:02:46.946:E/SQLiteLog(669):(1)没有这样的列:User\u ID 12-1722:02:46.946:D/AndroidRuntime(669):关闭虚拟机 12-17 22:02:46.946:W/dalvikvm(669):threadid=1:线程退出时出现未捕获异常(组=0x40a13300) 12-1722:02:46.986:E/AndroidRuntime(669):致命异常:main 12-17 22:02:46.986:E/AndroidRuntime(669):android.database.sqlite.SQLiteException:没有这样的列:User_ID(代码 1) :,编译时:从中选择用户名、姓氏 教师,其中用户_ID=-1 12-1722:02:46.986:E/AndroidRuntime(669):

helper类中的SQL代码如下所示:

   public static final String USER_ID = "User_ID";
    public static final String FNAME = "First_Name";
    public static final String SNAME = "SurName"; 
    public static final String TABLE_TEACHER = "Teacher";

public static final String SQL_CREATE_TABLE_TEACHER = "CREATE TABLE "+ TABLE_TEACHER+"("
            +USER_ID +" TEXT PRIMARY KEY NOT NULL,"  
            +FNAME + " TEXT NOT NULL,"
            +SNAME + " TEXT NOT NULL"
            +");";

public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_TABLE_TEACHER);
    }
这是模型类减去为用户创建用户Id的方法,我相信这不是问题的根源,但您可能希望看到它以防万一: *编辑:前3个私有方法的getter和setter也不会粘贴在下面,而是遵循通常的约定

public class RegisterTeacherActivity extends Activity {
    EditText firstNameInput;
    EditText surnameInput;
    private String firstName;
    private String surname;
    private String userID;
    private String teacherID;
    Button registerTeacherBtn;
    Context ctx = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_teacher);
        firstNameInput = (EditText) findViewById(R.id.teacherFname);
        surnameInput = (EditText) findViewById(R.id.teacherSname);
        registerTeacherBtn = (Button) findViewById(R.id.registerTeacherBtn);
        registerTeacherBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                firstName = firstNameInput.getText().toString();
                surname = surnameInput.getText().toString();
                teacherID = createUserID(firstName, surname);
                TeacherDAOtest newTeacher = new TeacherDAOtest(ctx);
                newTeacher.addTeacher(teacherID, firstName, surname);
                Toast.makeText(getBaseContext(), "Registration Sucessful \n your userID is: ".concat(teacherID) , Toast.LENGTH_LONG).show();
                finish();
            }
        });
    }
这是dao类:

public class TeacherDAOtest {

    public static final String TAG = "TeacherDAOtest";

        // Database fields
        private SQLiteDatabase test;
        private DBHelperTest dbHelper;
        private Context context;
        private String[] allColumns = { DBHelperTest.USER_ID, DBHelperTest.FNAME,
                DBHelperTest.SNAME};

        public TeacherDAOtest(Context context) {
            this.context = context;
            dbHelper = new DBHelperTest(context);
            // open the database
            try {
                open();
            } catch (SQLException e) {
                Log.e(TAG, "SQLException on opening database " + e.getMessage());
                e.printStackTrace();
                Dialog d = new Dialog(context);
                d.setTitle(TAG + " database failed to open");
                TextView tv = new TextView(context);
                tv.setText(TAG + " database failed to open");
                d.setContentView(tv);
                d.show();
            }
        }
        public void open() throws SQLException {
            this.test = dbHelper.getWritableDatabase();
        }

        public void close() {
            dbHelper.close();
        }

        protected RegisterTeacherActivity cursorToTeacher(Cursor cursor){
            RegisterTeacherActivity teacher = new RegisterTeacherActivity(); 
            teacher.setUserID(cursor.getString(0));
            teacher.setFirstName(cursor.getString(1));
            teacher.setSurname(cursor.getString(2));
            return teacher;
        }

        public RegisterTeacherActivity addTeacher(String userID, String firstName, String lastName) { 
            System.out.println(DBHelperTest.SQL_CREATE_TABLE_TEACHER);
            ContentValues values = new ContentValues();
            values.put(DBHelperTest.USER_ID, userID);
            values.put(DBHelperTest.FNAME, firstName);
            values.put(DBHelperTest.SNAME, lastName);
            long insertID = this.test.insert(
                    DBHelperTest.TABLE_TEACHER, null, values);
            Cursor cursor = this.test.query(DBHelperTest.TABLE_TEACHER, allColumns,
                    DBHelperTest.USER_ID + " = " + insertID, null, null, null, null);
            cursor.moveToFirst();
            RegisterTeacherActivity newTeacher = cursorToTeacher(cursor);
            cursor.close();
            return newTeacher;
        }

这两个错误现在都解决了

我意识到在addTeacher()方法的末尾有一些错误的代码。 此方法现已更改为“无效”,并已简化

public void addTeacher(String userID, String firstName, String lastName) {
        System.out.println(DBHelperTest.SQL_CREATE_TABLE_TEACHER);
        ContentValues values = new ContentValues();
        values.put(DBHelperTest.USER_ID, userID);
        values.put(DBHelperTest.FNAME, firstName);
        values.put(DBHelperTest.SNAME, lastName);
        test.insert(DBHelperTest.TABLE_TEACHER, null, values);
    }
以上解决了使我的应用程序崩溃的致命异常

第二个问题是DAO类中的insert等于-1。 由于我无法理解的原因,通过更改数据库的名称解决了这个问题。 insert现在等于3,并且正确插入了行


感谢您的评论

卸载然后安装您的应用程序,看看它是否工作。如果您在开发期间更改了架构,您可以从设置中清除数据,或者卸载然后安装一次。。如果scema更改是跨商业版本的(不是在开发过程中),请确保升级逻辑编写正确。谢谢各位,它当前在eclipse emulator上运行,而不是安装在实际设备上。有没有一个等效的方法我可以尝试呢?我也在为安卓4.1构建。我是否可以提供任何有帮助的进一步信息/代码?