• Android 数据库操作


    废话不多说 看代码注释

     1 public class MainActivity extends AppCompatActivity {
     2 
     3     private MyDatabaseHelper dbHelper;
     4 
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_main);
     9 
    10         dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 3); // 执行这句并不会创建数据库文件
    11         Button btnCreateDatabase = (Button) findViewById(R.id.button);
    12         btnCreateDatabase.setOnClickListener(new View.OnClickListener() {
    13             @Override
    14             public void onClick(View v) {
    15                 dbHelper.getWritableDatabase(); // 执行这句才会创建数据库文件
    16             }
    17         });
    18 
    19     }
    20 }

     --

     1 public class MyDatabaseHelper extends SQLiteOpenHelper {
     2 
     3     public static final String CREATE_BOOK = "create table book (" +
     4             "id integer primary key autoincrement, " +
     5             "author text, " +
     6             "price real," +
     7             "pages integer, " +
     8             "name text)";
     9 
    10     private Context mContext;
    11 
    12     public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    13         super(context, name, factory, version);
    14 
    15         mContext = context;
    16     }
    17 
    18     /**
    19      * 数据库已经创建过了, 则不会执行到,如果不存在数据库则会执行
    20      * @param db
    21      */
    22     @Override
    23     public void onCreate(SQLiteDatabase db) {
    24         db.execSQL(CREATE_BOOK); // 执行这句才会创建表
    25 
    26         Toast.makeText(mContext, "create succeeded", Toast.LENGTH_SHORT).show();
    27 
    28     }
    29 
    30     /**
    31      * 创建数据库时不会执行,增大版本号升级时才会执行到
    32      * @param db
    33      * @param oldVersion
    34      * @param newVersion
    35      */
    36     @Override
    37     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    38         // 在这里面可以把旧的表 drop掉 从新创建新表,
    39         // 但如果数据比较重要更好的做法还是把旧表的数据迁移到新表上,比如升级qq聊天记录被删掉肯定招骂
    40         Toast.makeText(mContext, "onUpgrade oldVersion:" + oldVersion + " newVersion:" + newVersion, Toast.LENGTH_SHORT).show();
    41     }
    42 }

    验证数据库文件是否存在的方法看最后部分

     剩下的工作就是对数据库表的增删改查了

    首先通过下面的代码获得一个引用以便操作数据库

    1  SQLiteDatabase db =  dbHelper.getWritableDatabase();

    对于增删改都可以用  db.execSQL(String sql);  来执行sql语句。 例如增加一条记录

    1 db.execSQL("insert into book(name , author, pages, price) values("Android数据库操作指南", "panda fang", 200, 35.5)");

    遇到字符串要转义 有没有觉得很蛋疼, 用下面的方法就好多了

    1 db.execSQL("insert into book(name , author, pages, price) values(?, ? ,? ,? )", new String[]{"Android数据库操作指南", "panda fang", "200", "35.5"});

    sql 中用 ? 占位 后面传入真正的参数, 由于在创建表的时候已经约定pages 和 price字段的数据类型为integer和real, 虽然代码中写的是字符串并不影响,存入数据库会自动处理的。数组嘛,必须与其他的元素类型一致。 这第二个方式是 execSQL(String sql)的重载方法 api是  public void execSQL(String sql, Object[] bindArgs) throws SQLException 

    对于查询则要使用   rawQuery(String sql, String[] selectionArgs)   , 因为 execSQL返回void ,而查询需要访问查询结果。方法如下

    1 Cursor cursor =  db.rawQuery("select * from book", null);
    2 while (cursor.moveToNext())
    3 {
    4     String name = cursor.getString(cursor.getColumnIndex("name"));
    5     String author =  cursor.getString(cursor.getColumnIndex("author"));
    6     Log.i(TAG, "name:" + name + " author:" + author);
    7 }
    8 cursor.close();

    如何检查数据库文件是否存在,以及检查表中的数据呢。

    前提是使用模拟器或者root过的真机。从 android studio 菜单中 Tools -> Android -> Android Device Monitor -> File Explorer 找到 data/data/程序包名/databases 目录

    查看是否存在数据库文件。如果存在可以导出到电脑上, 用 以下工具查看数据库中的表

    sqlitespy 简洁轻量 免费
    SQLite Studio 免费
    SQLite Expert 强大重量 个人版免费 专业版收费
    Navicat for SQLite 强大 收费
     更多请自行搜索......  

    还有一种方式是使用android sdk 中的命令行工具操作, 命令行操作比较麻烦,后面专门开一篇讲。

    SQL 速查手册

    SQL 教程 http://www.w3school.com.cn/sql/index.asp

    SQL 教程 | 菜鸟教程 http://www.runoob.com/sql/sql-tutorial.html

    SQL Tutorial https://www.w3schools.com/sql/default.asp (英文)

  • 相关阅读:
    Apache POI 示例
    使用wsimport生成webservice客户端代码
    监听器
    @WebFilter注解
    事务
    k8s的deployment应用
    k8s 组件架构
    使用kubeadm安装kubernetes1.12.1
    轻量级批量管理工具pssh
    使用Bind服务配置DNS服务器
  • 原文地址:https://www.cnblogs.com/lonkiss/p/6497707.html
Copyright © 2020-2023  润新知