Android 表教师没有名为First\u Name的列。。。向SQLite插入值时
尝试插入包含用户类型“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代码如下所示: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)表教师没有
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构建。我是否可以提供任何有帮助的进一步信息/代码?