请帮我解决这个问题。我的应用一直因为这个问题而崩溃。我想做的是在用户登录后,在个人资料活动的文本视图中显示用户在SQLite数据库中的信息。请帮助我完成我的项目。我对android studio还是新手。
这是我的logcat中的语法错误。
android.database.sqlite.SQLiteException: near "null": syntax error (code 1 SQLITE_ERROR): , while compiling: Select * from USER_TABLE where null=?null =?null =?
这是我的数据库助手
public class DatabaseHelper extends SQLiteOpenHelper {
public static String C_EMAIL,C_PREFERENCES,C_PASSWORD;;
public DatabaseHelper(@Nullable Context context) {
super(context, constants.DB_NAME, null, constants.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(constants.CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + constants.TABLE_NAME);
onCreate(db);
}
public boolean insertInfo(String email, String preference,String password) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(constants.C_EMAIL, email);
values.put(constants.C_PREFERENCES, preference);
values.put(constants.C_PASSWORD , password);
long id = db.insert(constants.TABLE_NAME, null, values);
if (id == -1) {
return false;
}else {
return true;
}
}
public boolean userExists (String email){
String [] columns = {C_EMAIL};
SQLiteDatabase db = getReadableDatabase();
String selection = C_EMAIL + "=?";
String selectionArgs []= { email };
Cursor cursor = db.query(TABLE_NAME,columns,selection,selectionArgs,null,null,null);
int count = cursor.getCount();
cursor.close();
db.close();
if (count > 0)
return true;
else
return false;
}
public Cursor getData(String email, String Password){
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery(" Select * from "+ TABLE_NAME + " where "+ C_EMAIL + "=?" + C_PASSWORD + " =?", new String[]{email,Password});
return res;
}
}
这是我的login.java
loginacc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor rs = dbHelper.getData(loginemail.getText().toString(),loginpassword.getText().toString());
if(rs.moveToFirst()){
String email = rs.getString(rs.getColumnIndex(DatabaseHelper.C_EMAIL));
String preference = rs.getString(rs.getColumnIndex(DatabaseHelper.C_PREFERENCES));
String password = rs.getString(rs.getColumnIndex(DatabaseHelper.C_PASSWORD));
Toast.makeText(login.this,"Login Successful", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(login.this,profile.class);
intent.putExtra("email", email);
intent.putExtra("preference", preference);
intent.putExtra("password", password);
startActivity(intent);
if(rs != null && rs.isClosed()){
rs.close();
}
}
else{
Toast.makeText(login.this,"Invalid Login", Toast.LENGTH_SHORT).show();
}
}
});
}
这是我的个人资料.java
public class profile extends AppCompatActivity {
DatabaseHelper dbHelper;
TextView pemail,ppreferences, ppassword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
dbHelper = new DatabaseHelper(this);
pemail = findViewById(R.id.pemail);
ppreferences = findViewById(R.id.ppreferences);
ppassword = findViewById(R.id.ppassword);
pemail.setText(getIntent().getStringExtra("email"));
ppreferences.setText(getIntent().getStringExtra("preferences"));
ppassword.setText((getIntent().getStringExtra("password")));
谢谢您的帮助!
你在这里声明了3个静态变量。
public static String C_EMAIL,C_PREFERENCES,C_PASSWORD;
没有给它们分配任何值 所以它们都是... null
. 当你在里面使用它们时 getData()
:
" Select * from "+ TABLE_NAME + " where "+ C_EMAIL + "=?" + C_PASSWORD + " =?"
结果是:
Select * from USER_TABLE where null=?null =?null =?
(从你的代码中看不清楚3D的位置) null =?
来自)你想要的是(我想)用这些变量来表示表的列名。所以将声明改为。
public static String C_EMAIL = "email"; // change to the actual column name
public static String C_PASSWORD = "password"; // change to the actual column name
public static String C_PREFERENCES = "preferences"; // change to the actual column name
同时加入 AND
操作符在 sql 语句中。
"Select * from "+ TABLE_NAME + " where "+ C_EMAIL + "= ? AND " + C_PASSWORD + " = ?"
编辑 在方法里面 insertInfo()
你用 constants.C_EMAIL
, constants.C_PREFERENCES
和 constants.C_PASSWORD
似乎是你的列名。如果是这样,那么在sql语句中也使用它们,并删除静态变量。
"Select * from "+ TABLE_NAME + " where "+ constants.C_EMAIL + "= ? AND " + constants.C_PASSWORD + " = ?"