【发布时间】:2019-06-03 10:39:05
【问题描述】:
我正在制作一个 Android 应用程序并希望将数据发送到 SQLite 数据库。我应该如何编码?
这是我创建表格的方式
public class DBHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "UserInfo.db";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_TABLE =
"CREATE TABLE " + UserProfile.Users.TABLE_NAME + " (" +
UserProfile.Users._ID + " INTEGER PRIMARY KEY," +
UserProfile.Users.COLUMN_USERNAME + " TEXT," +
UserProfile.Users.COLUMN_DOB + " TEXT," +
UserProfile.Users.COLUMN_GENDER + " TEXT," +
UserProfile.Users.COLUMN_PASSWORD + " TEXT )";
sqLiteDatabase.execSQL(CREATE_TABLE);
}
这是这段代码中的onUpgrade方法
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
这是我将 addInfo 方法添加到此类的方式
public long addInfo(String username, String password){
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(UserProfile.Users.COLUMN_USERNAME, username);
contentValues.put(UserProfile.Users.COLUMN_PASSWORD, password);
long rowId = sqLiteDatabase.insert(UserProfile.Users.TABLE_NAME, null, contentValues);
return rowId;
}
public int updateInfo(String userId, String userName, String password, String dob, String gender){
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(UserProfile.Users.COLUMN_USERNAME, userName);
values.put(UserProfile.Users.COLUMN_PASSWORD, password);
values.put(UserProfile.Users.COLUMN_GENDER, gender);
values.put(UserProfile.Users.COLUMN_DOB, dob);
String selection = UserProfile.Users._ID + " = ?";
String args[] = {userId};
int count = sqLiteDatabase.update(UserProfile.Users.TABLE_NAME, values, selection, args);
return count;
}
下面是readAllInfo的Array列表
public ArrayList readAllInfo(){
SQLiteDatabase sqLiteDatabase = getReadableDatabase();
String[] projection = {
UserProfile.Users._ID,
UserProfile.Users.COLUMN_USERNAME,
UserProfile.Users.COLUMN_DOB,
UserProfile.Users.COLUMN_GENDER,
UserProfile.Users.COLUMN_PASSWORD
};
我用来排序的代码如下所示
String sortOrder = UserProfile.Users._ID + " DESC";
Cursor cursor = sqLiteDatabase.query(
UserProfile.Users.TABLE_NAME,
projection,
null,
null,
null,
null,
sortOrder
);
ArrayList<User> list = new ArrayList<>();
if (cursor.getCount() > 0){
while(cursor.moveToNext()){
User newUser = new User();
int id = cursor.getInt(cursor.getColumnIndexOrThrow(UserProfile.Users._ID));
String user = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_USERNAME));
String date = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_DOB));
String gen = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_GENDER));
String pass = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_PASSWORD));
newUser.setUserId(id+"");
newUser.setUserName(user);
newUser.setDateOfBirth(date);
newUser.setGender(gen);
newUser.setPassword(pass);
list.add(newUser);
}
}
return list;
}
我用来读取AllInfo方法的数组列表是这样的
public ArrayList readAllInfo(String userId, String userName){
String selection;
String[] args = {""};
if(userId == null){
selection = UserProfile.Users.COLUMN_USERNAME + " LIKE ?";
args[0] = userName;
}
else
{
selection = UserProfile.Users._ID + " = ?";
args[0] = userId;
}
SQLiteDatabase sqLiteDatabase = getReadableDatabase();
String[] projection = {
UserProfile.Users._ID,
UserProfile.Users.COLUMN_USERNAME,
UserProfile.Users.COLUMN_DOB,
UserProfile.Users.COLUMN_GENDER,
UserProfile.Users.COLUMN_PASSWORD
};
String sortOrder = UserProfile.Users._ID + " DESC";
Cursor cursor = sqLiteDatabase.query(
UserProfile.Users.TABLE_NAME,
projection,
selection,
args,
null,
null,
sortOrder
);
ArrayList<User> list = new ArrayList<>();
if (cursor.getCount() > 0){
while(cursor.moveToNext()){
User newUser = new User();
int id = cursor.getInt(cursor.getColumnIndexOrThrow(UserProfile.Users._ID));
String user = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_USERNAME));
String date = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_DOB));
String gen = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_GENDER));
String pass = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.COLUMN_PASSWORD));
newUser.setUserId(id+"");
newUser.setUserName(user);
newUser.setDateOfBirth(date);
newUser.setGender(gen);
newUser.setPassword(pass);
list.add(newUser);
}
}
return list;
}
public int deleteInfo(String username){
SQLiteDatabase sqLiteDatabase = getReadableDatabase();
String selection = UserProfile.Users._ID + " = ?";
String[] args = {username};
int deletedRows = sqLiteDatabase.delete(UserProfile.Users.TABLE_NAME, selection, args);
return deletedRows;
}
}
【问题讨论】:
-
您的代码似乎没问题。有什么问题?
-
不,数据没有插入到表中。请帮忙
-
应用程序崩溃了吗?如果它确实发布了错误日志。
-
@Nadisha
addInfo在哪里被调用?你能确认你已经打电话了吗?
标签: android android-sqlite oncreate