我试图创建一个数据库的功能,这将有助于我与我的学生证。 table_userinfo具有存储在它已经学号,姓名,当然值。 table_users为空接受来自用户的电子邮件,学生ID和密码。我想创造一个存储在table_userinfo可以只注册学生证的功能,否则显示一个错误,学生不存在。用户输入学号也应检索table_userinfo相应的课程和名称。也就是我的权利或不插入值的代码。因为我以前尝试过了,我在第一次插入值线有一个运行错误。
//Code for table creation
public static final String SQL_TABLE_USERS = " CREATE TABLE " +
TABLE_USERS
+ " ( "
+ KEY_ID + " INTEGER PRIMARY KEY, "
+ KEY_EMAIL + " TEXT, "
+ KEY_SID + " INTEGER, "
+ KEY_PASSWORD + " TEXT"
+ " ) ";
//SQL for creating user info table
public static final String SQL_TABLE_USERINFO = " CREATE TABLE "
+ TABLE_USERINFO
+ " ( "
+ KEY_ID + "INTEGER PRIMARY KEY, "
+ KEY_SID + " INTEGER, "
+ KEY_NAME + "TEXT, "
+ KEY_COURSE + " TEXT "
+ " ) ";
public SqliteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//Create Table when oncreate gets called
sqLiteDatabase.execSQL(SQL_TABLE_USERS);
sqLiteDatabase.execSQL(SQL_TABLE_USERINFO);
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO
VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO
VALUES('02','45207160020','Amelia John','FYBCOM')");
更新: - 我有检查现在两个功能,如果邮件存在,如果学生在我的SQLite的代码存在。但是,当我从注册页面调用的函数,应用程序崩溃和日志说,错误是在函数被点击注册按钮时。我分享我的功能和注册页面的代码。请告诉我,如果我做一些错误。我已经尝试不同的组合,用于循环啊,我的注册页面。不工作。但是,如果只放了电子邮件存在的功能,它的工作原理呢。
SQLITE代码
public boolean ifUserInCourse(String sid) {
boolean rv = false;
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getReadableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null, whereclause, whereargs,null,null,null);
if (csr.getCount() > 0) rv = true;
csr.close();
return rv;
}
public boolean isEmailExists(String email) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_USERS,// Selecting Table
new String[]{KEY_ID, KEY_EMAIL, KEY_SID, KEY_PASSWORD},//Selecting columns want to query
KEY_EMAIL + "=?",
new String[]{email},//Where clause
null, null, null);
if (cursor != null && cursor.moveToFirst()&& cursor.getCount()>0) {
//if cursor has value then in user database there is user associated with this given email so return true
return true;
}
//if email does not exist return false
return false;
}
注册码
buttonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (validate()) {
String Email = editTextEmail.getText().toString();
String SID = editTextSID.getText().toString();
String Password = editTextPassword.getText().toString();
progressBar.setVisibility(View.VISIBLE);
//Check in the database is there any user associated with this email
if (!sqliteHelper.ifUserInCourse(SID) && !sqliteHelper.isEmailExists(Email)) {
sqliteHelper.addUser(new User(null, Email, SID, Password));
Snackbar.make(buttonRegister, "User created successfully! Please Login ", Snackbar.LENGTH_LONG).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, Snackbar.LENGTH_LONG);
} else {
if(sqliteHelper.isEmailExists(Email)) {
Snackbar.make(buttonRegister, "Email already exists ", Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(buttonRegister, "User doesn't exists ", Snackbar.LENGTH_LONG).show();
}
}
progressBar.setVisibility(View.GONE);
}
}
});
也就是我的权利或不插入值的代码。因为我以前尝试过了,我在第一次插入值线有一个运行错误。
除非你有public static final String TABLE_USERINFO = "TABLE_USERINFO";
其考虑的近重复的问题是,你不那么
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO TABLE_USERINFO VALUES('02','45207160020','Amelia John','FYBCOM')");
会导致异常,由于找不到表。
我相信你,而不是应该使用: -
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('02','45207160020','Amelia John','FYBCOM')");
此外,您会遇到问题,因为你已经+ KEY_NAME + "TEXT, "
代替+ KEY_NAME + " TEXT, "
(空间略)。
我想创造一个存储在table_userinfo可以只注册学生证的功能,否则显示一个错误,学生不存在。用户输入学号也应检索table_userinfo相应的课程和名称。
下面SqliteHelper.java将有助于上述(考虑到了类似的问题以前提供的答案您的回复)
public class SqliteHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "mydb";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_USERS = "user_reg";
public static final String TABLE_USERINFO = "user_info";
public static final String KEY_ID = BaseColumns._ID;
public static final String KEY_EMAIL = "email";
public static final String KEY_SID = "sid";
public static final String KEY_PASSWORD = "password";
public static final String KEY_NAME = "name";
public static final String KEY_COURSE = "coures";
public static final String SQL_TABLE_USERS = " CREATE TABLE " +
TABLE_USERS
+ " ( "
+ KEY_ID + " INTEGER PRIMARY KEY, "
+ KEY_EMAIL + " TEXT, "
+ KEY_SID + " INTEGER, "
+ KEY_PASSWORD + " TEXT"
+ " ) ";
//SQL for creating user info table
public static final String SQL_TABLE_USERINFO = " CREATE TABLE "
+ TABLE_USERINFO
+ " ( "
+ KEY_ID + "INTEGER PRIMARY KEY, "
+ KEY_SID + " INTEGER, "
+ KEY_NAME + " TEXT, "
+ KEY_COURSE + " TEXT "
+ " ) ";
public SqliteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//Create Table when oncreate gets called
sqLiteDatabase.execSQL(SQL_TABLE_USERS);
sqLiteDatabase.execSQL(SQL_TABLE_USERINFO);
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('01','45207160010','Mary James','TYBSCIT')");
sqLiteDatabase.execSQL("INSERT INTO " + TABLE_USERINFO + " VALUES('02','45207160020','Amelia John','FYBCOM')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public long registerUser(String sid, String email, String password) {
if (email.length() < 1) return -9999;
if (password.length() < 1) return -9998;
if (sid.length() < 1) return -9997;
if (ifUserRegistered(sid)) return -99; // Check if user is already registered
if (!ifUserInCourse(sid)) return -999; // Check if user is enrolled in a course perhpas optional
ContentValues cv = new ContentValues();
cv.put(KEY_SID,sid);
cv.put(KEY_EMAIL,email);
cv.put(KEY_PASSWORD,password);
SQLiteDatabase db = this.getWritableDatabase();
return db.insert(TABLE_USERS,null,cv);
}
public boolean ifUserRegistered(String sid) {
boolean rv = false;
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERS,null,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) rv = true;
csr.close();
return rv;
}
public boolean ifUserInCourse(String sid) {
boolean rv = false;
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.getCount() > 0) rv = true;
csr.close();
return rv;
}
public String getUserNameFromSID(String sid) {
String rv = "";
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(KEY_NAME));
}
csr.close();
return rv;
}
public String getUserCourseFromSID(String sid) {
String rv = "";
String whereclause = KEY_SID + "=?";
String[] whereargs = new String[]{sid};
SQLiteDatabase db = this.getWritableDatabase();
Cursor csr = db.query(TABLE_USERINFO,null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst()) {
rv = csr.getString(csr.getColumnIndex(KEY_COURSE));
}
csr.close();
return rv;
}
}
以上是使用在活动下面的代码进行测试: -
public class MainActivity extends AppCompatActivity {
SqliteHelper mSQLHlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSQLHlpr = new SqliteHelper(this);
long result1 = mSQLHlpr.registerUser("010101010101010101","[email protected]","1234567890");
long result2 = mSQLHlpr.registerUser("45207160010","[email protected]","1234567890");
long result3 = mSQLHlpr.registerUser("45207160010","[email protected]","1234567890");
Log.d(
"RESULTS",
"\tFirst attempt returned " + String.valueOf(result1) + " " + String.valueOf((result1 > 0)) +
"\n\tSecond attempt returned " + String.valueOf(result2) + " " + String.valueOf(result2 > 0) +
"\n\tThird attempt returned " + String.valueOf(result3) + " " + String.valueOf(result3 > 0)
);
String testsid = "45207160010";
Log.d(
"USERBYSID",
"SID " + testsid + " " +
"Has a name of " + mSQLHlpr.getUserNameFromSID(testsid) +
" and a Course of " + mSQLHlpr.getUserNameFromSID(testsid)
);
}
}
上述产生了以下相关的输出: -
2019-02-05 12:38:08.684 21533-21533/? D/RESULTS: First attempt returned -999 false
Second attempt returned 1 true
Third attempt returned -99 false
2019-02-05 12:38:08.686 21533-21533/? D/USERBYSID: SID 45207160010 Has a name of Mary James and a Course of Mary James