我无法将数据插入SQLite,也看不到我的表。 我尝试在DB Browser for SQLite中查看该表,但看不到插入的任何内容,也看不到我创建的行。
DataBaseHelper:
公共类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;
}
}
}
答案 0 :(得分:1)
由于以下事实,您试图在不存在的表中添加条目:您没有在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);
答案 1 :(得分:0)
感谢所有人
问题正在创建表
@Override
public void onCreate(SQLiteDatabase db) {
String createTraineeTable = "create table trainee ("+COL_ID+" integer primary key AUTOINCREMENT ," +
COL_USERNAME+" text not null, "+COL_NAME+" text not null, "+COL_PASS+" text not null,"+COL_EMAIL+" text not null );";
db.execSQL(createTraineeTable);
this.db = db;
}