Penyimpanan dan akses data - lihat juga pangkalan data SQLite


Pengenalan kepada bahagian ini:

Selepas mempelajari bahagian sebelumnya, anda telah pun menguasai operasi asas SQLite dalam Android, dan dalam bahagian ini kita akan belajar Beberapa perkara yang lebih maju sedikit, transaksi pangkalan data, cara menyimpan data binari yang besar ke dalam pangkalan data, dan apabila menaik taraf versi Bagaimana untuk mengendalikan pangkalan data! Baiklah, mari mulakan bahagian ini!


Transaksi SQLite

1.png

Ringkasnya: semua operasi pangkalan data yang ditulis dalam transaksi berjaya dan transaksi itu komited , jika tidak, rollback transaksi bermakna kembali ke titik sebelumnya Status - apabila tiada operasi pangkalan data dilakukan! Selain itu, kami juga menyebut sebelum ini bahawa dalam direktori data/data/<nama pakej>/database/ Selain fail db yang kami buat, terdapat juga fail xxx.db-journal, yang digunakan untuk membolehkan pangkalan data menyokong transaksi. Fail log sementara dijana!


2. SQLite menyimpan fail binari yang besar

Sudah tentu, secara amnya kami jarang menyimpan fail binari yang besar dalam pangkalan data, seperti gambar, audio, video, dll. Untuk ini kami biasanya adalah laluan fail storan, tetapi sentiasa ada beberapa keperluan yang aneh Suatu hari anda tiba-tiba ingin menyimpan fail ini ke dalam pangkalan data Gambar adalah contoh, simpan gambar ke SQLite, dan baca gambar dalam SQLite!

2.png


3. SimpleCursorAdapter mengikat data pangkalan data

Sudah tentu, ini bagus untuk keseronokan, tetapi tidak disyorkan untuk menggunakannya, walaupun ia adalah sangat mudah untuk digunakan! Malah, apabila bercakap tentang ContentProvider, kami menggunakan perkara ini untuk mengikat senarai kenalan! Saya tidak akan menulis contoh di sini. Pergi terus ke kod teras! Anda hanya boleh bermain-main dengannya sendiri jika anda perlu. Selain itu, pada masa kini kami jarang menulis perkara pangkalan data sendiri. , biasanya melalui rangka kerja pihak ketiga: ormlite, greenDao, dsb. Di bahagian lanjutan, kita akan belajar lagi~

3.png


Beberapa sorotan peningkatan pangkalan data

PS: Saya tidak pernah melakukan ini sebelum ini. Saya sentiasa mempunyai pengalaman projek yang tidak mencukupi. projek, saya mendapati bahawa kod yang ditinggalkan oleh pendahulu ialah: onCreate() mencipta DB, kemudian onUpgrade() memadamkan DB sebelumnya, dan kemudian Panggil kaedah onCreate() sekali lagi! Selepas membaca beberapa versi kod, saya mendapati bahawa tiada operasi menaik taraf pangkalan data... Saya tidak mempunyai apa-apa untuk belajar daripadanya. Saya hanya boleh merujuk kepada amalan orang lain Di bawah adalah beberapa kesimpulan daripada ulasan Xiaozhu tentang maklumat tersebut. Mungkin beberapa rangka kerja pihak ketiga telah melakukannya, tetapi disebabkan kekangan masa, saya tidak akan melakukannya secara perlahan-lahan! Anda boleh tinggalkan mesej jika anda tahu, terima kasih!

1) Apakah peningkatan versi pangkalan data? Bagaimana untuk menaik taraf?

