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 db.insert仅在数据库中存储自动递增的id_Android_Sqlite - Fatal编程技术网

Android db.insert仅在数据库中存储自动递增的id

Android db.insert仅在数据库中存储自动递增的id,android,sqlite,Android,Sqlite,db.insert函数只在表中插入一个自动递增的ID,而不插入其他内容,尽管我从活动编辑文本中获取值。表行的其余单元格保持为空 这是我的密码: public class SHelper extends SQLiteOpenHelper { static final String dbName = "School"; static final String studentTable = "Student"; static final String colName = "N

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;
    }
}

使用自动增量键创建表,因此将方法onCreate更改为以下内容:

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "+studentTable+"("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+colName+" TEXT,"+colPassword+" TEXT);");

    }

您没有为声明为主键的列插入任何值

这只是一个假设,但如果我想在db中保存数据,我也会遇到类似的问题。在db.execSQL的onCreate方法中,逗号-->“INTEGER主键”后面有一个空格。我知道SQLite对此类输入非常敏感,您必须仔细查看空格、逗号或任何其他输入

这是你的问题:

public void add(*StudentData studentdata) 
    {
        ...    
        values.put(colName, *StudentData.getName()); 
        values.put(colPassword, *StudentData.getPassword());
        ...
    }

你能看见吗?你的陈述是指签名的错误部分。您需要将方法主体中的
StudentData
更改为小写
StudentData
,以匹配作为参数传递给方法的内容。这种非法行为被编译了,因为在我不确定是否有必要的地方有静态修饰符,例如
getName()
getPassword()
方法。

它会引发任何异常吗?