Android :SQLlite数据库 使用手册

Android实现与SQL连接 为了实现这个功能,在网上看了很多资料,可是就是下载源码来运行都还是出错,后来通过看代码总结,终于弄明白了一点,Android与SQL连接,可以通过WebService搭建桥梁实现与SQL的连接,第二种就是通过JDBC实现与SQL连接,本文主要是实现第二种。首先你需要在服务器建立一个数据库,如下图: 阅读详情

原文出自:->
作者:Carson_Ho
链接:https://www.jianshu.com/p/8e3f294e2828
來源:简书

前言

  • 在Android开发中,主要的数据存储有5种,具体如下
  • 示意图
  • 其中,SQLite数据库的存储方式 非常常用今天我将带大家全面了解关于Android SQLite数据库的操作(增、删、查、改)


    目录


  • 1. SQLlite数据库 简介



  • 2. SQLiteOpenHelper类

    2.1 简介


  •    

    2.2 SQLiteOpenHelper类 常用方法

    /** 
      *  创建数据库
      */ 
     // 1. 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作)
     getWritableDatabase()
    
     // 2. 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)
     getReadableDatabase()
    
     // 3. 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用
     // 在继承SQLiteOpenHelper类的子类中复写
     onCreate(SQLiteDatabase db) 
    
     // 4. 数据库升级时自动调用
     // 在继承SQLiteOpenHelper类的子类中复写
     onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    
     // 5. 关闭数据库
     close()
    
     /** 
      *  数据库操作(增、删、减、查)
      */ 
     // 1. 查询数据
     (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)  
     // 查询指定的数据表返回一个带游标的数据集。
     // 各参数说明: 
     // table:表名称 
     // colums:列名称数组 
     // selection:条件子句,相当于where 
     // selectionArgs:条件语句的参数数组 
     // groupBy:分组 
     // having:分组条件 
     // orderBy:排序类 
     // limit:分页查询的限制 
     // Cursor:返回值,相当于结果集ResultSet 
    
     (Cursor) rawQuery(String sql, String[] selectionArgs) 
     //运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别 = 防止SQL注入)
    
     // 2. 删除数据行  
     (int) delete(String table,String whereClause,String[] whereArgs) 
     
     // 3. 添加数据行 
     (long) insert(String table,String nullColumnHack,ContentValues values) 
     
     // 4. 更新数据行 
    (int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 
     
     // 5. 执行一个SQL语句,可以是一个select or 其他sql语句 
     // 即 直接使用String类型传入sql语句 & 执行
     (void) execSQL(String sql) 
    

    3. 具体使用

    • 使用步骤 = 自定义数据库子类(继承SQLiteOpenHelper类)、创建数据库 & 操作数据库(增、删、查、改)
    • 下面,我将逐一介绍每个步骤

    3.1 自定义数据库子类(继承 SQLiteOpenHelper 类)

    /** 
      * 创建数据库子类,继承自SQLiteOpenHelper类
      * 需 复写 onCreat()、onUpgrade()
      */ 
    public class DatabaseHelper extends SQLiteOpenHelper {
    
        // 数据库版本号
        private static Integer Version = 1;
    
        /** 
         * 构造函数
         * 在SQLiteOpenHelper的子类中,必须有该构造函数
         */ 
        public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                              int version) {
            // 参数说明
            // context:上下文对象
            // name:数据库名称
            // param:一个可选的游标工厂(通常是 Null) 
            // version:当前数据库的版本,值必须是整数并且是递增的状态
    
            // 必须通过super调用父类的构造函数
            super(context, name, factory, version);
        }
        
        /** 
         * 复写onCreate()
         * 调用时刻:当数据库第1次创建时调用
         * 作用:创建数据库 表 & 初始化数据
         * SQLite数据库创建支持的数据类型: 整型数据、字符串类型、日期类型、二进制
         */ 
        @Override
        public void onCreate(SQLiteDatabase db) {
                  // 创建数据库1张表
                  // 通过execSQL()执行SQL语句(此处创建了1个名为person的表)
                  String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))"; 
                  db.execSQL(sql); 
    
                  // 注:数据库实际上是没被创建 / 打开的(因该方法还没调用)
                  // 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开 
        }
    
        /** 
         * 复写onUpgrade()
         * 调用时刻:当数据库升级时则自动调用(即 数据库版本 发生变化时)
         * 作用:更新数据库表结构
         * 注:创建SQLiteOpenHelper子类对象时,必须传入一个version参数,该参数 = 当前数据库版本, 若该版本高于之前版本, 就调用onUpgrade()
         */ 
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 参数说明: 
            // db : 数据库 
            // oldVersion : 旧版本数据库 
            // newVersion : 新版本数据库 
    
            // 使用 SQL的ALTER语句
            String sql = "alter table person add sex varchar(8)";  
            db.execSQL(sql);  
        }
    
    }
    

    3.2 创建数据库:getWritableDatabase()、getReadableDatabase()

    // 步骤1:创建DatabaseHelper对象
     // 注:此时还未创建数据库
     SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_carson");
    
    // 步骤2:真正创建 / 打开数据库
     SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 创建 or 打开 可读/写的数据库
     SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); // 创建 or 打开 可读的数据库
    
    

    注:当需操作数据库时,都必须先创建数据库对象 & 创建 / 打开数据库。

    1. 对于操作 = “增、删、改(更新)”,需获得 可"读 / 写"的权限:getWritableDatabase()
    2. 对于操作 = “查询”,需获得 可"读 "的权限getReadableDatabase()

    3.3 操作数据库(增、删、查、改)

    /** 
      * 1. 创建 & 打开数据库
      */ 
    
          // a. 创建DatabaseHelper对象
          // 注:一定要传入最新的数据库版本号
          SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_carson",2);
          // b.创建 or 打开 可读/写的数据库
          SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
    
      /** 
        *  操作1:插入数据 = insert()
        */ 
            // a. 创建ContentValues对象
            ContentValues values = new ContentValues();
    
            // b. 向该对象中插入键值对
            values.put("id", 1);
            values.put("name", "carson");
                //其中,key = 列名,value = 插入的值
                //注:ContentValues内部实现 = HashMap,区别在于:ContenValues Key只能是String类型,Value可存储基本类型数据 & String类型
    
            // c. 插入数据到数据库当中:insert()
            sqliteDatabase.insert("user", null, values);
                    // 参数1:要操作的表名称
                    // 参数2:SQl不允许一个空列,若ContentValues是空,那么这一列被明确的指明为NULL值
                    // 参数3:ContentValues对象
            // 注:也可采用SQL语句插入
            String sql = "insert into user (id,name) values (1,'carson')";
            db.execSQL(sql) ;
                
      /** 
        *  操作2:修改数据 = update()
        */ 
            // a. 创建一个ContentValues对象
            ContentValues values = new ContentValues();
            values.put("name", "zhangsan");
    
            // b. 调用update方法修改数据库:将id=1 修改成 name = zhangsan
            sqliteDatabase.update("user", values, "id=?", new String[] { "1" });
                // 参数1:表名(String)
                // 参数2:需修改的ContentValues对象
                // 参数3:WHERE表达式(String),需数据更新的行; 若该参数为 null, 就会修改所有行;?号是占位符
                // 参数4:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符;
    
                // 注:调用完upgrate()后,则会回调 数据库子类的onUpgrade()
    
            // 注:也可采用SQL语句修改
            String sql = "update [user] set name = 'zhangsan' where id="1";
            db.execSQL(sql);
    
      /** 
        *  操作3:删除数据 = delete()
        */
            // 删除 id = 1的数据
            sqliteDatabase.delete("user", "id=?", new String[]{"1"});
                // 参数1:表名(String)
                // 参数2:WHERE表达式(String),需删除数据的行; 若该参数为 null, 就会删除所有行;?号是占位符
                // 参数3:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符;
    
            // 注:也可采用SQL语句修改
            String sql = "delete from user where id="1";
            db.execSQL(sql);
    
      /** 
        *  操作4:查询数据1 = rawQuery() 
        *  直接调用 SELECT 语句
        */
            Cursor c = db.rawQuery("select * from user where id=?",new Stirng[]{"1"}); 
            // 返回值一个 cursor 对象
    
            // 通过游标的方法可迭代查询结果
            if(cursor.moveToFirst()) { 
               String password = c.getString(c.getColumnIndex("password")); 
             }
            
            //Cursor对象常用方法如下:
            c.move(int offset); //以当前位置为参考,移动到指定行  
            c.moveToFirst();    //移动到第一行  
            c.moveToLast();     //移动到最后一行  
            c.moveToPosition(int position); //移动到指定行  
            c.moveToPrevious(); //移动到前一行  
            c.moveToNext();     //移动到下一行  
            c.isFirst();        //是否指向第一条  
            c.isLast();     //是否指向最后一条  
            c.isBeforeFirst();  //是否指向第一条之前  
            c.isAfterLast();    //是否指向最后一条之后  
            c.isNull(int columnIndex);  //指定列是否为空(列基数为0)  
            c.isClosed();       //游标是否已关闭  
            c.getCount();       //总数据项数  
            c.getPosition();    //返回当前游标所指向的行数  
            c.getColumnIndex(String columnName);//返回某列名对应的列索引值  
            c.getString(int columnIndex);   //返回当前行指定列的值 
            
            // 通过游标遍历1个名为user的表
            Cursor result=db.rawQuery("SELECT _id, username, password FROM user");  
             result.moveToFirst();  
             while (!result.isAfterLast()) {  
                int id=result.getInt(0);  
                String name=result.getString(1);  
                String password =result.getString(2);  
                // do something useful with these  
                result.moveToNext();  
              }  
             result.close();
    
    
         // 若查询是动态的,使用该方法会复杂。此时使用 query() 会方便很多
         // 注:无法使用SQL语句,即db.execSQL(sql);
    
      /** 
        *  操作4:查询数据2 = query() 
        *  直接调用 SELECT 语句
        */
            // 方法说明
            db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);  
            db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);  
            db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 
    
            // 参数说明
            // table:要操作的表
            // columns:查询的列所有名称集
            // selection:WHERE之后的条件语句,可以使用占位符
            // groupBy:指定分组的列名
            // having指定分组条件,配合groupBy使用
            // orderBy指定排序的列名
            // limit指定分页参数
            // distinct可以指定“true”或“false”表示要不要过滤重复值
    
            // 所有方法将返回一个Cursor对象,代表数据集的游标 
    
            // 具体使用
             Cursor cursor = sqliteDatabase.query("user", new String[] { "id","name" }, "id=?", new String[] { "1" }, null, null, null);
                // 参数1:(String)表名
                // 参数2:(String[])要查询的列名
                // 参数3:(String)查询条件
                // 参数4:(String[])查询条件的参数
                // 参数5:(String)对查询的结果进行分组
                // 参数6:(String)对分组的结果进行限制
                // 参数7:(String)对查询的结果进行排序
                
            // 注:无法使用SQL语句,即db.execSQL(sql);
      /** 
        *  操作5:关闭数据库 = close()
        *  注:完成数据库操作后,记得调用close()关闭数据库,从而释放数据库的连接
        */
            sqliteDatabase.close();  
    
      /** 
        *  操作6:删除数据库 = deleteDatabase()
        */
            // 删除 名为person的数据库  
            deleteDatabase("test.db");
    
    
    

    3.4 特别注意

    • 除了“查询”,所有的数据库操作都可使用 SQL 语句,即使用下列方法代替:
    db.executeSQL(String sql);  
    db.executeSQL(String sql, Object[] bindArgs);
    // sql语句中使用占位符,参数2 = 实际的参数集  
    
    • 使用建议:都使用SQL语句,因为:SQL语句 通用 & 简单

    原生的方法insert()、delete()等方法具备多个参数,使用复杂


    4. 实例Demo

    • Demo描述:创建数据库 & 对数据库进行操作(增、删、查、改)
    • 实现步骤:
      1. 实现子类继承SQLiteOpenHelper类(复写onCreat()、onUpgrade())
      2. 对数据库进行各种操作(增、删、查、改)

    4.1 具体代码如下:

    建议先下载Demo再进行阅读:Carson的Github:DataBase_Demo

    步骤1:实现子类继承SQLiteOpenHelper类(复写onCreat()、onUpgrade())

    MySQLiteOpenHelper.java

    package scut.carson_ho.database_demo;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    /**
     * Created by Carson_Ho on 16/11/18.
     */
    public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    
    
        //数据库版本号
        private static Integer Version = 1;
    
    
        //在SQLiteOpenHelper的子类当中,必须有该构造函数
        public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                              int version) {
            //必须通过super调用父类当中的构造函数
            super(context, name, factory, version);
        }
        //参数说明
        //context:上下文对象
        //name:数据库名称
        //param:factory
        //version:当前数据库的版本,值必须是整数并且是递增的状态
    
        public MySQLiteOpenHelper(Context context,String name,int version)
        {
            this(context,name,null,version);
        }
    
    
        public MySQLiteOpenHelper(Context context,String name)
        {
            this(context, name, Version);
        }
    
        //当数据库创建的时候被调用
        @Override
        public void onCreate(SQLiteDatabase db) {
    
            System.out.println("创建数据库和表");
            //创建了数据库并创建一个叫records的表
            //SQLite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型
            String sql = "create table user(id int primary key,name varchar(200))";
            //execSQL用于执行SQL语句
            //完成数据库的创建
            db.execSQL(sql);
            //数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开
    
    
        }
    
        //数据库升级时调用
        //如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade()方法
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            System.out.println("更新数据库版本为:"+newVersion);
        }
    
    
    }
    
    
    
    

    步骤2:在MainActivity里实现需要进行的数据库操作(增、删、查、改)

    MainActivity.java

    package scut.carson_ho.database_demo;
    
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button instablish;
        private Button insert;
        private Button upgrade;
        private Button modify;
        private Button delete;
        private Button query;
        private Button delete_database;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //绑定按钮
            instablish = (Button) findViewById(R.id.instablish);
            insert = (Button) findViewById(R.id.insert);
            upgrade = (Button) findViewById(R.id.upgrade);
            modify = (Button) findViewById(R.id.modify);
            delete = (Button) findViewById(R.id.delete);
            query = (Button) findViewById(R.id.query);
            delete_database = (Button) findViewById(R.id.delete_database);
    
            //设置监听器
            instablish.setOnClickListener(this);
            insert.setOnClickListener(this);
            upgrade.setOnClickListener(this);
            modify.setOnClickListener(this);
            delete.setOnClickListener(this);
            query.setOnClickListener(this);
            delete_database.setOnClickListener(this);
    
        }
    
    //设置每个按钮对数据库的操作进行控制
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
    
    
                //点击创建数据库库
                case R.id.instablish:
    
                    // 创建SQLiteOpenHelper子类对象
                    MySQLiteOpenHelper dbHelper = new MySQLiteOpenHelper(this,"test_carson");
                    //数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开
                    SQLiteDatabase  sqliteDatabase = dbHelper.getWritableDatabase();
                    // SQLiteDatabase  sqliteDatabase = dbHelper.getReadbleDatabase();
    
                    break;
    
                //点击更新数据
                case R.id.upgrade:
    
                    // 创建SQLiteOpenHelper子类对象
                    MySQLiteOpenHelper dbHelper_upgrade = new MySQLiteOpenHelper(this,"test_carson",2);
                    // 调用getWritableDatabase()方法创建或打开一个可以读的数据库
                    SQLiteDatabase  sqliteDatabase_upgrade = dbHelper_upgrade.getWritableDatabase();
                    // SQLiteDatabase  sqliteDatabase = dbHelper.getReadbleDatabase();
    
                    break;
    
                //点击插入数据到数据库
                case R.id.insert:
    
                    System.out.println("插入数据");
    
                    // 创建SQLiteOpenHelper子类对象
                    ////注意,一定要传入最新的数据库版本号
                    MySQLiteOpenHelper dbHelper1 = new MySQLiteOpenHelper(this,"test_carson",2);
                    // 调用getWritableDatabase()方法创建或打开一个可以读的数据库
                    SQLiteDatabase  sqliteDatabase1 = dbHelper1.getWritableDatabase();
    
                    // 创建ContentValues对象
                    ContentValues values1 = new ContentValues();
    
                    // 向该对象中插入键值对
                    values1.put("id", 1);
                    values1.put("name", "carson");
    
                    // 调用insert()方法将数据插入到数据库当中
                    sqliteDatabase1.insert("user", null, values1);
    
                    // sqliteDatabase.execSQL("insert into user (id,name) values (1,'carson')");
    
                    //关闭数据库
                    sqliteDatabase1.close();
    
                    break;
    
                //点击查询数据库
                case R.id.query:
    
                    System.out.println("查询数据");
    
                    // 创建DatabaseHelper对象
                    MySQLiteOpenHelper dbHelper4 = new MySQLiteOpenHelper(MainActivity.this,"test_carson",2);
    
                    // 调用getWritableDatabase()方法创建或打开一个可以读的数据库
                    SQLiteDatabase sqliteDatabase4 = dbHelper4.getReadableDatabase();
    
                    // 调用SQLiteDatabase对象的query方法进行查询
                    // 返回一个Cursor对象:由数据库查询返回的结果集对象
                    Cursor cursor = sqliteDatabase4.query("user", new String[] { "id",
                            "name" }, "id=?", new String[] { "1" }, null, null, null);
    
    
                    String id = null;
                    String name = null;
    
                    //将光标移动到下一行,从而判断该结果集是否还有下一条数据
                    //如果有则返回true,没有则返回false
                    while (cursor.moveToNext()) {
                        id = cursor.getString(cursor.getColumnIndex("id"));
                        name = cursor.getString(cursor.getColumnIndex("name"));
                        //输出查询结果
                        System.out.println("查询到的数据是:"+"id: "+id+"  "+"name: "+name);
    
                    }
                    //关闭数据库
                    sqliteDatabase4.close();
    
                    break;
    
    
                //点击修改数据
                case R.id.modify:
                    System.out.println("修改数据");
    
                    // 创建一个DatabaseHelper对象
                    // 将数据库的版本升级为2
                    // 传入版本号为2,大于旧版本(1),所以会调用onUpgrade()升级数据库
                    MySQLiteOpenHelper dbHelper2 = new MySQLiteOpenHelper(MainActivity.this,"test_carson", 2);
    
    
                    // 调用getWritableDatabase()得到一个可写的SQLiteDatabase对象
                    SQLiteDatabase sqliteDatabase2 = dbHelper2.getWritableDatabase();
    
                    // 创建一个ContentValues对象
                    ContentValues values2 = new ContentValues();
                    values2.put("name", "zhangsan");
    
                    // 调用update方法修改数据库
                    sqliteDatabase2.update("user", values2, "id=?", new String[]{"1"});
    
                    //关闭数据库
                    sqliteDatabase2.close();
                    break;
    
                //点击删除数据
                case R.id.delete:
    
                    System.out.println("删除数据");
    
                    // 创建DatabaseHelper对象
                    MySQLiteOpenHelper dbHelper3 = new MySQLiteOpenHelper(MainActivity.this,"test_carson",2);
    
                    // 调用getWritableDatabase()方法创建或打开一个可以读的数据库
                    SQLiteDatabase sqliteDatabase3 = dbHelper3.getWritableDatabase();
    
                    //删除数据
                    sqliteDatabase3.delete("user", "id=?", new String[]{"1"});
    
                    //关闭数据库
                    sqliteDatabase3.close();
                    break;
    
    
    
    
                //点击删除数据库
                case R.id.delete_database:
    
                    System.out.println("删除数据库");
    
                    MySQLiteOpenHelper dbHelper5 = new MySQLiteOpenHelper(MainActivity.this,
                            "test_carson",2);
    
                    // 调用getReadableDatabase()方法创建或打开一个可以读的数据库
                    SQLiteDatabase sqliteDatabase5 = dbHelper5.getReadableDatabase();
    
                    //删除名为test.db数据库
                    deleteDatabase("test_carson");
                    break;
    
                default:
                    break;
    
            }
        }
    }






