android學習筆記(六)——數據庫操作

之前已經介紹了android的數據存儲的操作,接下來就來介紹android數據庫操作,對於數據庫的基本增刪查改,在這裏就不多說了,直接開始介紹android的sqlite數據庫運用方式。
1.首先需要定義sqlite的數據庫對象
private SQLiteDatabase mydatabase=null;

2.獲取數據庫操作指針,通過context直接獲取,這種方式創建的數據庫位於/data/data/{包名}/databases/,openOrCreateDatabase函數,第一個參數爲需要打開或創建的數據庫名稱,第二個參數爲模式,即存儲模式,和上一篇數據存儲的模式大同小異,第三個參數爲cursorFactory,用於查詢時實例化一個光標,可以填爲null

    try{
            mydatabase=this.openOrCreateDatabase("mydata.db",MODE_PRIVATE, null);
        }catch(Exception e){
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
        }

3.打開數據庫之後就是基本的數據庫的操作了,因爲sql語句和其他數據庫區別不大,就不詳細說了,直接開始查詢的介紹,對於查詢數據庫操作首先需要獲得一個實例化光標,一種方式是在創建或打開數據庫時載入工廠類,另一個就是通過rawQuery來獲得實例化光標,這裏主要介紹後者,示例代碼如下:

  public void updataview(){
        Cursor cur=null;
        List<String> slist=new ArrayList<String>();
        String sql="select * from newtable";
        try{
           cur=mydatabase.rawQuery(sql,new String[]{});

        }catch(Exception e){
            Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
        }
      //movenext爲向下移動,到沒有返回false
        while(cur.moveToNext())                               
        {
            slist.add(cur.getString(0));
            slist.add(cur.getString(1));
        }
       //記住在用完後關閉光標
        cur.close();   
        listshow adapter=new listshow(SqlDemo.this,slist);
        adapter.show();
    }

在取得cur以後,可以按照自己的習慣將數據存入相應的list或者String數組中,在之後將其顯示在界面上,這裏一般採用動態生成的代碼,定義一個佈局,將動態定義的組件通過addView的方式加進去即可

public void show(){
            table=(TableLayout)SqlDemo.this.findViewById(R.id.table);
            table.removeAllViews();
            for(int i=0;i<list.size();i=i+2){
                try{
                TableRow row=new TableRow(context);
                TextView text=new TextView(context);
                text.setText(list.get(i).toString());
                text.setId(i);
                TextView text1=new TextView(context);
                text1.setText(list.get(i+1).toString());
                text1.setId(i+1);
                row.addView(text);
                row.addView(text1);
                table.addView(row);
                }catch(Exception e){
                    Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }

示例代碼
.java

package com.example.ui_demo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
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.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

public class SqlDemo extends Activity {
    private String []mysql={"讀取表","刪除表","創建表","插入表"};
    //數據庫操作
    private SQLiteDatabase mydatabase=null;
    private TableLayout table=null;
    private ListView list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sql_demo);
        //創建或打開數據庫
        try{
            mydatabase=this.openOrCreateDatabase("mydata.db",MODE_PRIVATE, null);
        }catch(Exception e){
            Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG).show();
        }
        //table=(TableLayout)this.findViewById(R.id.table);
        list=(ListView)this.findViewById(R.id.sqllist);
        myadapter m=new myadapter(this);
        list.setAdapter(m);

    }
    public void setupView(){

    }
    public class myadapter extends BaseAdapter{
        private Context context;
        public myadapter(Context context){
            this.context=context;
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mysql.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View vi, ViewGroup vg) {

            // TODO Auto-generated method stub
            Button button=new Button(SqlDemo.this);
            button.setText(mysql[position]);
            button.setId(position);
            buttonclick m=new buttonclick();
            button.setOnClickListener(m);

            return button;
        }

    }
    public class listshow{
        private List<String> list;
        private Context context;
        public listshow(Context context,List<String> list){
            this.context=context;
            this.list=list;
        }
        public void show(){
            table=(TableLayout)SqlDemo.this.findViewById(R.id.table);
            table.removeAllViews();
            for(int i=0;i<list.size();i=i+2){
                try{
                TableRow row=new TableRow(context);
                TextView text=new TextView(context);
                text.setText(list.get(i).toString());
                text.setId(i);
                TextView text1=new TextView(context);
                text1.setText(list.get(i+1).toString());
                text1.setId(i+1);
                row.addView(text);
                row.addView(text1);
                table.addView(row);
                }catch(Exception e){
                    Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }
    }
    /* public class listshow extends BaseAdapter{
        private Context context;
        private List<String> list;
        public listshow(Context context,List<String> list){
            this.list=list;
            this.context=context;
            //this.context.setTheme(android.R.layout.simple_expandable_list_item_2);
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View vi, ViewGroup vg) {
            // TODO Auto-generated method stub
            TableLayout table=(TableLayout)vi.findViewById(R.id.table);
            TextView text=new TextView(context);
            text.setId(position);
            text.setText(list.get(position).toString());
            table.addView(text);
            return table;
        }

    }*/
    public class mydata {
        private String id;
        private String name;
        public void setmydata(String id,String name){
            this.id=id;
            this.name=name;
        }

    }
    public void updataview(){
        Cursor cur=null;
        List<String> slist=new ArrayList<String>();
        String sql="select * from newtable";
        try{
           cur=mydatabase.rawQuery(sql,new String[]{});

        }catch(Exception e){
            Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
        }

        while(cur.moveToNext())                               
        {
            slist.add(cur.getString(0));
            slist.add(cur.getString(1));
        }

        cur.close();   
        listshow adapter=new listshow(SqlDemo.this,slist);
        adapter.show();
    }
    public class buttonclick implements OnClickListener{
        private int i=0;
        @Override
        public void onClick(View vi) {
            // TODO Auto-generated method stub
            if(vi.getId()==0){
                //查詢表
                updataview();




            }else if(vi.getId()==1){
                //刪除表
                String sql="DROP TABLE"+" newtable";
                try{
                      mydatabase.execSQL(sql);               
                }catch(Exception e){
                        Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
                }
                updataview();
            }else if(vi.getId()==2){

                    //不存在創建表
                   String create="CREATE TABLE"+" IF NOT EXISTS"+" newtable"+" (ID INTEGER,NAME TEXT)";
                   try{
                      mydatabase.execSQL(create);
                   }catch(Exception e){
                       Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
                   }
                   updataview();
            }else if(vi.getId()==3){

                    //插入表
                    String insert="insert into "+"newtable"+" values('"+"2"+"','"+"pengchen01"+"');";
                    try{
                          mydatabase.execSQL(insert);
                       }catch(Exception e){
                           Toast.makeText(SqlDemo.this,e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                    updataview();
            }

        }

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.sql_demo, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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="com.example.ui_demo.SqlDemo" >

    <TableLayout
        android:id="@+id/table"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    <TableRow>
    <TextView
        android:id="@+id/textid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="id" />
      <TextView
        android:id="@+id/textname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="name" />
    </TableRow>

   </TableLayout>
    <ListView
        android:id="@+id/sqllist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="14dp" >
    </ListView>

</RelativeLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章