上一篇
android怎么建数据库
- 数据库
- 2025-07-17
- 2165
Android中,可以使用SQLite数据库,通过继承
SQLiteOpenHelper类创建数据库帮助类,重写
onCreate和
onUpgrade方法来创建和更新表结构。
在Android中建立数据库通常使用SQLite,它是Android内置的轻量级关系型数据库,以下是详细的步骤和相关内容:

准备工作
- 创建项目:在Android Studio中创建一个新的Android项目,选择合适的模板,如“Empty Activity”。
- 添加权限(可选):如果需要在外部存储中创建或访问数据库文件,需要在
AndroidManifest.xml文件中添加相应的存储权限,例如READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,但对于大多数应用,将数据库存储在应用的内部存储空间是更安全和方便的选择,此时不需要额外的存储权限。
继承SQLiteOpenHelper类
SQLiteOpenHelper是一个帮助类,用于管理数据库的创建和版本管理,我们需要创建一个类继承它,并实现其抽象方法。
public class MyDatabaseHelper extends SQLiteOpenHelper {
// 数据库名称和版本号
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
// 表名和列名常量
public static final String TABLE_NAME = "mytable";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_AGE = "age";
// 创建表的SQL语句
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " +
COLUMN_AGE + " INTEGER);";
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 执行创建表的SQL语句
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 当数据库版本升级时,执行此方法进行数据迁移等操作
// 这里简单地删除旧表并创建新表,实际应用中可能需要更复杂的逻辑来处理数据迁移
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
数据库操作
- 获取数据库实例:通过调用
getWritableDatabase()或getReadableDatabase()方法获取可写或可读的数据库实例,如果数据库不存在,getWritableDatabase()会调用onCreate()方法创建数据库;如果数据库版本低于当前版本号,会调用onUpgrade()方法进行升级。 - 插入数据:可以使用
ContentValues对象来存储要插入的数据,然后通过insert()方法将数据插入到表中,也可以直接使用SQL语句插入数据,但使用ContentValues更加安全和方便,可以避免SQL注入攻击。 - 查询数据:使用
query()方法或rawQuery()方法进行查询。query()方法可以指定查询的表名、列名、选择条件、排序方式等参数,返回一个Cursor对象,可以通过遍历Cursor来获取查询结果。rawQuery()方法则可以直接执行SQL查询语句。 - 更新数据:使用
update()方法更新表中的数据,需要指定更新的表名、ContentValues对象(包含要更新的列和值)、以及更新的条件。 - 删除数据:使用
delete()方法删除表中的数据,需要指定删除的表名和删除的条件。
示例代码
以下是一个完整的示例代码,展示了如何创建数据库、插入数据、查询数据并显示在Log中。

public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建数据库帮助类实例
dbHelper = new MyDatabaseHelper(this);
// 获取可写数据库实例
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 插入数据
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COLUMN_NAME, "John");
values.put(MyDatabaseHelper.COLUMN_AGE, 25);
long newRowId = db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
Log.d("Database", "Inserted row ID: " + newRowId);
// 查询数据
Cursor cursor = db.query(MyDatabaseHelper.TABLE_NAME,
new String[]{MyDatabaseHelper.COLUMN_ID, MyDatabaseHelper.COLUMN_NAME, MyDatabaseHelper.COLUMN_AGE},
null, null, null, null, null);
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_NAME));
int age = cursor.getInt(cursor.getColumnIndexOrThrow(MyDatabaseHelper.COLUMN_AGE));
Log.d("Database", "ID: " + id + ", Name: " + name + ", Age: " + age);
}
cursor.close();
}
}
注意事项
- 线程安全:SQLite操作不是线程安全的,因此不应在主线程中直接进行数据库操作,以免造成界面卡顿或出现异常,可以使用异步任务(如
AsyncTask)或线程池来在后台线程中执行数据库操作。 - 数据库版本管理:每次对数据库结构做变更时,如添加新表、修改表结构等,都需要更新数据库版本号,系统会根据版本号的变化来决定是否调用
onUpgrade()方法进行数据库升级操作,在onUpgrade()方法中,需要编写相应的数据迁移逻辑,以确保数据的完整性和一致性。 - 性能优化:对于频繁的查询操作,可以使用索引来提高查询效率,但要注意,索引也会增加数据库的写入开销和存储空间占用,因此需要根据实际需求合理使用索引,在进行大量数据插入、更新或删除操作时,可以使用事务来确保数据的一致性和提高性能。
相关问答FAQs:

- 问题:如何在Android中使用第三方数据库,如MySQL?
解答:在Android中使用第三方数据库,如MySQL,通常需要通过创建一个后端服务来实现,可以使用REST API进行数据交互,Android客户端通过HTTP请求与远程数据库通信,获取或发送数据,这种方式需要在服务器端搭建相应的环境和接口,同时在Android应用中处理网络请求和数据解析。 - 问题:什么是Room框架,为什么要使用它?
解答:Room是Android Jetpack组件中的一个持久性库,它提供了一个更高级的抽象层,用于简化SQLite数据库的操作,Room具有以下优点:提供了编译时检查的SQL语句,减少了运行时错误;更容易集成到Android架构组件中,如ViewModel和LiveData;支持类型转换,使数据处理更加方便;提供了流畅的API,简化了数据库的增删改查操作。