SQLite下载、安装与连接 SQLite官网:https://www.sqlite.org/download.html根据自己电脑操作系统配置,选择32位或64位下载(一般情况下是64位)。总共两个压缩包。或者直接去:https://download.youkuaiyun.com/download/WenHuiJun_/87243531下载。在系统盘(C盘)见一个名称为“sqlite”的文件夹,把上面下载的两个压缩包解压到这个sqlite文件夹中 在“此电脑”(版本不一样,叫法不同)右键,点击“属性”,打开“改机系统设置” 一路点击确定下去 阅读详情

相关推荐

最全Android :这是一份详细 & 全面的 SQLlite数据库 使用手册(1),2024年最新携程Android面试题

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!// 返回值一个 cursor 对象// 通过游标的方法可迭代查询结果。

2301_82244125的博客 1200

Sqllite

Sqllite是什么? SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 为什么用Sqllite? 不需要一个单独的服务器进程或操作的系统(无服...

梓隽的博客 9186

Android如何使用SQLlite数据库

先写一个类,继承自SQLiteOpenHelper public class MyDatabaseHelper extends SQLiteOpenHelper { //声明一个Context private Context context; //原本的重写方法很多用不到的参数 这里直接删除了,第二个参数为数据库的名字(需要用db结尾) // 调用父类的时候传...

南 墙 1万+

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库,它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中,这意味着数据库的创建和维护都非常简单。

AI数据工厂 8412

【SQLite预习课1】SQLite简介——MySQL的简洁版

本文讲解 SQLite 是什么,和 MySQL 相比有什么优势,介绍 SQLite 的历史和基本命令和语法,包括创建数据库、创建学生表、新增学生数据示例,可以给 SQLite 入门者带来帮助。

Designer 小郑的技术博客 4493

OpenWebUI外部模型配置异常排查与修复指南

本文详细解析了OpenWebUI外部模型配置异常的常见问题及解决方案,包括隐藏字符、数据库锁死等典型现象。通过错误日志分析和数据库修复实战指南,帮助开发者快速定位并解决配置问题,确保OpenWebUI与第三方大模型的稳定连接。

weixin_29205061的博客 313

android mysql sqlite_Android :SQLlite数据库 使用手册

前言在Android开发中,主要的数据存储有5种,具体如下示意图其中,SQLite数据库的存储方式 非常常用今天我将带大家全面了解关于Android SQLite数据库的操作(增、删、查、改)目录目录1. SQLlite数据库 简介示意图2. SQLiteOpenHelper类2.1 简介示意图2.2 SQLiteOpenHelper类 常用方法/*** 创建数据库*/// 1. 创建 or 打...

weixin_36328790的博客 318

从MRF8P9040N数据手册到ADS仿真:手把手教你搞定LDMOS功放设计(附完整模型下载)

本文详细解析了MRF8P9040N LDMOS功率放大器的数据手册关键参数,并提供了在ADS中进行仿真的完整指南。从模型导入、直流工作点验证到负载牵引与阻抗匹配设计,逐步指导工程师完成高效功放设计。文章还包含调试技巧和常见问题解决方案,帮助优化射频功放性能。

weixin_27015733的博客 490

Android :这是一份详细 & 全面的 SQLlite数据库 使用手册

看到这篇文章的人不知道有多少是和我一样的Android程序员。35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

2401_83620927的博客 1096

海康威视SADP SDK实战:5分钟搞定局域网设备搜索(附C++代码示例)

本文详细解析了海康威视SADP SDK在局域网设备搜索中的高效应用,通过C++代码示例展示如何快速实现设备发现与信息获取。SADP协议支持全面设备信息采集和实时状态更新,适用于智能安防和物联网管理场景,帮助开发者5分钟内完成设备搜索功能集成。

rum55的博客 875

STM32学习笔记【江科协】【4-2】OLED显示屏

可以注意到接电源的GND和VCC同时和PB6、PB7号口连接,我们可以直接不初始化这两个引脚解决,因为STM32的引脚上电后,如果不初始化,默认是浮空输入的模式,在这个模式下,引脚不会输出电平,所以不会有什么影响,或者直接给PB6口输出低电平,PB7口输出高电平,用GPIO口直接给OLED供电,这个也是没问题的,因为OLED的功率很小这个也是可以驱动的,不过用GPIO口供电不是很规范,实际项目还是用电源供电。然后点击这里放大镜里面带d的图标,进入调试模式,这个界面里,

m0_74651303的博客 1595

Android :这是一份详细 & 全面的 SQLlite数据库 使用手册(1)

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。提升架构认知不是一蹴而就的,它离不开刻意学习和思考。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!

2401_84519859的博客 696

【小白教程】本地部署VLM-R1模型(使用Docker)

通过Docker本地部署VLM-R1大模型,详细教程。

m0_69855053的博客 2941

2024年Android最新Android :这是一份详细 & 全面的 SQLlite数据库 使用手册,2024年最新Android学习笔记在互联网上火了

**创建数据库子类,继承自SQLiteOpenHelper类需 复写 onCreat()、onUpgrade()*/// 数据库版本号/**构造函数在SQLiteOpenHelper的子类中,必须有该构造函数*/// 参数说明// context:上下文对象// name:数据库名称// param:一个可选的游标工厂(通常是 Null)// version:当前数据库的版本,值必须是整数并且是递增的状态// 必须通过super调用父类的构造函数。

2301_82242351的博客 979

新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)

本文通过‘东北天(ENU)’和‘右前上(RFU)’坐标系,详细解析惯性导航中的姿态矩阵概念。包含Python代码验证,帮助新手快速理解坐标变换、欧拉角及旋转矩阵的构建与应用,特别强调有限转动不可交换性与无限转动次序无关的区别。

weixin_29062255的博客 332

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

Android中怎样使用Navicat可视化查看sqllite的数据库(查看db文件)

场景 Android中在将数据存储到sqllite数据库后,会在手机内部存储空间中生成db数据库文件。 怎样通过软件来查看数据库的表以及数据。 注: 博客:https://blog.youkuaiyun.com/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 首先手机连接电脑,打开Android Studio 并能成功连接进入调试。 在Android Studio 右边Device FIle Explorer中下的 data/data/你

BADAO_LIUMANG_QIZHI的博客 4170

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5242

安卓开发连接sqllite用例代码

安卓开发连接sqlite用例代码

小太阳的博客 1517

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android数据库(SqlLite)操作和db文件查看

操作步骤很简单,首先导入sqlLite 的DB文件(即File Explorer   /data /data/),然后进行各种sql操作。 下面是我的代码: package com.xiaoshan.udp.client.db; import android.content.ContentValues; import android.content.Context; import and

小单的博客专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android 数据库之sqllite详解

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,...

X_Y2018的博客 1368

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: SharedPreferencesCompat的使用
下一篇: Android中ExpandableListView的使用(一)
darryrzhong
博客等级 码龄9年 34粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值