SQLite数据库存储

SQLite数据库简介:SQLite是一种轻量级数据库,是安卓的内置数据库,它运算快,占内存小,只占几百KB的内存。比其他的数据库运行简单得多,而且无需设置用户名和密码。适用于存储数据量大,结构性复杂的数据,在这些情况下,相比较用SharedPerference数据存储,用SQLite数据库存储要便捷的多。

下面来学习一下SQLite数据库吧:
SQLite数据库由好多小环节组成,例如数据库的创建,升级数据库,添加数据,更改数据,删除数据,读取数据等。
1.数据库的创建:
数据库创建之前先来学习一下数据库的数据类型吧
text 文本型(类似字符串的都可以用这种类型)
integer 整型
real浮点型

建表语句示例:
“create table stu( //用的是括号
id integer primary key autoincrement not null,” +    //逗号不要忘记
“name text,” +
“score real
)”;
建表语句下面代码中会有示例,但切记格式和内容不能写错,一方面会报错运行不了,另一方面错误还不好找。
primary key主键
autoincrement 自增长
not null 不为空

1.数据库的创建

public class ass extends SQLiteOpenHelper {  //建一个数据库类,继承SQLiteOpenHelper抽象类

private Context context;
    public static  final String CREATE_BOOK="create table book("+"id integer primary key autoincrement," +
            "name text," +                        //创一个数据库表
            "ban text," +
            "nian integer4)";
    public ass(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        this.context=context;         //通过构造方法引入Activity的类名,用于下面的Toast的提示
    }

    @Override
    public void onCreate(SQLiteDatabase db) {  //onCreate方法只在创建时会调用一次,且仅此一次,除非更
                                                                 //新数据库时会再次调用
        db.execSQL(CREATE_BOOK);              //在onCreate方法中将数据列表创建好
        Toast.makeText(context,"dsfsdsdgsg",Toast.LENGTH_LONG).show();                  
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //  db.execSQL("drop table if exists book");   //在这里我先把这两句注释掉,为了和创建数据库区分
      //  onCreate(db);        //当更新数据库时要把onCreate中的db.execSQL注释掉,
           }    //此方法升用于数据库升级更新}
public class MainActivity extends AppCompatActivity {
    private ass as;
    private Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        as = new ass(this, "de", null, 1);//版本号传入2时,表示升级才可调用更新,以此类推,每更新一次自加1
        bt = findViewById(R.id.bt);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                as.getWritableDatbase();//创建数据库
            }

     });
    }
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.zhang.sqlite.MainActivity">

    <Button
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="100dp" />


LinearLayout>

2.实现数据库的增删改查


public class jichu extends SQLiteOpenHelper {//数据库创建这里上文有就不多加介绍了
    private Context context;
    String as="create table aqws("+"name text," +
            "namew text)";
    public jichu(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);

        this.context=context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(as);
        Toast.makeText(context,"dfssgsgsg",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVeq
sion) {
    }
}
public class Main3Activity extends AppCompatActivity {
private EditText e1;
    private EditText e2;
    private EditText e3;
private jichu ji;
    private Button b1;
    private Button b2;
    private Button b3;
    private Button b4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        BinID();
        ji=new jichu(Main3Activity.this,"aqws",null,1);//调用构造方法向数据库传参
        ji.getWritableDatabase();       //创建数据库
        //从这开始实现数据增删改查,每个按钮,实现一个功能
        b1.setOnClickListener(new View.OnClickListener() {//****添加数据***
            @Override
            public void onClick(View v) {
                SQLiteDatabase as=ji.getWritableDatabase();//在这些功能中都要实现SQLiteDatabase对象
                ContentValues values=new ContentValues(); 
                //这里使用的ContentValues,也是可以用Map的,而且Map能用的数据类型更多,那为何还要用ContentValues呢,
                //其实不用Map是为了防止Map向数据库中随意添加各种类型的数据。
                values.put("name",e1.getText().toString());//利用键值向对应项中添加数据
                values.put("namew",e2.getText().toString());
                as.insert("aqws",null,values);     //将数据插入列表中
            //第一个参数为列表名,第三个是ContentValues的对象
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {//*****删除数据***
            @Override
            public void onClick(View v) {
                SQLiteDatabase as=ji.getWritableDatabase();
                as.delete("aqws","name=?",new String[]{e1.getText().toString()});
//第一个参数是列表名,第二个参数是列表元素,可以用and添加多个来进行筛选,例如可写为"name=? and id>?"
//第三个是在new String[]{}的花括号里添加第二参数对应的值,添加顺序要相同

            }
        });
        b3.setOnClickListener(new View.OnClickListener() {//******更改数据*********
            @Override
            public void onClick(View v) {
                SQLiteDatabase as=ji.getWritableDatabase();
                ContentValues values=new ContentValues();
                values.put("name",e2.getText().toString());//获取用来替换的数据
                //    ("name"是数据库字段名
                as.update("aqws",values,"name=?",new String[]{e1.getText().toString()});
                // 第一个参数是列表名,第二个参数是ContentValues对象,第三个参数是列表元素,即字段名,与删除的方法一样可以
        //用and添加多个来进行筛选,例如可写为"name=? and id>?"

//第四个参数是在new String[]{}的花括号里添加第三参数对应的值,注意添加顺序要相同


            }
        });
        b4.setOnClickListener(new View.OnClickListener() {//*****查询数据************
            @Override
            public void onClick(View v) {
                SQLiteDatabase db=ji.getWritableDatabase();
                Cursor cursor=db.query("aqws",null,null,null,null,null,null);//用SQLiteDatabase对象调用游标
                if(cursor.moveToFirst()){          //用游标来浏览数据库里的数据
                    do{
                        String n=cursor.getString(cursor.getColumnIndex("name"));
                        e3.setText(n);//这里我是用setText来显示到EditText上,但这里我只能显示最后一个元
                                     //    素*****????****但也可以通过log或Toast来解决
                        Toast.makeText(Main3Activity.this,"dfssgsgsg"+n,Toast.LENGTH_SHORT).show();//用Toast来显示
                        Log.e("hh111q", "onClick: "+n );//用log来显示
                    }while (cursor.moveToNext());//当游标还可以指向下一个时,执行循环
                }cursor.close();  //最后不要忘记关掉游标
            }
        });
    }

    private void BinID() {     //绑定ID
        e1=findViewById(R.id.et1);
        e2=findViewById(R.id.et2);
        b1=findViewById(R.id.b1);
        b2=findViewById(R.id.b2);
        b3=findViewById(R.id.b3);
        e3=findViewById(R.id.et3);
        b4=findViewById(R.id.b4);
    }
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.zhang.sqlite.Main3Activity">

    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <EditText
        android:id="@+id/et3"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <Button
        android:textSize="25sp"
        android:text="增"
        android:id="@+id/b1"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <Button
        android:textSize="25sp"
        android:text="删"
        android:id="@+id/b2"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <Button
        android:id="@+id/b3"
        android:textSize="25sp"
        android:text="改"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <Button
        android:id="@+id/b4"
        android:textSize="25sp"
        android:text="查"
        android:layout_width="match_parent"
        android:layout_height="60dp" />

LinearLayout>

你可能感兴趣的:(SQLite数据库存储)