安卓开发的轻型数据库选择和实际开发案例代码

本文展示了如何在Android应用中使用SQLite进行数据库操作,包括创建数据库和数据表、插入、查询、更新和删除数据,以及异常处理和数据库升级。此外,提到了使用ORM框架如GreenDao来简化数据库交互的可能性。
摘要由CSDN通过智能技术生成

安卓开发中常用的轻型数据库是SQLite。以下是一个简单的使用SQLite进行数据库操作的案例代码:

创建数据库和数据表

public class DBHelper extends SQLiteOpenHelper {
  private static final String DB_NAME = "mydatabase.db";
  private static final int DB_VERSION = 1;
  private static final String TABLE_NAME = "mytable";
  private static final String COLUMN_ID = "id";
  private static final String COLUMN_NAME = "name";

  public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (" +
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_NAME + " TEXT NOT NULL);";
    db.execSQL(createTable);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
  }
}

 

数据库操作方法

public class MyDB {
  private SQLiteDatabase database;
  private DBHelper dbHelper;

  public MyDB(Context context) {
    dbHelper = new DBHelper(context);
  }

  public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
  }

  public void close() {
    dbHelper.close();
  }

  public void insertData(String name) {
    ContentValues values = new ContentValues();
    values.put(DBHelper.COLUMN_NAME, name);
    database.insert(DBHelper.TABLE_NAME, null, values);
  }

  public Cursor getAllData() {
    String[] columns = {DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME};
    Cursor cursor = database.query(DBHelper.TABLE_NAME, columns, null, null, null, null, null);
    if (cursor != null) {
      cursor.moveToFirst();
    }
    return cursor;
  }

  public int updateData(long id, String name) {
    ContentValues values = new ContentValues();
    values.put(DBHelper.COLUMN_NAME, name);
    int update = database.update(DBHelper.TABLE_NAME, values, DBHelper.COLUMN_ID + " = " + id, null);
    return update;
  }

  public int deleteData(long id) {
    int delete = database.delete(DBHelper.TABLE_NAME, DBHelper.COLUMN_ID + " = " + id, null);
    return delete;
  }
}

 

使用数据库操作方法

MyDB db = new MyDB(this);
db.open();

// 插入数据
db.insertData("John");

// 查询数据
Cursor cursor = db.getAllData();
if (cursor != null && cursor.moveToFirst()) {
  do {
    long id = cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_ID));
    String name = cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_NAME));
    Log.d("MyDB", "ID: " + id + ", NAME: " + name);
  } while (cursor.moveToNext());
}

// 更新数据
db.updateData(1, "Mike");

// 删除数据
db.deleteData(2);

db.close();

 

示例的完整代码

public class MainActivity extends AppCompatActivity {
  private EditText etName;
  private Button btnInsert, btnQuery, btnUpdate, btnDelete;
  private ListView listView;
  private ArrayAdapter<String> adapter;
  private ArrayList<String> dataList = new ArrayList<>();
  private MyDB db;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    etName = findViewById(R.id.et_name);
    btnInsert = findViewById(R.id.btn_insert);
    btnQuery = findViewById(R.id.btn_query);
    btnUpdate = findViewById(R.id.btn_update);
    btnDelete = findViewById(R.id.btn_delete);
    listView = findViewById(R.id.list_view);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
    listView.setAdapter(adapter);

    db = new MyDB(this);
    db.open();

    btnInsert.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String name = etName.getText().toString();
        db.insertData(name);
        showMessage("Data inserted successfully");
        etName.setText("");
        refreshData();
      }
    });

    btnQuery.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        refreshData();
      }
    });

    btnUpdate.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String name = etName.getText().toString();
        long id = listView.getSelectedItemId();
        int rowsUpdated = db.updateData(id, name);
        showMessage(rowsUpdated + " rows updated");
        refreshData();
      }
    });

    btnDelete.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        long id = listView.getSelectedItemId();
        int rowsDeleted = db.deleteData(id);
        showMessage(rowsDeleted + " rows deleted");
        refreshData();
      }
    });
  }

  private void refreshData() {
    dataList.clear();
    Cursor cursor = db.getAllData();
    if (cursor != null && cursor.moveToFirst()) {
      do {
        long id = cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_ID));
        String name = cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_NAME));
        dataList.add(id + ": " + name);
      } while (cursor.moveToNext());
    }
    adapter.notifyDataSetChanged();
  }

  private void showMessage(String message) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    db.close();
  }
}

在这个示例中,我们实现了对SQLite数据库的基本操作,包括插入、查询、更新和删除数据。我们还使用了ListView来展示查询到的数据,并提供了EditText和按钮来进行数据的插入、更新和删除操作。

异常处理

在使用SQLite进行数据库操作时,可能会出现异常,例如数据库版本不匹配、数据表不存在等等。在这些情况下,我们应该及时捕获异常并进行相应的处理,以避免应用程序崩溃。

以下是一个简单的异常处理示例代码:

public void insertData(String name) {
  try {
    ContentValues values = new ContentValues();
    values.put(DBHelper.COLUMN_NAME, name);
    database.insert(DBHelper.TABLE_NAME, null, values);
  } catch (SQLException e) {
    e.printStackTrace();
  }
}

在这个示例中,我们使用了try-catch语句捕获了SQLException异常,并打印了异常堆栈信息。在应用程序实际运行过程中,我们可以使用更加详细和友好的方式来提示用户出现异常,例如使用Toast或AlertDialog等。

 数据库升级

在实际开发中,我们可能需要对数据库结构进行升级,例如添加新的数据表、添加新的列等等。在SQLite中,我们可以通过在DBHelper类中重写onUpgrade()方法来实现数据库升级。

以下是一个升级数据库的示例代码:

public class DBHelper extends SQLiteOpenHelper {
  private static final String DB_NAME = "mydatabase.db";
  private static final int DB_VERSION = 2;
  private static final String TABLE_NAME = "mytable";
  private static final String COLUMN_ID = "id";
  private static final String COLUMN_NAME = "name";
  private static final String COLUMN_AGE = "age";

  public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE " + TABLE_NAME + " (" +
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
        COLUMN_NAME + " TEXT NOT NULL);";
    db.execSQL(createTable);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
      db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + COLUMN_AGE + " INTEGER DEFAULT 0;");
    }
  }
}

在这个示例中,我们将数据库版本号DB_VERSION从1升级到了2,并在onUpgrade()方法中添加了一个ALTER TABLE语句,用于在原有数据表中添加一个新的列COLUM_AGE。

当应用程序从旧版本升级到新版本时,系统会自动调用onUpgrade()方法进行数据库结构更新。我们在onUpgrade()方法中判断旧版本号oldVersion,如果是1,则执行ALTER TABLE语句添加新的列。

总结

本文介绍了Android中的SQLite数据库的基本用法,包括创建数据库、创建数据表、增删改查数据以及异常处理和数据库升级。通过这些基本操作,我们可以为应用程序提供一个轻量级、快速、可靠的本地数据存储方案。

需要注意的是,在实际开发中,我们需要根据实际情况来设计和组织数据库结构,例如数据表和列的命名方式、数据类型的选择、一对多和多对多关系的建立等等。同时,我们也需要进行数据操作的安全处理,例如数据的加密、防止SQL注入等等。

最后,我们也可以使用ORM框架(例如GreenDao、ORMLite)来简化数据库操作,并提高代码的可读性和维护性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥物联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值