1. 程式人生 > >實驗六 資料儲存和訪問

實驗六 資料儲存和訪問

實驗六 資料儲存和訪問

實驗目的

分別使用sqlite3工具和Android程式碼的方式建立SQLite資料庫。在完成建立資料庫的工作後,程式設計實現基本的資料庫操作功能,包括資料的新增、刪除和更新。

實驗要求

  1. 建立一個學生管理的應用,基本資訊包含學生姓名,班級,學號。採用資料庫儲存這些資訊。
  2. 應用應該至少包含資訊錄入和刪除功能。
  3. 資料顯示考慮採用ListView。

工程程式碼

專案工程結構圖
在這裡插入圖片描述

MainActivity:

package
wyx.exp_6; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public
class MainActivity extends AppCompatActivity { EditText e1; EditText e2; EditText e3; EditText e4; Button addone; Button showall; Button clearshow; Button deleteall; Button deleteone; Button selectone; Button updateone; private DBAdapter db; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); e1=(EditText)findViewById(R.id.name); e2=(EditText)findViewById(R.id.age); e3=(EditText)findViewById(R.id.height); e4=(EditText)findViewById(R.id.ID); addone=(Button)findViewById(R.id.addone); showall=(Button)findViewById(R.id.showall); clearshow=(Button)findViewById(R.id.clearshow); deleteall=(Button)findViewById(R.id.deleteall); deleteone=(Button)findViewById(R.id.deleteone); selectone=(Button)findViewById(R.id.selectone); updateone=(Button)findViewById(R.id.updateone); final ListView lv1=(ListView)findViewById(R.id.lv1); final List<String> list=new ArrayList<String>(); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item, list ); db=new DBAdapter(this); db.open(); addone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { People people=new People(); people.Name=e1.getText().toString(); people.Age=Integer.parseInt(e2.getText().toString()); people.Height=Float.parseFloat(e3.getText().toString()); db.insert(people); String s="新增成功!"; list.add(s); lv1.setAdapter(adapter); } }); showall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.clear(); People[] peoples=db.getAllData(); if(peoples==null) { String s="資料庫為空!!"; list.add(s); lv1.setAdapter(adapter); } else{ for(int i=0;i<peoples.length;i++) { People people=peoples[i]; list.add(people.toString()); lv1.setAdapter(adapter); } } } }); selectone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.clear(); People[] peoples=db.getOneData(Long.parseLong(e4.getText().toString())); if(peoples==null) { String s="沒有找到相應的資料!!"; list.add(s); lv1.setAdapter(adapter); } else{ list.add(peoples[0].toString()); lv1.setAdapter(adapter); } } }); deleteone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.clear(); People[] peoples=db.getOneData(Long.parseLong(e4.getText().toString())); if(peoples==null) { String s="沒有找到相應的資料!!"; list.add(s); lv1.setAdapter(adapter); } else{ db.deleteOneData(Long.parseLong(e4.getText().toString())); } } }); deleteall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { db.deleteAllData(); adapter.clear(); adapter.notifyDataSetChanged() ; } }); updateone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { list.clear(); People[] peoples=db.getOneData(Long.parseLong(e4.getText().toString())); if(peoples==null) { String s="沒有找到相應的資料!!"; list.add(s); lv1.setAdapter(adapter); } else{ People people=peoples[0]; people.Name=e1.getText().toString(); people.Age=Integer.parseInt(e2.getText().toString()); people.Height=Float.parseFloat(e3.getText().toString()); db.updateOneData(Long.parseLong(e4.getText().toString()),people); } } }); clearshow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { adapter.clear(); adapter.notifyDataSetChanged() ; } }); } }

DBAdapter

package wyx.exp_6;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by wyx on 2018/10/29.
 */

public class DBAdapter {
    private static final String DB_NAME = "people.db";
    private static final String DB_TABLE = "peopleinfo";
    private static final int DB_VERSION = 1;

    public static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_AGE = "age";
    public static final String KEY_HEIGHT = "height";

    private SQLiteDatabase db;
    private final Context context;
	private DBOpenHelper dbOpenHelper;

    private static class DBOpenHelper extends SQLiteOpenHelper {
        public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
        {
            super(context,name,factory,version);
        }
        private static final String DB_CREATE = "create table " +
                DB_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " +
                KEY_NAME+ " text not null, " + KEY_AGE+ " integer," + KEY_HEIGHT + " float);";

        @Override
        public void onCreate(SQLiteDatabase _db) {
            _db.execSQL(DB_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {
            _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
            onCreate(_db);

        }


    }

    public DBAdapter(Context _context) {
        context = _context;
    }

    public void open() throws SQLiteException {
        dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION);
        try {
            db = dbOpenHelper.getWritableDatabase();
        }catch (SQLiteException ex) {
            db = dbOpenHelper.getReadableDatabase();
        }
    }

    public void close() {
        if (db != null){
            db.close();
            db = null;
        }
    }

    public long insert(People people) {
        ContentValues newValues = new ContentValues();

        newValues.put(KEY_NAME, people.Name);
        newValues.put(KEY_AGE, people.Age);
        newValues.put(KEY_HEIGHT, people.Height);

        return db.insert(DB_TABLE, null, newValues);
    }

    public long deleteAllData() {
        return db.delete(DB_TABLE, null, null);
    }

    public long deleteOneData(long id) {
        return db.delete(DB_TABLE,  KEY_ID + "=" + id, null);
    }

    public long updateOneData(long id , People people){
        ContentValues updateValues = new ContentValues();
        updateValues.put(KEY_NAME, people.Name);
        updateValues.put(KEY_AGE, people.Age);
        updateValues.put(KEY_HEIGHT, people.Height);

        return db.update(DB_TABLE, updateValues,  KEY_ID + "=" + id, null);
    }

    private People[] ConvertToPeople(Cursor cursor){
        int resultCounts = cursor.getCount();
        if (resultCounts == 0 || !cursor.moveToFirst()){
            return null;
        }
        People[] peoples = new People[resultCounts];
        for (int i = 0 ; i<resultCounts; i++){
            peoples[i] = new People();
            peoples[i].ID = cursor.getInt(0);
            peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME));
            peoples[i].Age = cursor.getInt(cursor.getColumnIndex(KEY_AGE));
            peoples[i].Height = cursor.getFloat(cursor.getColumnIndex(KEY_HEIGHT));
            cursor.moveToNext();
        }
        return peoples;
    }

    public People[] getOneData(long id) {
        Cursor results =  db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, KEY_ID + "=" + id, null, null, null, null);
        return ConvertToPeople(results);
    }

    public People[] getAllData() {
        Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, null, null, null, null, null);
        return ConvertToPeople(results);
    }


}


People:

package wyx.exp_6;

/**
 * Created by wyx on 2018/10/29.
 */

public class People {
    public int ID = -1;
    public String Name;
    public int Age;
    public float Height;

    @Override
    public String toString() {
        String result="";
        result += "ID:" + this.ID + ",";
        result += "姓名:" + this.Name + ",";
        result += "年齡:" + this.Age + ",";
        result += "身高:" + this.Height;
        return result;
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="wyx.exp_6.MainActivity"