zoukankan      html  css  js  c++  java
  • Android下的数据储存方式(三)

    Android下最好的数据储存方式:关系型数据库sqlite。

    数据库的创建:使用SqliteOpenHelper类

    结合SqliteOpenHelper类和SQLiteDatabase类的帮助,我们可以方便地对数据库进行CURD操作。

    数据库的创建:

    我们主要通过在SqliteOpenHelper类的onCreate方法中创建数据库表。

    那么,onCreate方法又是在什么时候执行的呢?

    我们先写一下代码:

    package com.whathecode.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DatabaseHelper extends SQLiteOpenHelper
    {
    
    	public static final String CREATE_TABLE = "create table student("
    			+ "id integer primary key," + "age integer," + "name char(20))";
    
    	public DatabaseHelper(Context context)
    	{
    		super(context, "dbsample.db", null, 1);
    	}
    
    	@Override
    	public void onCreate(SQLiteDatabase db)
    	{
    		db.execSQL(CREATE_TABLE);
    	}
    
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    	{
    
    	}
    
    }

    通过上面的代码,我们可以创建一个dbsample.db的数据库。

    实际上,当我们通过new关键字创建这个类的实例的时候,数据库文件并没有被创建出来。

    事实上是,数据库是我们第一次连接的时候创建的。

    亦即是通过SqliteOpenHelper的getReadableDatabase()方法或者getWritableDatabase方法的时候创建

    SqliteOpenHelper的onCreate方法也是在这个时候执行。

    因此,我们可以在onCreate方法中创建需要的表。

    下面是MainActivity的代码:

    package com.whathecode.sqlitedemo;
    
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    
    import com.whathecode.db.DatabaseHelper;
    
    public class MainActivity extends Activity
    {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		//执行到这行的时候数据库没有被创建
    		DatabaseHelper dbh = new DatabaseHelper(this);
    		
    		//当执行到这行的时候数据被被创建出来
    		SQLiteDatabase readableDatabase = dbh.getReadableDatabase();
    	}
    }

    创建好数据库后,我们就可以对数据库进行CURD操作。

     

    向数据库中插入数据:

    使用SQLiteDatabase类中execSQL的方法,我们可以方便地操作数据库:

    注意getReadableDatabase返回的数据库对象是只读的。

    现在我们需要写入数据库,就需要调用getWritableDatabase方法

     

    更新后的MainActivity代码:

    package com.whathecode.sqlitedemo;
    
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    import com.whathecode.db.DatabaseHelper;
    
    public class MainActivity extends Activity
    {
    	SQLiteDatabase readableDatabase = null;
    	DatabaseHelper dbh = null;
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		//执行到这行的时候数据库没有被创建
    		 dbh = new DatabaseHelper(this);
    		
    		//当执行到这行的时候数据被被创建出来
    		readableDatabase = dbh.getReadableDatabase();
    	}
    	
    	public void insertData(View view)
    	{
    		SQLiteDatabase writableDatabase = dbh.getWritableDatabase();
    		if (writableDatabase.isOpen())
    		{
    
    			for (int i = 0; i < 20; i++)
    			{
    				//执行数据插入操作
    				writableDatabase.execSQL("insert into student values(?,?,?);",
    						new Object[] { i + 2, 10 + i, "android " + i });
    			}
    			writableDatabase.close();
    			Toast.makeText(this, "数据插入成功", Toast.LENGTH_SHORT).show();
    		}
    	}
    }

    看一下运行结果:

    a

    现在,我们使用sqlite3工具看看数据是否真的被插入了

    a

    看到了吧,数据一条不少被插入了.

    SqliteDatabase类除了execSQL方法外还有其他的方法可以操作数据库:

    • create(SQLiteDatabase.CursorFactory factory)
    • delete(String table, String whereClause, String[] whereArgs)
    • query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
    • rawQuery(String sql, String[] selectionArgs)

     

    当使用execSQL执行任何的查詢语句都是没有返回结果的。

    如果想返回结果,就要使用rawQuery方法。

     

    当然,上面这些只是部分方法,其他的大家可以到官网查看API

    其他的数据库查找,更新,删除操作都只是依瓢画葫芦。大家可以自行研究一下。

  • 相关阅读:
    微软新一代Surface,该怎么看?
    Windows 8创新之路——样章分享
    微软新一代Surface发布,参数曝光
    从MS Word到Windows Live Writer
    《计算机科学基础》学习笔记_Part 1 Computer and Data
    我看Windows 8.1
    Hyper-V初涉_早期Windows安装虚拟硬件驱动
    2020.09.05【省选组】模拟 总结
    2020.08.15【NOIP提高组】模拟 总结
    2020.08.14【省选B组】模拟 总结
  • 原文地址:https://www.cnblogs.com/ai-developers/p/4257778.html
Copyright © 2011-2022 走看看