Announcement

Collapse
No announcement yet.

[SQLite Android] Khởi tạo dữ liệu ban đầu khi tạo table

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Java] [SQLite Android] Khởi tạo dữ liệu ban đầu khi tạo table

    Chào mọi người,
    Mình mới nghiên cứu về SQLite trong Android. Mình sử dụng class DatabaseHandler.class
    PHP Code:
    package com.WL_ver1;

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

    import com.WL_ver1.Contact;

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

    public class 
    DatabaseHandler extends SQLiteOpenHelper {

        
    // All Static variables
        // Database Version
        
    private static final int DATABASE_VERSION 1;

        
    // Database Name
        
    private static final String DATABASE_NAME "WorklightVer1";

        
    // Contacts table name
        
    private static final String TABLE_FLAG "activeFlag";

        
    // Contacts Table Columns names
        
    private static final String KEY_FLAG "statusFlag";

        public 
    DatabaseHandler(Context context) {
            
    super(contextDATABASE_NAMEnullDATABASE_VERSION);
        }

        
    // Creating Tables
        
    @Override
        
    public void onCreate(SQLiteDatabase db) {
            
    String CREATE_CONTACTS_TABLE "CREATE TABLE " TABLE_FLAG "("
                                
    KEY_FLAG " TEXT DEFAULT \'unactive\'" ")";
            
    db.execSQL(CREATE_CONTACTS_TABLE);    
        }

        
    // Upgrading database
        
    @Override
        
    public void onUpgrade(SQLiteDatabase dbint oldVersionint newVersion) {
            
    // Drop older table if existed
            
    db.execSQL("DROP TABLE IF EXISTS " TABLE_FLAG);

            
    // Create tables again
            
    onCreate(db);
        }

        
    /**
         * All CRUD(Create, Read, Update, Delete) Operations
         */
        // Adding new contact
        
    void addContact(String str) {
            
    SQLiteDatabase db this.getWritableDatabase();

            
    ContentValues values = new ContentValues();
            
    values.put(KEY_FLAGstr); // Contact Name

            // Inserting Row
            
    db.insert(TABLE_FLAGnullvalues);
            
    db.close(); // Closing database connection
        
    }

    Và file Acitivity của mình
    PHP Code:
    package com.WL_ver1;

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

    import com.WL_ver1.Contact;

    import android.content.Intent;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.app.Activity;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.SimpleCursorAdapter;

    public class 
    getNativeDatabase extends Activity {
        
        public static 
    DatabaseHandler db;
        
    /** Called when the activity is first created. */
        
    @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
                
            
    db = new DatabaseHandler(this);
            
    //db.addContact("a111111");
        
    }

    Theo mình biết thì nếu chưa tồn tại database thì
    PHP Code:
        // Creating Tables
        
    @Override
        
    public void onCreate(SQLiteDatabase db) {
            
    String CREATE_CONTACTS_TABLE "CREATE TABLE " TABLE_FLAG "("
                                
    KEY_FLAG " TEXT " ")";
            
    db.execSQL(CREATE_CONTACTS_TABLE);    
        } 
    sẽ được gọi và tạo table, mình muốn khi chương trình chạy, thì table đươc tạo và có dữ liệu ban đầu. Mình dùng
    PHP Code:
        // Creating Tables
        
    @Override
        
    public void onCreate(SQLiteDatabase db) {
            
    String CREATE_CONTACTS_TABLE "CREATE TABLE " TABLE_FLAG "("
                                
    KEY_FLAG " TEXT  DEFAULT \'first valuve\' " ")";
            
    db.execSQL(CREATE_CONTACTS_TABLE);    
        } 
    Trong file Activity, nếu mình chỉ thực hiện lệnh
    PHP Code:
    db = new DatabaseHandler(this); 
    Thì database chưa được tạo.
    Phải thực hiện thêm lệnh
    PHP Code:
    db.addContact("a111111"); 
    Thì database mới được tạo, nhưng trong table chỉ có data mới được thêm vào ("a111111") mà ko có data đầu tiên ("first value") lúc mình tạo.
    Mong được giúp đỡ :nose:

  • #2
    SQL DEFAULT Constraint

    The DEFAULT constraint is used to insert a default value into a column.

    The default value will be added to all new records, if no other value is specified.
    Có lẽ anh hiểu sai chức năng của DEFAULT constraint rồi. Nó chỉ là default value của column thôi và khi add record mà không specify value của column đó thì nó sẽ dùng default value mà anh gán lúc đầu chứ không phải là mặc định tạo ra 1 record trong table

    Comment


    • #3
      Mình cũng đang tập tành Android nhưng mình đang thắc mắc là sao bạn ko tạo một CSDL bằng một chương trình quản lý khác sau đó, kết nối đến CSDL này. Bạn chỉ phải tạo 1 lần và dùng xuyên suốt cả ứng dụng luôn hơn là tạo và chèn luôn dữ liệu lúc tạo.
      ----------------------------------------------------------------------------
      Onemp Music Player : Light and powerful android music player

      My APK : APK Extractor and MORE with friendly UI

      Comment


      • #4
        Originally posted by 10520314 View Post
        Mình cũng đang tập tành Android nhưng mình đang thắc mắc là sao bạn ko tạo một CSDL bằng một chương trình quản lý khác sau đó, kết nối đến CSDL này. Bạn chỉ phải tạo 1 lần và dùng xuyên suốt cả ứng dụng luôn hơn là tạo và chèn luôn dữ liệu lúc tạo.
        Bạn có link tài liệu về phần này ko? Cho mình tham khảo với
        Nếu dùng 1 database ngoài thì lớp nào giao tiếp với nó vậy bạn? Ví như SQLite thì có lớp SQLiteOpenHelper đó.

        Comment


        • #5
          Originally posted by 10520314 View Post
          Mình cũng đang tập tành Android nhưng mình đang thắc mắc là sao bạn ko tạo một CSDL bằng một chương trình quản lý khác sau đó, kết nối đến CSDL này. Bạn chỉ phải tạo 1 lần và dùng xuyên suốt cả ứng dụng luôn hơn là tạo và chèn luôn dữ liệu lúc tạo.
          Đơn giản là vì lúc down ứng dụng từ market về chả lẻ phải down cả cái chương trình quản lý cơ sở dữ liệu khác nữa ah?
          Hơn nữa mỗi ứng dụng nên tự quản lý CSDL riêng của mình vì lý do bảo mật.

          Comment


          • #6
            Originally posted by 09520074 View Post
            Đơn giản là vì lúc down ứng dụng từ market về chả lẻ phải down cả cái chương trình quản lý cơ sở dữ liệu khác nữa ah?
            Hơn nữa mỗi ứng dụng nên tự quản lý CSDL riêng của mình vì lý do bảo mật.
            Tạo ra rồi dùng chứ có phải dùng cái chương trình để tạo 24/24 đâu mà bảo với chả mật?

            Comment


            • #7
              Để tạo một CSDL ban đầu sau đó kết nối tới thì bác dùng một trong 2 phần mềm sau:
              - SQLite Browser: Cái này portable và hoàn toàn miễn phí, nhưng số chức năng của nó hơi ít.
              - SQLite Expert Professional: Cái này thì chuyên nghiệp nên có phí, do đó phải tìm crack
              Dùng 1 trong 2 trình quản lý này để tạo ra CSDL ban đầu sau đó lưu lại file CSDL đó rồi chép vào project android và kết nối đến nó là có thể sử dụng được
              Không có gì là không thể nếu chúng ta có lòng tin.
              http://gabrielbl.com

              Comment


              • #8
                Thanks mọi người, mình tạo 1 bảng, gồm 1 cột thôi, và set luôn giá trị ban đầu cho nó, mà ko được. Mình dùng lệnh:
                PHP Code:
                        String CREATE_CONTACTS_TABLE "CREATE TABLE " TABLE_FLAG "("
                                            
                KEY_FLAG " TEXT  DEFAULT \'first valuve\' " ")";
                        
                db.execSQL(CREATE_CONTACTS_TABLE); 
                Nhưng kết quả ko ra, ko biết cú pháp vậy đúng ko, mọi người xem giúp

                Comment


                • #9
                  Originally posted by 08520472 View Post
                  Thanks mọi người, mình tạo 1 bảng, gồm 1 cột thôi, và set luôn giá trị ban đầu cho nó, mà ko được. Mình dùng lệnh:
                  PHP Code:
                          String CREATE_CONTACTS_TABLE "CREATE TABLE " TABLE_FLAG "("
                                              
                  KEY_FLAG " TEXT  DEFAULT \'first valuve\' " ")";
                          
                  db.execSQL(CREATE_CONTACTS_TABLE); 
                  Nhưng kết quả ko ra, ko biết cú pháp vậy đúng ko, mọi người xem giúp
                  Em thấy cú pháp đúng mà !! Lệnh trên mới tạo ra Table nhưng chưa có record nào. Anh thử viết thêm hàm insert vào table, insert vào vài record sau đó Ghi Log ra xem coi đúng chưa

                  Comment


                  • #10
                    à, mình nhầm giữa default value và record, mình muốn tạo record đầu tiên cho table vừa tạo, nhưng đặt vào nơi tạo table ko đc.

                    Comment


                    • #11
                      Originally posted by 08520472 View Post
                      à, mình nhầm giữa default value và record, mình muốn tạo record đầu tiên cho table vừa tạo, nhưng đặt vào nơi tạo table ko đc.
                      Có mất mát gì khi vừa create table xong thì chèn thêm vào 1 câu insert nhỉ?

                      Comment


                      • #12
                        Originally posted by 09520134 View Post
                        Có mất mát gì khi vừa create table xong thì chèn thêm vào 1 câu insert nhỉ?
                        ==>> Mất công ! :haha:
                        ----------------------Lê Văn Lịch - CNPM 5 - 533 -----------------------
                        Giường số 2, phòng 108, tầng 1, nhà A19, ktx ĐH Quốc gia, Thủ Đức, tp.HCM, Việt Nam, Đông Nam Á, Châu Á, Trái Đất, Thái Dương hệ, Ngân Hà.........., 1 hạt bụi nhỏ.:sosad:

                        Comment


                        • #13
                          Originally posted by 09520134 View Post
                          Có mất mát gì khi vừa create table xong thì chèn thêm vào 1 câu insert nhỉ?
                          Thực ra mình muốn khi database và table được tạo thì nó sẽ tạo luôn cái record đó, vì database và table chỉ tạo 1 lần --> record đó cũng tạo 1 lần đó luôn. Nếu dùng 1 lệnh insert thì mỗi khi chương trình chạy, thì nó cứ insert vào insert vào.
                          Mình đã có giải pháp khác
                          Thanks mọi người nhé

                          Comment


                          • #14
                            vì SQLite ko chạy trên máy chủ như MySQL hay MS SQL. NÓ đơn giản chỉ là 1 file .sqlite thôi. Cái kết nối và truyền lệnh đến nó thực ra là thực hiện thao tác đọc ghi file

                            Comment


                            • #15
                              Cách này mình chưa hiểu lắm. Bỏ vào Project rồi thì khi project build thành file .apk csdl cũng nằm trong đó luôn. như vậy mình thay đổi trên csdl thì thay đổi file .apk à? :confuse:

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X