Android-SQLite
SQLite 是一个轻量级数据库,大小才几十K,可是麻雀虽小,五脏俱全;
与Java的JDBC和ODBC不同。SQLite的增删改查是通过SQLiteOpenHelper和SQLiteDatabase进行的;
SQLiteOpenHelper用法
getReadableDatabase() 返回一个可读的SQLiteDatabase
getWriteableDatabase() 返回一个可写的SQLiteDatabase
onCreate(SQLiteDatabase db)
onOpen(SQLiteDatabase db)
onUpgrade(SQLiteDatabase db,int old)
与其它组件不同额事,SQLiteOpenHelper的onCreate方法并非创建的时候会调用,而是当调用getReadableDatabase()或者getWriteableDatabase()时会被调用(仅仅第一次的时候调用)
在使用SQLite时。需编写一个类继承SQLiteOpenHelper并实现其构造方法、onCreate、OnUpdate等方法;
例如以下:
DatabaseHelper.java
<span style="font-family:SimHei;font-size:18px;">package com.example.testsqlite; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DatabaseHelper extends SQLiteOpenHelper { private static int VERSION=1; //数据库的版本号 public DatabaseHelper(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } public DatabaseHelper(Context context,String name,int version){ this(context, name, null, version, null); } public DatabaseHelper(Context context,String name){ super(context,name,null,VERSION,null); } @Override public void onCreate(SQLiteDatabase db) { String sql="create table user(id int,name varchar(20))"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { //当构造方法传进的Version值不同一时候触发 Log.e("Potato", "onUpgrade"); } }</span>
当中。2參数与3參数的构造方法是我自己写的,为了方便调用。
在OnCreate中(也就是第一个创建时,一般新建一张表,系统自己主动识别,有则不创建。无则创建);
MainActivity.java
<span style="font-family:SimHei;font-size:18px;">package com.example.testsqlite; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button buttonCreate; private Button buttonInsert; private Button buttonDelete; private Button buttonUpdate; private Button buttonQuery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonCreate=(Button)findViewById(R.id.create); buttonInsert=(Button)findViewById(R.id.insert); buttonDelete=(Button)findViewById(R.id.delete); buttonUpdate=(Button)findViewById(R.id.update); buttonQuery=(Button)findViewById(R.id.query); ButtonListener buttonListener=new ButtonListener(); buttonCreate.setOnClickListener(buttonListener); buttonInsert.setOnClickListener(buttonListener); buttonDelete.setOnClickListener(buttonListener); buttonUpdate.setOnClickListener(buttonListener); buttonQuery.setOnClickListener(buttonListener); } class ButtonListener implements OnClickListener{ @Override public void onClick(View view) { if(view.getId()==R.id.create){ DatabaseHelper databaseHelper=new DatabaseHelper(MainActivity.this, "db_potato"); //第二个參数是数据库的名字 SQLiteDatabase dbReader=databaseHelper.getReadableDatabase(); Log.e("Potato", "创建成功!"); dbReader.close(); } if(view.getId()==R.id.insert){ DatabaseHelper databaseHelper=new DatabaseHelper(MainActivity.this, "db_potato"); //第二个參数是数据库的名字 SQLiteDatabase dbWriter=databaseHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("id", 1); values.put("name", "potato"); dbWriter.insert("user", null, values);//表名,null。值对象 Log.e("Potato", "插入成功!"); dbWriter.close(); } if(view.getId()==R.id.delete){ DatabaseHelper databaseHelper=new DatabaseHelper(MainActivity.this, "db_potato"); //第二个參数是数据库的名字 SQLiteDatabase dbWriter=databaseHelper.getWritableDatabase(); dbWriter.delete("user", "id=?", new String[]{"1"}); Log.e("Potato", "删除成功!
"); dbWriter.close(); } if(view.getId()==R.id.update){ DatabaseHelper databaseHelper=new DatabaseHelper(MainActivity.this, "db_potato"); //第二个參数是数据库的名字 SQLiteDatabase dbWriter=databaseHelper.getWritableDatabase(); ContentValues newValue=new ContentValues(); newValue.put("name", "tomato"); dbWriter.update("user", newValue, "id=?", new String[]{"1"}); Log.e("Potato", "更改成功!"); } if(view.getId()==R.id.query){ DatabaseHelper databaseHelper=new DatabaseHelper(MainActivity.this, "db_potato"); //第二个參数是数据库的名字 SQLiteDatabase dbReader=databaseHelper.getReadableDatabase(); Cursor cursor=dbReader.rawQuery("select * from user where id=?
", new String[]{"1"}); while(cursor.moveToNext()){ Log.e("Potato", cursor.getString(cursor.getColumnIndex("name"))); } dbReader.close(); } } } } </span>
activity_main.xml
<span style="font-family:SimHei;font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/create" android:layout_width="244dp" android:layout_height="wrap_content" android:text="create"/> <Button android:id="@+id/insert" android:layout_width="244dp" android:layout_height="wrap_content" android:text="insert" /> <Button android:id="@+id/delete" android:layout_width="244dp" android:layout_height="wrap_content" android:text="delete" /> <Button android:id="@+id/update" android:layout_width="244dp" android:layout_height="wrap_content" android:text="update" /> <Button android:id="@+id/query" android:layout_width="244dp" android:layout_height="wrap_content" android:text="query" /> </LinearLayout> </span>
下附adb操作SQLite
在adb中操作数据库
在dos界面中输入adb shell 进入Android模拟器的底层,即其Linux系统
假设进不去。有两个可能:
1.环境变量没配置好
2.没有打开虚拟机
3.未知原因,输入adbkill-server之后再输入adbshell就可以解决
进入底层后,进行例如以下操作
cd data
cd data
cd 包名(如 cdcn.potato.Game)
cd databasees
sqlite3 数据库名
然后就能够对数据库进行
附:
.schema 能够查看表名
ls能够查看全部内容