我无法将数据插入到sqlite,也看不到表。
我试图在db browser中查看sqlite的表,但看不到插入的任何内容,也看不到我创建的行。
数据库帮助程序:
公共类databasehelper扩展了sqliteopenhelper{

// Database Version
public static final int DATABASE_VERSION = 1;
// Database Name
public static final String DATABASE_NAME = "traineeInfo";
// Contacts table name
public static final String TABLE_NAME = "trainee";
// Trainee Table Columns names
public static final String COL_ID = "ID";
public static final String COL_USERNAME = "USERNAME";
public static final String COL_NAME = "NAME";
public static final String COL_PASS = "PASSWORD";
public static final String COL_EMAIL = "EMAIL";
SQLiteDatabase db;

//DataBase Helper
public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

//onCreat
@Override
public void onCreate(SQLiteDatabase db) {
       String CREATE_CONTACTS_TABLE = "create table contacts (id integer primary key not null ," +
            " username text not null, name text not null, email text not null,password text not null );";

    db.execSQL(CREATE_CONTACTS_TABLE);
    this.db = db;
}

//onUpgrade
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    // Creating tables again
    this.onCreate(db);
}

//Adding new trainee
public void addTrainee(Trainee trainee) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    int count = getTraineeCount();

    values.put(COL_ID, count);
    values.put(COL_USERNAME, trainee.getUsername());
    values.put(COL_NAME, trainee.getName());
    values.put(COL_PASS, trainee.getPassword());
    values.put(COL_EMAIL, trainee.getEmail());

    // Inserting Row
    db.insert(TABLE_NAME, null, values);
    db.close();// Closing database connection
}


//Check the match beetwen user data and database
public String searchPassword(String username) {

    //Read data from dataBase
    db = this.getReadableDatabase();



// Getting trainee Count
public int getTraineeCount() {
    String countQuery = "SELECT  * FROM " + TABLE_NAME;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();
    // return count
    return cursor.getCount();
}

}
注册的juinus类:
公共类joinus扩展appcompatactivity{
private static final Pattern PASSWORD_PATTERN =
        Pattern.compile("^" +
                "(?=.*[a-zA-Z])" +      //any letter
                "(?=\\S+$)" +           //no white spaces
                ".{4,}" +               //at least 4 characters
                "$");

//The database helper.
DatabaseHelper myDb;


private TextInputLayout textInputUsername;
private TextInputLayout textInputEmail;
private TextInputLayout textInputName;
private TextInputLayout textInputPassword;
private TextInputLayout textInputConfirmPassword;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_join_us);

    //Creat the databas.
    myDb = new DatabaseHelper(this);

    textInputUsername = findViewById(R.id.etUserName);
    textInputName = findViewById(R.id.etName);
    textInputEmail = findViewById(R.id.etEmail);
    textInputPassword = findViewById(R.id.etPassword);
    textInputConfirmPassword = findViewById(R.id.etConfirmPassword);

    TextView tvLogin = (TextView) findViewById(R.id.tvLogin);

    //onClick on text view juin us for register activity.
    tvLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(JoinUs.this,Login.class);
            startActivity(intent);
            finish();
        }
    });
}


public void confirminput(View v) {
    //If one of the validate retuen false the validation faild.
    if (  !validateEmail() || !validateUsername() || !validateName() || !validatePassword()) {
        Toast.makeText(getApplicationContext(), " Validation NOT OK", Toast.LENGTH_LONG).show();
        return;
    }

    //Inserting Trainee.
    Trainee trainee = new Trainee();
    trainee.setUsername( textInputUsername.getEditText().getText().toString().trim());
    trainee.setName(textInputName.getEditText().getText().toString().trim());
    trainee.setEmail(textInputEmail.getEditText().getText().toString().trim());
    trainee.setPassword(textInputPassword.getEditText().getText().toString().trim());

    //Insert Method data .
    myDb.addTrainee(trainee);


}


