db.insert函数只在表中插入一个自动递增的ID而没有其他内容,但我从活动编辑文本中获取值。表格行的其余单元格保持空白
这是我的代码:
public class SHelper extends SQLiteOpenHelper {
static final String dbName = "School";
static final String studentTable = "Student";
static final String colName = "Name";
static final String colPassword = "Password";
public static final int dbVersion=1;
public SHelper(Context context)
{
super(context, dbName, null, dbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+studentTable+"("+colID+" INTEGER PRIMARY KEY, "+colName+" TEXT,"+colPassword+" TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + studentTable);
onCreate(db);
}
public void add(StudentData studentdata)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(colName, StudentData.getName());
values.put(colPassword, StudentData.getPassword());
db.insert(studentTable, null, values);
db.close();
}
}
public class StudentData {
private static String name;
private static String password;
public StudentData() {
super();
}
public StudentData(String name,String password) {
super();
StudentData.name = name;
StudentData.password = password;
}
public static String getName() {
return name;
}
public void setName(String name) {
StudentData.name = name;
}
public static String getPassword() {
return password;
}
public void setPassword(String password) {
StudentData.password = password;
}
}
public class stoActivity extends Activity {
SHelper db = new SHelper(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sto);
final EditText fullname=(EditText)findViewById(R.id.fullName);
final EditText password=(EditText)findViewById(R.id.password);
final String fullname=fullname.getText().toString();
final String password=password.getText().toString();
Button registerbutton = (Button) findViewById(R.id.registerButton);
registerbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
db.add(new StudentData(fullname,password));
Intent it=new Intent(stoActivity.this,otherActivity.class);
stoActivity.this.startActivity(it);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_register, menu);
return true;
}
}
答案 0 :(得分:1)
你的问题是:
public void add(*StudentData studentdata)
{
...
values.put(colName, *StudentData.getName());
values.put(colPassword, *StudentData.getPassword());
...
}
你能看到吗?您的陈述是指签名的错误部分。您需要将方法正文中的StudentData
更改为小写studentdata
,以匹配作为参数传递给方法的内容。这种非法行为是通过编译的,因为你在我不确定是必要的地方有静态修饰符,例如。 getName()
和getPassword()
方法。
答案 1 :(得分:0)
使用AutoIncrement键创建表,因此将onCreate方法更改为以下内容:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+studentTable+"("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+colName+" TEXT,"+colPassword+" TEXT);");
}
答案 2 :(得分:0)
您没有为已声明为主键的列插入任何值。
答案 3 :(得分:0)
这只是一个假设,但如果我想在db中保存数据,我遇到了类似的问题。在db.execSQL的onCreate-Method中,逗号后面有空白 - > “INTEGER PRIMARY KEY”。我知道SQLite对这种输入非常敏感,你必须完全看空白,逗号或任何其他输入。