通过在Android中创建对象,使用sqlite数据库验证登录
我正在尝试开发一个android应用程序,允许用户使用数据库中已有的用户名和密码登录。 我在以下链接上尝试了解决方案: 这对我来说是可行的,但问题是,只有当我通过编辑清单文件并用其他活动替换登录活动进入项目后,代码才会起作用。 我的意思是,当项目在其DDMS中创建数据库时,它就会工作。否则,它永远不允许登录任何新的模拟器和设备。 我正在使用资产文件夹中的数据库表 我的SqlHelper类是:通过在Android中创建对象,使用sqlite数据库验证登录,android,validation,sqlite,login,Android,Validation,Sqlite,Login,我正在尝试开发一个android应用程序,允许用户使用数据库中已有的用户名和密码登录。 我在以下链接上尝试了解决方案: 这对我来说是可行的,但问题是,只有当我通过编辑清单文件并用其他活动替换登录活动进入项目后,代码才会起作用。 我的意思是,当项目在其DDMS中创建数据库时,它就会工作。否则,它永远不允许登录任何新的模拟器和设备。 我正在使用资产文件夹中的数据库表 我的SqlHelper类是: public class SqlHelper extends SQLiteOpenHelper imp
public class SqlHelper extends SQLiteOpenHelper implements DatabaseMetaData
{
public static SQLiteDatabase dbSqlite;
protected SQLiteDatabase db = null;
private final Context myContext;
public SqlHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
this.myContext = context;
}
public void onCreate(SQLiteDatabase db) {
// check if exists and copy database from resource
createDB();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("SqlHelper", "Upgrading database from version " + oldVersion
+ " to " + newVersion + ", which will destroy all old data");
onCreate(db);
}
public void createDatabase() {
createDB();
}
private void createDB() {
boolean dbExist = DBExists();
if (!dbExist) {
copyDBFromResource();
}
}
private boolean DBExists() {
SQLiteDatabase db = null;
try {
String databasePath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(databasePath, null,
SQLiteDatabase.OPEN_READWRITE);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
db.setVersion(1);
} catch (SQLiteException e) {
Log.e("SqlHelper", "database not found");
}
if (db != null) {
db.close();
}
return db != null ? true : false;
}
private void copyDBFromResource() {
InputStream inputStream = null;
OutputStream outStream = null;
String dbFilePath = DATABASE_PATH + DATABASE_NAME;
try {
inputStream = myContext.getAssets().open(DATABASE_NAME);
outStream = new FileOutputStream(dbFilePath);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
outStream.close();
inputStream.close();
} catch (IOException e) {
throw new Error("Problem copying database from resource file.");
}
}
public void openDataBase() throws SQLException {
String myPath = DATABASE_PATH + DATABASE_NAME;
dbSqlite = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized void close() {
if (dbSqlite != null)
dbSqlite.close();
super.close();
}
}
我的DatabaseMetaData接口类是:
public interface DatabaseMetaData {
String DATABASE_PATH = "/data/data/com.dbApp/databases/";
String DATABASE_NAME = "dbApp";
String TABLE_USERLIST = "UserList";
String TABLE_CUSTOMER = "Customer";
//UserList
String COLUMN_USER_NAME = "User_Name";
String COLUMN_PASSWORD = "Password";
//Customer
String COLUMN_ID = "_id";
String COLUMN_LISTID = "ListID";
String COLUMN_NAME = "Name";
String COLUMN_COMPANYNAME = "CompanyName";
String COLUMN_FIRSTNAME = "FirstName";
String COLUMN_LASTNAME = "LastName";
}
在LoginActivity中,我使用以下方法:
protected boolean tryLogin(String username, String password)
{
try{
Cursor cursor = null;
cursor = db.rawQuery("select " + DatabaseMetaData.COLUMN_PASSWORD + " from " + DatabaseMetaData.TABLE_USERLIST + " where " + DatabaseMetaData.COLUMN_USER_NAME + " = " + "'" +username+ "'", null);
//cursor = db.rawQuery("select password from UserList where user_name='" + username + "'", null);
if (cursor.moveToFirst()) {
String str = cursor.getString(0);
if (password.equals(str)) {
cursor.close();
return true;
}else{
return false;
}
}cursor.close();
}
请帮帮我