2017-01-14 11 views
1

こんにちは、私はこれらの2つに苦しんでいます。 i)私はアンドロイドアプリのsqliteデータベースを作成しました。メインアクティビティから行を追加しました。今、私がプログラムを実行しているときはいつでも、同じ行がデータベースに追加されます。どのようにこれらのすべての行でデータベースが作成されるのを確実にするか。 ii)プライマリキーとしてid(int型)を作成し、自動インクリメントしました。プライマリIDを自動インクリメンタルにする必要はなく、各行に対して手動で設定することができます。私はそれをどのようにすることができますか?私は、テーブルを作成するためにデータを渡すsqliteでアンドロイドプログラムを実行すると重複行を防ぐ方法

1. All database related functions have been in this code: 
public class DataBaseHandlerActivity extends SQLiteOpenHelper { 

    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "shopsManager"; 

    // Shop table name 
    private static final String TABLE_SHOPS = "shops"; 

    // Shop Table Columns names 
    private static final String KEY_ID = "shopid"; 
    private static final String KEY_NAME = "shopname"; 
    private static final String KEY_ADDRESS = "shopaddress"; 
    private static final String KEY_CAT1="category1"; 
    private static final String KEY_CAT2="category2"; 
    private static final String KEY_CAT3="category3"; 
    private static final String KEY_CAT4="category4"; 
    private static final String KEY_IMAGE="shopimage"; 

    public DataBaseHandlerActivity(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 


    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 

     String CREATE_SHOPS_TABLE="CREATE TABLE "+TABLE_SHOPS+"("+KEY_ID+" INTEGER PRIMARY KEY,"+KEY_NAME+" TEXT,"+ 
       KEY_IMAGE+" TEXT,"+ 
       KEY_ADDRESS+" TEXT,"+KEY_CAT1+" TEXT,"+KEY_CAT2+" TEXT,"+KEY_CAT3+" TEXT,"+KEY_CAT4+" TEXT"+ 
       ")"; 
     db.execSQL(CREATE_SHOPS_TABLE); 

    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS"+TABLE_SHOPS); 

     //CREATE TABLE AGAIN 
     onCreate(db); 


    } 


    /** 
    * All CRUD(Create, Read, Update, Delete) Operations 
    */ 

    //Add a new shop row 
    void addShop(Shop shop){ 
     SQLiteDatabase db=this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME,shop.getShopName()); 
     values.put(KEY_IMAGE,shop.getShopImage()); 
     values.put(KEY_ADDRESS,shop.getShopAddress()); 
     values.put(KEY_CAT1,shop.getShopCat1()); 
     values.put(KEY_CAT2,shop.getShopCat2()); 
     values.put(KEY_CAT3,shop.getShopCat3()); 
     values.put(KEY_CAT4,shop.getShopCat4()); 

     //Inserting row 
     db.insert(TABLE_SHOPS,null,values); 
     db.close(); //Close db connection 
    } 

    //Get a shop items corresponding to a primary key 

    Shop getShop(int id){ 
     SQLiteDatabase db=this.getReadableDatabase(); 
     Cursor cursor=db.query(TABLE_SHOPS,new String[]{KEY_ID,KEY_NAME,KEY_IMAGE,KEY_ADDRESS,KEY_CAT1,KEY_CAT2,KEY_CAT3,KEY_CAT4}, 
       KEY_ID +"=?",new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 
     Shop shop = new Shop(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5), 
     cursor.getString(6),cursor.getString(7)); 
     // return shop 
     return shop; 
    } 

    // Getting All Shops 
    public List<Shop> getAllShops() { 
     List<Shop> shopList = new ArrayList<Shop>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_SHOPS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Shop shop = new Shop(); 
       shop.setShopId(Integer.parseInt(cursor.getString(0))); 
       shop.setShopName(cursor.getString(1)); 
       shop.setShopImage(cursor.getString(2)); 
       shop.setShopAddress(cursor.getString(3)); 
       shop.setShopCat1(cursor.getString(4)); 
       shop.setShopCat2(cursor.getString(5)); 
       shop.setShopCat3(cursor.getString(6)); 
       shop.setShopCat4(cursor.getString(7)); 
       // Adding contact to list 
       shopList.add(shop); 
      } while (cursor.moveToNext()); 
     } 

     // return shop list 
     return shopList; 
    } 

    // Updating single shop 
    public int updateShop(Shop shop) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME,shop.getShopName()); 
     values.put(KEY_IMAGE,shop.getShopImage()); 
     values.put(KEY_ADDRESS,shop.getShopAddress()); 
     values.put(KEY_CAT1,shop.getShopCat1()); 
     values.put(KEY_CAT2,shop.getShopCat2()); 
     values.put(KEY_CAT3,shop.getShopCat3()); 
     values.put(KEY_CAT4,shop.getShopCat4()); 

     // updating row 
     return db.update(TABLE_SHOPS, values, KEY_ID + " = ?", 
       new String[] { String.valueOf(shop.getShopId()) }); 
    } 

    // Deleting single shop 
    public void deleteShop(Shop shop) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_SHOPS, KEY_ID + " = ?", 
       new String[] { String.valueOf(shop.getShopId()) }); 
     db.close(); 
    } 


    // Getting shops Count 
    public int getShopsCount() { 
     String countQuery = "SELECT * FROM " + TABLE_SHOPS; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     int count=cursor.getCount(); 
     cursor.close(); 
     db.close() ; 
     // return count 
     return count; 
    } 


} 