Jawapan: Jika kami membangunkan APP dan menggunakan pangkalan data, kami menganggap bahawa versi pangkalan data ialah v1.0. Dalam versi ini, kami mencipta fail pangkalan data x.db dan kami mencipta jadual pertama melalui kaedah onCreate(). t_user, terdapat dua medan di dalamnya: _id, user_id nanti kami ingin menambah nama_pengguna, kali ini Kita perlu mengubah suai struktur jadual pangkalan data, dan kita boleh mengemas kini pangkalan data onUpgrade() Dalam kaedah ini, kita hanya perlu mengubah suai nombor versi apabila membuat instantiated SQLiteOpenHelper tersuai, seperti menukar 1 kepada 2 Dengan cara ini, kaedah onUpgrade() akan dipanggil secara automatik! Di samping itu, untuk setiap versi pangkalan data kita harus melakukan kerja yang baik Rekod (dokumen) yang sepadan adalah serupa dengan yang berikut:

数据库版本andoid对应版本内容
v1.01第一个版本,包含两个字段...
v1.12数据保留,新增user_name字段

2) Beberapa soalan dan penyelesaian yang berkaitan

① Adakah fail pangkalan data akan dipadamkan apabila aplikasi dinaik taraf?

J: Tidak! Data dan segala-galanya ada!

② Jika saya mahu memadamkan medan dalam jadual atau menambah medan baharu, adakah data asal masih ada?

J: Ya!

③ Bolehkah anda menyiarkan cara kasar untuk mengemas kini versi pangkalan data yang baru anda sebutkan tanpa menyimpan data?

Jawapan: Ya, ormlite pihak ketiga digunakan di sini Anda juga boleh menulis kod untuk penciptaan pangkalan data dan pemadaman sendiri:

4.png.

④Sebagai contoh, jika kami telah menaik taraf kepada versi ketiga, kami menambah jadual pada versi kedua, dan kemudian versi ketiga Jadual A juga telah ditambah . Pengguna boleh terus menaik taraf daripada versi pertama kepada versi ketiga Dengan cara ini, tidak akan mempunyai jadual tambahan tanpa melalui versi kedua.

Jawapan: Sangat mudah, kita boleh menulis suis() dalam onUpgrade(), strukturnya adalah seperti berikut:

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
            int arg2, int arg3) {
    switch(arg2){
        case 1:
            db.execSQL(第一个版本的建表语句);
        case 2:
            db.execSQL(第二个版本的建表语句);
        case 3:
            db.execSQL(第三个版本的建表语句); 
    }
}
Jika anda berhati-hati, anda mungkin mendapati bahawa rehat adalah tidak ditulis di sini, jadi ini By the way, ini adalah untuk memastikan bahawa apabila menaik taraf merentas versi, setiap kali pangkalan data Semua pengubahsuaian boleh dilaksanakan! Ini memastikan bahawa struktur jadual adalah terkini! Di samping itu, ia tidak semestinya pernyataan untuk mencipta jadual atau mengubah suai struktur jadual. Tidak mengapa juga!


⑤Reka bentuk meja lama terlalu teruk, banyak medan yang perlu diubah, dan terlalu banyak perubahan saya ingin mencipta jadual baharu, tetapi nama jadual mestilah samaDan beberapa data sebelumnya perlu disimpan ke jadual baharu!

Jawapan: Haha, saya berlutut untuk anda sudah tentu ada penyelesaiannya:

1 : UBAH NAMA SEMULA Pengguna JADUAL KEPADA _temp_User;

2 Cipta jadual baharu:BUAT JADUAL Pengguna (u_id INTEGER PRIMARY KUNCI,u_name VARCHAR(20),u_age VARCHAR(4) );

3. Import data; MASUKKAN KE DALAM PILIH Pengguna u_id,u_name,"18" DARI _temp_User; //Jika tiada apa-apa dalam jadual asal, anda perlu tetapkan nilai lalai sendiri

4. Padamkan jadual sementara; Baiklah, dalam bahagian ini kita akan membincangkan Transaksi SQLite, storan binari yang besar, SimpleCursorAdapter dan peningkatan pangkalan data Beberapa isu telah diterokai, dan mengenai SQLite, kami telah belajar begitu banyak buat masa ini, tentang penggunaan pihak ketiga, dan Kami akan mempelajari beberapa topik lanjutan dengan anda apabila kami sampai ke peringkat lanjutan~ Itu sahaja untuk bahagian ini, terima kasih~