java - 我看不到数据,也看不到我创建的 sqlite 表

标签 java database sqlite android-studio

我无法将数据插入 SQLite,也看不到我的表。 我尝试在 DB Browser for SQLite 中查看表格,但我看不到任何插入的内容,也看不到我创建的行。

数据库助手:

公共(public)类 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类:

公共(public)类 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;
    }

}

最佳答案

您正在尝试向一个不存在的表添加条目,因为您没有在 DatabaseHelperonCreate 方法中创建正确的表> 类(class)(联系人!= 实习生)。

所以改变这个:

@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 - 我看不到数据,也看不到我创建的 sqlite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586045/

相关文章:

用于管理数据库外部的 BLOB 数据的 Java 框架

database - PostgreSQL中表锁和行锁是如何交互的?

sqlite:添加新列后如何用值填充新列?

java - 如果 Java 不支持参数化类型数组,Arrays.asList() 如何使用它们?

java - 什么是链式矩阵乘法?

database - 如何将正在使用的数据库复制到django中的其他数据库?

php - 避免电子商务场景中的竞争条件

python - 是什么阻止用户插入表中?

python - 带有批量插入的 peewee 进入 sqlite db 非常慢

java - PhantomJS 和 Selenium Webdriver - 如何清除 session