Android学习笔记——SQLite

该工程的功能是实现关于数据库的操作,即creat、update、insert、query、delete

调试的时候请用模拟器,用真机调试的时候进入cmd-adb shell,再进入cd data/data的时候会显示permission denied

 

以下的代码是MainActivity.java中的代码

package com.example.sqlite;

import com.example.sqlite.db.DataBaseHelper;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    
    private Button createDBButton ;
    private Button insertDBButton ;
    private Button updateDBButton ;
    private Button queryDBButton ;
    private Button deleteDBButton ;
    private EditText input_id ;
    private EditText input_name ;
    private TextView test ;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //此处为创建数据库, 通过按钮监听器来实现
        createDBButton = (Button) findViewById(R.id.creatDB);
        createDBButton.setOnClickListener(new CreateDBListener());
        //此处为插入数据到数据库中
        insertDBButton = (Button) findViewById(R.id.insert);
        insertDBButton.setOnClickListener(new InsertListener());
        //此处为更新数据表
        updateDBButton = (Button) findViewById(R.id.update);
        updateDBButton.setOnClickListener(new updateListener());
        //此处为更新数据表
        queryDBButton = (Button) findViewById(R.id.query);
        queryDBButton.setOnClickListener(new queryListener());
        //此处为删除数据内容
        deleteDBButton = (Button) findViewById(R.id.delete);
        deleteDBButton.setOnClickListener(new deleteListener());
        //此处为显示查询结果
        test = (TextView) findViewById(R.id.result);
        test.setText("name") ;
        //此处为添加数据的选项
        //input_id = (EditText) findViewById(R.id.input_id);
        //input_name = (EditText) findViewById(R.id.input_name);
    }
    
    class CreateDBListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            // 此处为调用另外一个类中的方法来创建数据库, 或者直接来创建数据库

            String db_name = "test_mars_db_one" ;
            System.out.println("Create");
            DataBaseHelper dbHelper = new DataBaseHelper(MainActivity.this, db_name) ;
            SQLiteDatabase db = dbHelper.getReadableDatabase() ;
        } 
    }
    
    class InsertListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            //生成一个ContentValues对象
            ContentValues values = new ContentValues() ;
            //想该对象当中插入键值对,其中键是列名,值是希望插入到这列的值,值必须
            values.put("id", 1) ;
            values.put("name", "zhangsan") ;
            System.out.println("Insert");
            DataBaseHelper dbHelper = new DataBaseHelper(MainActivity.this, "test_mars_db_one") ;
            SQLiteDatabase db = dbHelper.getWritableDatabase() ;
            //调用insert方法, 就可以将数据插入到数据库中
            db.insert("user", null, values) ;
        }
        
    }

    class updateListener implements OnClickListener{
        @Override
        public void onClick(View arg0) {
            // 此处为更新数据内容   
            System.out.println("Update");
            DataBaseHelper dbHelper = new DataBaseHelper(MainActivity.this, "test_mars_db_one") ;
            SQLiteDatabase db = dbHelper.getWritableDatabase() ;
            ContentValues values = new ContentValues() ;
            values.put("name", "zhangsanfeng") ;
            //第一个参数为要更新的表名
            //第二个参数为一个ContentValues对象
            //第三个参数是where语句
            db.update("user", values, "id=?", new String[]{"1"}) ;
        }
    }
    
    
    class queryListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            // 此处为查询数据内容, 并用到cursor来实现
            System.out.println("query");
            DataBaseHelper dbHelper = new DataBaseHelper(MainActivity.this, "test_mars_db_one") ;
            SQLiteDatabase db = dbHelper.getWritableDatabase() ;
            Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"2"},null,null,null,null) ;
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name")) ;
                System.out.print("query---> " + name) ;
                //name += name ;
                test.setText(name) ;
            }
        }
    }
    
    class deleteListener implements OnClickListener{
        public void onClick(View v) {

         //此处为实现删除数据
            System.out.println("delete");
            DataBaseHelper dbHelper = new DataBaseHelper(MainActivity.this, "test_mars_db_one") ;
            SQLiteDatabase db = dbHelper.getWritableDatabase() ;

            //删除特定条件的数据
            //db.delete("user","id=?",new String[]{"2"});
            //删除所有数据
            db.delete("user",null,null);

        }
    }

}
    
    
    

 

以下的代码是DataBaseHelper.java中的代码

package com.example.sqlite.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能
//第一,getReadableDatabase(),getWriteableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作

public class DataBaseHelper extends SQLiteOpenHelper {
    
    private static final int VERSION = 1;
    //在SQLiteOpenHelper的子类当中,必须有该构造函数
    public DataBaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        //必须通过super调用父类当中的构造函数
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
    
    public DataBaseHelper(Context context,String name){
        this(context,name,VERSION);
    }
    
    public DataBaseHelper(Context context,String name,int version){
        this(context,name,null,version);
    }
    
    //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabase对象的时候,才会调用该方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        System.out.println("Create a Database");
        //execSQL函数用于执行SQL语句
        db.execSQL("create table user(id int,name varchar(20))");
        System.out.println("Create a Database successful");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        System.out.println("update a DataBase");
    }

}

 

以下的代码是activity_main.xml中的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >
    
    
    <Button
        android:id="@+id/creatDB"
        android:text="creatDatabase"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    
    <Button
        android:id="@+id/update"
        android:text="updateDatabase"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    
    <Button
        android:id="@+id/insert"
        android:text="Insert"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    
    <Button
        android:id="@+id/query"
        android:text="query"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    
    <Button
        android:id="@+id/delete"
        android:text="delete"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"    
        />
    
    
    <TextView
        android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</LinearLayout>

 

利用adb shell管理虚拟机的数据库

Google Android操作系统内核基于Linux,其数据库采用了sqlite。sqlite是一个开源的小巧的大小小于500KB的微型数据库系统。

Android Debug Bridge(adb)是Android下的一个让你管理手机或者手机虚拟机的多功能工具。

本文主要介绍如何在虚拟机上操作sqlite数据库。

Google的Android的开发包内有个虚拟机,启动虚拟机后,在window命令行窗口内输入adb shell即可登入设备,我们就拥有了一个Linux环境。

 

图1:Android虚拟机

 

图2:adbshell登入Linux系统

Android把数据都存放在data/data目录下。

我们使用cd命令转到data/data目录下:

cd /data/data

ls显示所有数据

 

你会看到像我目录一样有个mars.sqlite3文件夹。

cd mars.sqlite3/databases进入mars.sqlite3/databases目录

ls命令你会看到test_mars_db,这就是我们的创建的测试数据库文件

在#提示符下输入以下命令sqlite3 test_mars_db;登入数据库

 

图3:登入sqlite3数据库

这个命令会打开test_mars_db数据库,若test_mars_db数据库不存在,则会新建一个名为

test_mars_db的数据库。(注意数据库名大小写有区别)

在sqlite>提示符下输入

.help这个命令让我们看到许多命令

.tables查看所有表,例如我的系统里有android_metadata和user两个表

查询表user数据内容,我们输入

Select * from user;我们查出三条数据。

 

图4:显示查询结果

这个数据库的显示方式让我们习惯了Oralce,看得很不舒服,输入

以下两个命令,让我们改变这种显示模式。

.mode column

.header on

再输入select * from user;我们看着舒服多了。

 

图5:改变数据显示模式

.exit命令退出sqlite,返回到#提示符。

在#提示符下输入exit退出Linux。

 

posted @ 2015-06-18 10:53  tonglin0325  阅读(214)  评论(0编辑  收藏  举报