Android存储用户输入数据到数据库的步骤 (android如何保存用户输入的数据库)
在Android开发中,许多应用程序需要存储用户输入的数据,以便在程序下一次启动时能够使用。 存储用户数据的一种可靠方法是将其存储在SQLite数据库中。SQLite是一种轻量级的嵌入式关系型数据库,其易于使用和集成到Android应用程序中。
本文将介绍如何在Android应用程序中将用户输入数据存储在SQLite数据库中。我们将覆盖以下内容:
1. 创建一个SQLite数据库
2. 创建一个数据表用于存储用户数据
3. 在应用程序中使用SQLiteOpenHelper对数据库进行操作
4. 实现向表中插入数据的方法
5. 从表中查询数据的方法
6. 防止SQL注入攻击
创建一个SQLite数据库
在Android中,创建一个SQLite数据库非常简单。使用SQLiteOpenHelper类,我们可以在应用程序的“数据”目录中创建一个SQLite数据库。这个目录只能由本应用程序来访问。要创建一个SQLiteOpenHelper类,需要继承该类并实现它的抽象方法。以下是SQLiteOpenHelper的一个例子:
public class MyDatabaseHelper extends SQLiteOpenHelper {
// 定义数据库名称和版本号
private static final String DB_NAME = “my_db_name”;
private static final int DB_VERSION = 1;
// 构造函数
public MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
// 创建数据库
@Override
public void onCreate(SQLiteDatabase db) {
// 在数据库里面创建一个表
String createTableQuery = “CREATE TABLE my_table (“
+ “_id INTEGER PRIMARY KEY AUTOINCREMENT,”
+ “name TEXT,”
+ “eml TEXT)”;
db.execSQL(createTableQuery);
}
// 更新数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 如果有表需要更新,则在这里做处理
}
}
从上面的代码可以看到,我们创建了一个名为“my_db_name”的数据库,其中包含一个名为“my_table”的数据表。表中包含了以下三个字段:_id,name和eml。
创建一个数据表用于存储用户数据
在我们的应用程序中,我们需要存储用户输入的数据。我们可以通过简单的SQL语句来创建一个数据表。以下是创建一个数据表的SQL语句:
CREATE TABLE user_input (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER,
eml TEXT
);
在表中,我们存储了用户的姓名、年龄和电子邮件地址。每条记录都有一个唯一的ID,该ID将自动递增。这样,我们可以轻松地从表中检索任何记录。让我们使用SQLiteOpenHelper类在我们的应用程序中创建一个名为UserInputDatabaseHelper的类来创建这个数据表:
public class UserInputDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = “user_input.db”;
private static final int DATABASE_VERSION = 1;
public UserInputDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_USER_INPUT_TABLE = “CREATE TABLE user_input ( “
+ “id INTEGER PRIMARY KEY AUTOINCREMENT, “
+ “name TEXT, “
+ “age INTEGER, “
+ “eml TEXT )”;
db.execSQL(CREATE_USER_INPUT_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL(“DROP TABLE IF EXISTS user_input”);
onCreate(db);
}
}
在onCreate()方法中,我们创建名为user_input的数据表,并添加id、name、age和eml字段。每个字段的类型也在这里定义。在onUpgrade()方法中,我们将删除表并重新创建它,以便我们在需要时可以轻松地升级我们的数据模型。
在应用程序中使用SQLiteOpenHelper对数据库进行操作
现在,当我们的应用程序需要访问数据库时,我们需要使用上述创建的UserInputDatabaseHelper类。我们需要实例化一个新的UserInputDatabaseHelper对象,并调用getWritableDatabase()方法来获得数据库的可写实例。以下是如何从我们的应用程序中访问数据库的示例:
public class MnActivity extends AppCompatActivity {
private UserInputDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mn);
// 实例化 UserInputDatabaseHelper
db = new UserInputDatabaseHelper(this);
// 获得数据库的可写实例
SQLiteDatabase writableDb = db.getWritableDatabase();
// 执行数据库操作(如插入、查询等)
// …
// 关闭数据库连接
writableDb.close();
}
}
在上面的示例中,我们首先实例化了UserInputDatabaseHelper类,然后获得了数据库的可写实例。我们可以在这里执行任何数据库操作,如插入、查询等。在我们不再需要它时,我们关闭数据库连接。
实现向表中插入数据的方法
现在,我们已经创建了一个数据表,并且知道如何在应用程序中访问它,接下来是将用户输入的数据插入到数据表中。这可以通过使用insert()方法完成。以下是将用户数据插入数据表的示例:
public long insertUserInput(String name, int age, String eml) {
SQLiteDatabase writableDb = db.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, name);
values.put(“age”, age);
values.put(“eml”, eml);
long newRowId = writableDb.insert(“user_input”, null, values);
writableDb.close();
return newRowId;
}
在上面的示例中,我们将用户输入的name、age和eml存储在ContentValues对象中,并使用insert()方法将它们插入到数据表中。在这里,我们使用user_input作为表的名称。
从表中查询数据的方法
现在,我们已经将一些用户输入数据存储在数据库中。我们还需要一个方法来从数据表中检索这些数据。这可以通过使用query()方法实现。以下是从数据表中查询数据的示例:
public Cursor getUserInputs() {
SQLiteDatabase readableDb = db.getReadableDatabase();
String[] projection = {
“id”,
“name”,
“age”,
“eml”
};
String sortOrder =
“_id DESC”;
Cursor cursor = readableDb.query(
“user_input”,
projection,
null,
null,
null,
null,
sortOrder
);
return cursor;
}
在上面的示例中,我们使用query()方法从数据表中选择所有列。我们还定义了一个查询排序方式,以便我们可以按_id对结果进行降序排序。我们返回一个Cursor对象,该对象包括我们从数据库中检索到的行数据。
防止SQL注入攻击
在应用程序中使用SQL语句时,应该注意避免SQL注入攻击,这是一种恶意攻击,可以在应用程序中插入恶意行为。要防止SQL注入攻击,可以通过在执行SQL查询时使用参数化查询来完成。以下是使用参数化查询的示例:
public Cursor getUserInputByName(String name) {
SQLiteDatabase readableDb = db.getReadableDatabase();
String[] projection = {
“id”,
“name”,
“age”,
“eml”
};
String selection = “name = ?”;
String[] selectionArgs = { name };
Cursor cursor = readableDb.query(
“user_input”,
projection,
selection,
selectionArgs,
null,
null,
null
);
return cursor;
}
在上面的示例中,我们使用参数化查询来检索与给定名称匹配的用户输入数据。我们使用“?”作为通配符,并使用selectionArgs参数来提供“?”的值。这确保了我们的查询不会受到任何注入攻击。