2.主な活動:

package com.trillbit.databaseactivity; 

import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

import java.util.List; 

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     DataBaseHandlerActivity db=new DataBaseHandlerActivity(this); 
/** 
* CRUD Operations 
* */ 
     // Inserting Shops 
     Log.d("Insert: ", "Inserting .."); 
     db.addShop(new Shop("Shoppers Stop","shopperstop","1st Floor,Forum Mall","Fashion","Clothes","Home","Shoes")); 
     db.addShop(new Shop("LifeStyle", "lifestyle", "2nd Floor, Forum Mall", "Fashion", "Clothes","Home", "Mobile")); 
     db.addShop(new Shop("Ezone", "ezone","3rd Floor, Forum Mall","Mobile","Electronics","Apppliances","Home")); 
     db.addShop(new Shop("Dominos", "dominos","1st Floor,Forum Mall","Food","Pizza","Cake","Pastery")); 

     // Reading all shops 
     Log.d("Reading: ", "Reading all shops.."); 
     List<Shop> shops = db.getAllShops(); 
     for (Shop shop : shops) { 
      String log = "Id: " + shop.getShopId() + " ,Name: " + shop.getShopName() + " ,Image: " + shop.getShopImage() 
        + ",Address: " + shop.getShopAddress() + ",Categort1: " + shop.getShopCat1() + ", Category2: " + shop.getShopCat2() 
        + ",Category3: " + shop.getShopCat3() + ",Catgeory4: " + shop.getShopCat4(); 
      // Writing Shops to log 
      Log.d("Name: ", log); 
     } 


    } 
} 

3.Output logcatで:

D/Name:: Id: 5 ,Name: Shoppers Stop ,Image: shopperstop,Address: 1st Floor,Forunm Mall,Categort1: Fashion, Category2: Clothes,Category3: Home,Catgeory4: Shoes 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 6 ,Name: LifeStyle ,Image: lifestyle,Address: 2nd Floor, Forum Mall,Categort1: Fashion, Category2: Clothes,Category3: Home,Catgeory4: Mobile 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 7 ,Name: Ezone ,Image: ezone,Address: 3rd Floor, Forum Mall,Categort1: Mobile, Category2: Electronics,Category3: Apppliances,Catgeory4: Home 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 8 ,Name: Dominos ,Image: dominos,Address: 1st Floor,Forum Mall,Categort1: Food, Category2: Pizza,Category3: Cake,Catgeory4: Pastery 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 9 ,Name: Shoppers Stop ,Image: shopperstop,Address: 1st Floor,Forum Mall,Categort1: Fashion, Category2: Clothes,Category3: Home,Catgeory4: Shoes 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 10 ,Name: LifeStyle ,Image: lifestyle,Address: 2nd Floor, Forum Mall,Categort1: Fashion, Category2: Clothes,Category3: Home,Catgeory4: Mobile 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 11 ,Name: Ezone ,Image: ezone,Address: 3rd Floor, Forum Mall,Categort1: Mobile, Category2: Electronics,Category3: Apppliances,Catgeory4: Home 
01-14 16:07:49.687 7993-7993/com.trillbit.databaseactivity D/Name:: Id: 12 ,Name: Dominos ,Image: dominos,Address: 1st Floor,Forum Mall,Categort1: Food, Category2: Pizza,Category3: Cake,Catgeory4: Pastery 
+0

[どのように私は一度だけアプリケーションごとに起動し、何かを実行することができますか?]の可能な重複(http://stackoverflow.com/questions/7360846/how-can-i-execute-something-just-once-per -Application-Start) –

答えて

0

アクティビティがで作成されるたびに、これらの行を追加します。あなたのアプリが他の人のために一度

+0

返信ありがとうございました。それを行う方法と、私の主な活動に入れたい場所を表示してください。 –

+0

SharedPreferenceの使用 –

0

データベースのテーブル定義でUNIQUE制約を作成します。

重複するエントリを自動的に防止します。これは、その代わりに、あなたが違反した場合、エラーコードを返すの意味

INSERTを行うOR IGNORE

OR

INSERTの代わりに

... ... SQLiteはコマンドが成功したかのようにSQLITE_OKを返します。

+0

それは解決策ですが、私はあなたが問題を誤解していると思います。 –

0

開始の利益と言うブール値をマークする

使用SharedPreferences、私はクリケット-007により示唆されるように、私は共有環境設定を使用して解決方法を書いています。主なアクティビティの開始時に、アプリケーションがインストールされ、初めて実行されるときにデータベースが作成されました。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     if(!prefs.getBoolean("firstTime", false)) { 
      // run your one time code 
      // Inserting Shops 

      Log.d("Insert: ", "Inserting .."); 
      db.addShop(new Shop("01","Shoppers Stop","shopperstop","1st Floor,Forum Mall","Fashion","Clothes","Home","Shoes")); 
      db.addShop(new Shop("02","LifeStyle", "lifestyle", "2nd Floor, Forum Mall", "Fashion", "Clothes","Home", "Mobile")); 
      db.addShop(new Shop("03","Ezone", "ezone","3rd Floor, Forum Mall","Mobile","Electronics","Apppliances","Home")); 
      db.addShop(new Shop("04","Dominos", "dominos","1st Floor,Forum Mall","Food","Pizza","Cake","Pastery")); 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putBoolean("firstTime", true); 
      editor.commit(); 
     } 
関連する問題