• 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。

  • 相关阅读:
    js中的日期控件My97 DatePicker
    list中慎用remove
    ehcache注解全面解析
    servlet
    SpringMVC注解@RequestMapping全面解析
    SpringMVC注解@RequestParam全面解析
    lucene全文检索
    jenkins和hudson
    Mysql与PostgreSql数据库学习笔记
    前端学习笔记
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4585254.html
Copyright © 2020-2023  润新知