當前位置:首頁 > IT技術 > 移動平臺 > 正文

android使用SQlite數據庫存儲書名和作者
2021-09-16 11:41:31

實現效果圖:

?

(1)activity_main

?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bookname">
    </EditText>

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bookauthor">
    </EditText>

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/booklist">
    </ListView>
</LinearLayout>

(3)MainActivity

?

public class MainActivity extends AppCompatActivity implements OnItemClickListener{

    private BookDB mBookDB;
    private Cursor mCursor;
    private EditText bookName;
    private EditText bookAuthor;
    private ListView bookList;
    private int BOOK_ID=0;

    private static final int MENU_ADD = Menu.FIRST;
    private static final int MENU_DELETE = Menu.FIRST+1;
    private static final int MENU_UPDATE = Menu.FIRST+2;



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        menu.add(Menu.NONE, MENU_ADD, 0, "ADD");
        menu.add(Menu.NONE, MENU_DELETE, 0, "DELETE");
        menu.add(Menu.NONE, MENU_UPDATE, 0, "UPDATE");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        super.onOptionsItemSelected(item);
        switch(item.getItemId()){
            case MENU_ADD:
                add();
                break;
            case MENU_DELETE:
                delete();
                break;
            case MENU_UPDATE:
                update();
                break;

        }
        return true;

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.sqlite_activity);
        setUpViews();
    }
    public void setUpViews(){
        mBookDB = new BookDB(this);
        //進入這個界面 直接查詢數據庫
        mCursor = mBookDB.select();

        bookName = (EditText)findViewById(R.id.bookname);
        bookAuthor = (EditText)findViewById(R.id.bookauthor);
        bookList  = (ListView)findViewById(R.id.booklist);
//     System.out.println(bookName);
//     System.out.println(bookAuthor);
//     System.out.println(bookList);
        BookListAdapter adapter =  new BookListAdapter(SQLiteDatabaseDemo.this,mCursor);
        bookList.setAdapter(adapter);

        bookList.setOnItemClickListener(SQLiteDatabaseDemo.this);

    }

    //listview點擊事件
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
        mCursor.moveToPosition(position);
        BOOK_ID = mCursor.getInt(0);
        bookName.setText(mCursor.getString(1));
        bookAuthor.setText(mCursor.getString(2));

    }

    public void add(){
        //獲取輸入的內容
        String bookname = bookName.getText().toString();
        String author = bookAuthor.getText().toString();

        if(bookname.equals("")||author.equals("")) return;


        mBookDB.add(bookname, author);
        //Requery 方法是通過重新查詢窗體或控件的數據源更新基于指定窗體的數據
        mCursor.requery();
        //對listview自動刷新
        bookList.invalidateViews();
        bookName.setText("");
        bookAuthor.setText("");
        Toast.makeText(this, "add success", Toast.LENGTH_SHORT).show();


    }
    public void delete(){
        String bookname = bookName.getText().toString();
        String author = bookAuthor.getText().toString();
        if(BOOK_ID == 0) return;
        mBookDB.delete(BOOK_ID);
        mCursor.requery();
        // //對listview自動刷新
        bookList.invalidateViews();
        bookName.setText("");
        bookAuthor.setText("");
        Toast.makeText(this, "delete success", Toast.LENGTH_SHORT).show();
    }
    public void update(){
        String bookname = bookName.getText().toString();
        String author = bookAuthor.getText().toString();
        if(bookname.equals("")||author.equals("")) return;
        mBookDB.update(BOOK_ID, bookname, author);
        mCursor.requery();
        bookList.invalidateViews();
        bookName.setText("");
        bookAuthor.setText("");
        Toast.makeText(this, "update success", Toast.LENGTH_SHORT).show();


    }
    public class BookListAdapter extends BaseAdapter{
        private Context mContext;
        private Cursor mCursor;
        public BookListAdapter(Context context,Cursor cursor){
            mContext = context;
            mCursor = cursor;
        }
        @Override
        public int getCount() {
            //數據庫數據條目
            return mCursor.getCount();
        }
        @Override
        public Object getItem(int position) {

            return null;
        }
        @Override
        public long getItemId(int position) {

            return 0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            mCursor.moveToPosition(position);
            TextView mTextView = new TextView(mContext);
            mTextView.setText("序號"+mCursor.getString(1)+"內容"+mCursor.getString(2));
            return mTextView;
        }
    }

}

(1)數據庫工具類BookDB

?

public class BookDB extends SQLiteOpenHelper{
    //數據庫名稱
    private final static String DATABASE_NAME = "BOOKS.db";
    //數據庫版本號
    private final static int DATABASSE_VERSION=1;
    //表名
    private final static String TABLE_NAME = "books_table";
    //書籍名稱
    private final static String BOOK_NAME = "book_name";
    ///書籍的id
    private final static String BOOK_ID = "book_id";
    //作者
    private final static String BOOK_AUTHOR = "book_author";

    //構造方法
    public BookDB(Context context) {
        //上下文   數據庫名稱  工廠類  數據庫的版本號
        super(context, DATABASE_NAME,null,DATABASSE_VERSION);

    }

    //第一次進來  如果沒有 則創(chuàng)建數據庫  如果有就打開
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE "+ TABLE_NAME+" ("+BOOK_ID+
                " INTEGER primary key autoincrement,"+BOOK_NAME+" text,"+BOOK_AUTHOR+" text);";
        //執(zhí)行數據庫
         db.execSQL(sql);
    }

    //數據庫更新
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS "+TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);

    }

    //查詢數據庫內容
    public Cursor select(){
        //申請數據庫的權限 讀寫
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
        return cursor;


    }

    //添加
    public long add(String bookname,String author){
        SQLiteDatabase db = this.getWritableDatabase();
        //添加數據  鍵值對
        ContentValues cv =new ContentValues();
        cv.put(BOOK_NAME, bookname);
        cv.put(BOOK_AUTHOR, author);

        long row = db.insert(TABLE_NAME, null, cv);
        return row;

    }

    //根據id刪除
    public void delete(int id){
        SQLiteDatabase db = this.getWritableDatabase();
        String where = BOOK_ID+ "=?";
        String[] whereValue = {Integer.toString(id)};
        db.delete(TABLE_NAME, where, whereValue);

    }
    //更新
    public void update(int id,String bookname,String bookauthor){
        SQLiteDatabase db =this.getWritableDatabase();
        ContentValues cv =new ContentValues();
        cv.put(BOOK_NAME, bookname);
        cv.put(BOOK_AUTHOR, bookauthor);
        String where = BOOK_ID+"=?";
        String[] whereValue = {Integer.toString(id)};
        db.update(TABLE_NAME, cv, where, whereValue);

    }

}

?

?

?



本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務立即開通 >