该工程的功能是实现关于数据库的操作,即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。