//Validate User name.
private boolean validateUsername() {
    String usernameInput = textInputUsername.getEditText().getText().toString().trim();

    if (usernameInput.isEmpty()) {
        textInputUsername.setError("Field can't be empty");
        return false;
    } else if (usernameInput.length() > 15) {
        textInputUsername.setError("Username too long");
        return false;
    } else {
        textInputUsername.setError(null);
        return true;
    }
}

//Validate Email
private boolean validateEmail() {
    String emailInput = textInputEmail.getEditText().getText().toString().trim();

   /*Check if email already exist
    if (checkIfExists(emailInput)) {
        textInputEmail.setError("Email already exist");
        return false;
    }else*/
    if (emailInput.isEmpty()) {
        textInputEmail.setError("Field can't be empty");
        return false;
    } else if (!Patterns.EMAIL_ADDRESS.matcher(emailInput).matches()) {
        textInputEmail.setError("Please enter a valid email address");
        return false;
    } else {
        textInputEmail.setError(null);
        return true;
    }
}

//Validate Name
private boolean validateName() {
    String firstnameInput = textInputName.getEditText().getText().toString().trim();

    if (firstnameInput.isEmpty()) {
        textInputName.setError("Field can't be empty");
        return false;
    } else if (firstnameInput.length() > 15) {
        textInputName.setError("Username too long");
        return false;
    } else {
        textInputName.setError(null);
        return true;
    }
}

//Validate Password
private boolean validatePassword() {
    String passwordInput = textInputPassword.getEditText().getText().toString().trim();
    String confirmPasswordInput = textInputConfirmPassword.getEditText().getText().toString().trim();

    //Check if password & confirm password match
    if (passwordInput.equals(confirmPasswordInput)) {

        if (passwordInput.length() < 4) {
            textInputPassword.setError("Password must contain 4 characters");
            return false;
        }else if (passwordInput.contains(" ")) {
            textInputPassword.setError("No Spaces Allowed");
            return false;
        }else if (!PASSWORD_PATTERN.matcher(passwordInput).matches()) {
            textInputPassword.setError("Password must contain any letter");
            return false;
        }else if (confirmPasswordInput.length() < 4) {
            textInputConfirmPassword.setError("Password must contain 4 characters");
            return false;
        }else if (confirmPasswordInput.contains(" ")) {
            textInputConfirmPassword.setError("No Spaces Allowed");
            return false;
        }else if (confirmPasswordInput.isEmpty()) {
            textInputConfirmPassword.setError("Field can't be empty");
            return false;
        }else if (!PASSWORD_PATTERN.matcher(confirmPasswordInput).matches()) {
            textInputConfirmPassword.setError("Password must contain any letter");
            return false;
        }else {
            textInputConfirmPassword.setError(null);
            textInputPassword.setError(null);
            return true;
        }
    }else {
        textInputConfirmPassword.setError("Password don't match!");
        return false;
    }

}

}

最佳答案

您试图将一个条目添加到一个不存在的表中,因为事实上,您没有在您的onCreate类的DatabaseHelper方法中创建正确的表(联系人)!=学员)。
所以改变这个:

@Override
public void onCreate(SQLiteDatabase db) {
       String CREATE_CONTACTS_TABLE = "create table contacts (id integer primary key not null ," +
            " username text not null, name text not null, email text not null,password text not null );";

    db.execSQL(CREATE_CONTACTS_TABLE);
    this.db = db;
}

到:
@Override
public void onCreate(SQLiteDatabase db) {
       String createTraineeTable = "create table trainee (id integer primary key not null ," +
            " username text not null, name text not null, email text not null,password text not null );";

    db.execSQL(createTraineeTable);
    this.db = db;
}

此外,我建议您格式化字符串并使用您定义的常量来防止此类错误。例如:
String createTraineeTable = String.format("create table %s (%s integer primary key not null, %s text not null, %s text not null, %s text not null, %s text not null", TABLE_NAME , COL_ID, COL_USERNAME, COL_NAME, COL_PASS, COL_EMAIL);

关于java - 我看不到数据,也看不到我的 table 创建的sqlite,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52586045/

10-12 06:09