0

I have uesd Ormlite Database in my android app and for service data parsing using GSon library.I have problem First time when i sync with server i have a model like Ground and model stored in DB and id field in server side are duplicate in model like same id but two object in model and when i pass these model to DB(ORMLIte) then insert one row and when second time when again sync with server then again same process but when add in Db then Exception thorough primary key must be unique ,My question is this how can i find that this object in model already exist in DB and now query update or insert.

player model

package com.tt.models;
import java.util.Collection;
import com.google.gson.annotations.SerializedName;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "Player")
public class Player {
    public static final String BATTING_ID_FIELD_NAME = "batting_id";
    public static final String BOWLING_ID_FIELD_NAME = "bowling_id";
    public static final String TEAM_ID_FIELD_NAME = "team_id";
    @SerializedName("__v")
    @DatabaseField(id = true) 
     private int id;
    @SerializedName("_id")
    @DatabaseField(columnName = "_id")
    private String _id;
    /*@SerializedName("__v")
    @DatabaseField(columnName = "__v",id=true)
    private int __v;*/
    @DatabaseField
    private String battingStyle;
    @DatabaseField
    private String bowlingStyle;
    @DatabaseField
    private String dob;
    @DatabaseField
    private String playingRole;
    @DatabaseField
    private String sname;
    @DatabaseField
    private String fname;
    @SerializedName("gallery")
    @ForeignCollectionField(eager = true, maxEagerLevel = 2)
    private Collection<Gallery> gallery;

    @SerializedName("games")
    @ForeignCollectionField(eager = true)
    private Collection<Game> games;

    /*
     * @DatabaseField(dataType = DataType.SERIALIZABLE) private String[] users;
     */
    /*
     * @DatabaseField(dataType = DataType.SERIALIZABLE) private String[] squad;
     */

    Player() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


    public String getBattingStyle() {
        return battingStyle;
    }

    public void setBattingStyle(String battingStyle) {
        this.battingStyle = battingStyle;
    }

    public String getBowlingStyle() {
        return bowlingStyle;
    }

    public void setBowlingStyle(String bowlingStyle) {
        this.bowlingStyle = bowlingStyle;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public String getPlayingRole() {
        return playingRole;
    }

    public void setPlayingRole(String playingRole) {
        this.playingRole = playingRole;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    /*
     * public String[] getUsers() { return users; }
     * 
     * public void setUsers(String[] users) { this.users = users; }
     */

    /*
     * public String[] getSquad() { return squad; }
     * 
     * public void setSquad(String[] squad) { this.squad = squad; }
     */

    public Collection<Gallery> getGallerys() {
        return gallery;
    }

    public void setGallerys(Collection<Gallery> gallery) {
        this.gallery = gallery;
    }

    public Collection<Gallery> getGallery() {
        return gallery;
    }

    public void setGallery(Collection<Gallery> gallery) {
        this.gallery = gallery;
    }

    public Collection<Game> getGames() {
        return games;
    }

    public void setGames(Collection<Game> games) {
        this.games = games;
    }

    public String get_id() {
        return _id;
    }

    public void set_id(String _id) {
        this._id = _id;
    }

    @Override
    public String toString() {
        return "Player [id=" + id + ", _id=" + _id + ", battingStyle="
                + battingStyle + ", bowlingStyle=" + bowlingStyle + ", dob="
                + dob + ", playingRole=" + playingRole + ", sname=" + sname
                + ", fname=" + fname + ", gallery=" + gallery + ", games="
                + games + "]";
    }


}

Game model

package com.tt.models;

import java.util.Collection;

import com.google.gson.annotations.SerializedName;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "Game")
public class Game {
    public static final String INNING_ID_FIELD_NAME = "inning_id";
    public static final String PLAYER_ID_FIELD_NAME = "player_id";
    @SerializedName("__v")
    @DatabaseField(id = true)
    private int id;

    /*
     * @SerializedName("_id")
     * 
     * @DatabaseField(columnName = "_id") private String _id;
     * 
     * @SerializedName("__v")
     * 
     * @DatabaseField(columnName = "__v",id=true) private int __v;
     */
    @SerializedName("gameType")
    @DatabaseField
    private String gameType;
    @SerializedName("name")
    @DatabaseField
    private String name;
    @SerializedName("totalOvers")
    @DatabaseField
    private String totalOvers;
    @SerializedName("dateStarted")
    @DatabaseField
    private String dateStarted;
    @SerializedName("dateEnded")
    @DatabaseField
    private String dateEnded;
    @SerializedName("innings")
    @ForeignCollectionField(eager = true, maxEagerLevel = 2)
    private Collection<Inning> innings;
    @DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true, columnName = PLAYER_ID_FIELD_NAME)
    private transient Player player;
    @SerializedName("grounds")
    @ForeignCollectionField(eager = true, maxEagerLevel = 2)
    private Collection<Ground> grounds;
    @SerializedName("teams")
    @ForeignCollectionField(eager = true, maxEagerLevel = 2)
    private Collection<Team> teams;

    public Game() {
        // all persisted classes must define a no-arg constructor with at least
        // package visibility
    }

    /*
     * public String get_id() { return _id; }
     * 
     * public void set_id(String _id) { this._id = _id; }
     */

    public String getGameType() {
        return gameType;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setGameType(String gameType) {
        this.gameType = gameType;
    }

    public Collection<Ground> getGrounds() {
        return grounds;
    }

    public void setGrounds(Collection<Ground> grounds) {
        this.grounds = grounds;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDateStarted() {
        return dateStarted;
    }

    public void setDateStarted(String dateStarted) {
        this.dateStarted = dateStarted;
    }

    public String getDateEnded() {
        return dateEnded;
    }

    public void setDateEnded(String dateEnded) {
        this.dateEnded = dateEnded;
    }

    public String getTotalOvers() {
        return totalOvers;
    }

    public void setTotalOvers(String totalOvers) {
        this.totalOvers = totalOvers;
    }

    public Player getPlayer() {
        return player;
    }

    public void setPlayer(Player player) {
        this.player = player;
    }

    public Collection<Inning> getInnings() {
        return innings;
    }

    public void setInnings(Collection<Inning> innings) {
        this.innings = innings;
    }

    public Collection<Team> getTeams() {
        return teams;
    }

    public void setTeams(Collection<Team> teams) {
        this.teams = teams;
    }

    @Override
    public String toString() {
        return "Game [id=" + id + ", gameType=" + gameType + ", name=" + name
                + ", totalOvers=" + totalOvers + ", dateStarted=" + dateStarted
                + ", dateEnded=" + dateEnded + ", innings=" + innings
                + ", grounds=" + grounds + ", teams=" + teams + "]";
    }

}

Ground Model

package com.tt.models;

import android.widget.Toast;

import com.google.gson.annotations.SerializedName;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.tt.Utilities.Utils;

@DatabaseTable(tableName = "Ground")
public class Ground {
    public static final String GAME_ID_FIELD_NAME = "game_id";

    @SerializedName("__v")
    @DatabaseField(id = true)
    private int id;

    /*
     * @SerializedName("_id")
     * 
     * @DatabaseField(columnName = "_id",unique=true) private String _id;
     * 
     * @SerializedName("__v")
     * 
     * @DatabaseField(columnName = "__v",id=true) private int __v;
     */
    @SerializedName("address")
    @DatabaseField
    private String address;
    @SerializedName("city")
    @DatabaseField
    private String city;
    @SerializedName("country")
    @DatabaseField
    private String country;
    @SerializedName("name")
    @DatabaseField
    private String name;
    @DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true, maxForeignAutoRefreshLevel = 3, columnName = GAME_ID_FIELD_NAME)
    private transient Game game;

    public Ground() {
        // all persisted classes must define a no-arg constructor with at least
        // package visibility
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getGameType() {
        return address;
    }

    public void setGameType(String gameType) {
        this.address = gameType;
    }

    public Game getGame() {
        return game;
    }

    public void setGame(Game game) {
        this.game = game;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Ground [id=" + id + ", address=" + address + ", city=" + city
                + ", country=" + country + ", name=" + name + "]";
    }

}

player controller

package com.tt.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import android.os.Environment;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.ForeignCollection;
import com.tt.Utilities.Utils;
import com.tt.database.Database;
import com.tt.models.Batting;
import com.tt.models.Bowling;
import com.tt.models.Fielding;
import com.tt.models.Gallery;
import com.tt.models.Game;
import com.tt.models.Ground;
import com.tt.models.Inning;
import com.tt.models.Player;
import com.tt.models.Team;

public class PlayerController {

    private static PlayerController instance;

    private PlayerController() {

    }

    public List<Player> getPlayers() throws SQLException {
        // query for all of the data objects in the database
        return Database.getSingletonInstance(Utils.context).getPlayerDao()
                .queryForAll();
    }

    public static PlayerController getSingletonInstance() {
        if (instance == null) {
            instance = new PlayerController();
        }
        return instance;
    }

    public Player JsonParse(JSONObject jsonObject) {
        Player player = null;
        try {

            GsonBuilder builder = new GsonBuilder();
            Gson gson = builder.create();

            player = gson.fromJson(jsonObject.getString("players")
                    , Player.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return player;
    }

    @SuppressWarnings("unused")
    private void writeToSdcard(Player response) {
        try {
            File newFolder = new File(
                    Environment.getExternalStorageDirectory(), "TestFolder");
            if (!newFolder.exists()) {
                newFolder.mkdir();
            }
            try {
                File file = new File(newFolder, "PlayerModel" + ".txt");
                file.createNewFile();
                FileOutputStream fOut = new FileOutputStream(file);
                OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
                myOutWriter.append(response.toString());
                myOutWriter.close();
                fOut.close();
            } catch (Exception ex) {
                System.out.println("ex: " + ex);
            }
        } catch (Exception e) {
            System.out.println("e: " + e);
        }
    }

    public int savePlayerDB(Player player) {
        int Count = 0;
   writeToSdcard(player);
        try {

            ForeignCollection<Batting> battings = Database
                    .getSingletonInstance(Utils.context).getInningDao()
                    .getEmptyForeignCollection("battings");
            ForeignCollection<Bowling> bowlings = Database
                    .getSingletonInstance(Utils.context).getInningDao()
                    .getEmptyForeignCollection("bowlings");
            ForeignCollection<Fielding> fieldings = Database
                    .getSingletonInstance(Utils.context).getInningDao()
                    .getEmptyForeignCollection("Fieldings");
            ForeignCollection<Team> teams = Database
                    .getSingletonInstance(Utils.context).getGameDao()
                    .getEmptyForeignCollection("teams");
            ForeignCollection<Gallery> gallery = Database
                    .getSingletonInstance(Utils.context).getPlayerDao()
                    .getEmptyForeignCollection("gallery");
            /*
             * ForeignCollection<Inning> innings = Database
             * .getSingletonInstance(Utils.context).getBattingDao()
             * .getEmptyForeignCollection("innings");
             */
            /*
             * ForeignCollection<Game> games = Database
             * .getSingletonInstance(Utils.context).getInningDao()
             * .getEmptyForeignCollection("games");
             */


            ForeignCollection<Ground> grounds = Database
                    .getSingletonInstance(Utils.context).getGameDao()
                    .getEmptyForeignCollection("grounds");
            Iterator<Game> iteratorGame = player.getGames().iterator();
            while (iteratorGame.hasNext()) {
                Game game = (Game) iteratorGame.next();
                if (game != null) {
                    game.setPlayer(player);

                    Iterator<Inning> iteratorInning = game.getInnings()
                            .iterator();
                    while (iteratorInning.hasNext()) {
                        Inning inning = (Inning) iteratorInning.next();
                        if (inning != null) {
                            inning.setGame(game);
                            if (inning.getBattings() != null) {
                                Iterator<Batting> iteratorBattings = inning
                                        .getBattings().iterator();

                                while (iteratorBattings.hasNext()) {
                                    Batting batting = (Batting) iteratorBattings
                                            .next();
                                    if (batting != null) {
                                        if (batting.getPlayer()[0]
                                                .equalsIgnoreCase(player
                                                        .get_id()))
                                            batting.setInning(inning);
                                    }
                                }

                                battings.addAll(inning.getBattings());
                            }
                            if (inning.getBowlings() != null) {
                                Iterator<Bowling> iteratorBowlings = inning
                                        .getBowlings().iterator();
                                while (iteratorBowlings.hasNext()) {
                                    Bowling bowling = (Bowling) iteratorBowlings
                                            .next();
                                    if (bowling != null) {
                                        if (bowling.getPlayer()[0]
                                                .equalsIgnoreCase(player
                                                        .get_id()))
                                            bowling.setInning(inning);
                                    }
                                }
                                bowlings.addAll(inning.getBowlings());
                            }
                            if (inning.getFieldings() != null) {
                                Iterator<Fielding> iteratorFieldings = inning
                                        .getFieldings().iterator();

                                while (iteratorFieldings.hasNext()) {
                                    Fielding fielding = (Fielding) iteratorFieldings
                                            .next();
                                    if (fielding != null) {
                                        if (fielding.getPlayer()[0]
                                                .equalsIgnoreCase(player
                                                        .get_id()))
                                            fielding.setInning(inning);
                                    }
                                }
                                fieldings.addAll(inning.getFieldings());
                            }
                        }
                    }
                    // innings.addAll(batting.getInnings());
                    Iterator<Ground> iteratorGround = game.getGrounds()
                            .iterator();
                    while (iteratorGround.hasNext()) {
                        Ground ground = (Ground) iteratorGround.next();
                        if (ground != null) {
                            ground.setGame(game);

                        }
                    }

                    grounds.addAll(game.getGrounds());
                    Iterator<Team> iteratorTeam = game.getTeams().iterator();
                    while (iteratorTeam.hasNext()) {
                        Team team = (Team) iteratorTeam.next();
                        if (team != null) {
                            team.setGame(game);

                        }
                    }
                    teams.addAll(game.getTeams());


                }

            }
            /*
             * Iterator<Bowling> iteratorBowling =
             * player.getBowlings().iterator(); while
             * (iteratorBowling.hasNext()) { Bowling bowling = (Bowling)
             * iteratorBowling.next(); bowling.setPlayer(player);
             * Iterator<Inning> iteratorInning =
             * bowling.getInnings().iterator(); while (iteratorInning.hasNext())
             * { Inning inning = (Inning) iteratorInning.next();
             * if(inning!=null){ inning.setBowling(bowling); Iterator<Game>
             * iteratorGame = inning.getGames().iterator(); while
             * (iteratorGame.hasNext()) { Game game = (Game)
             * iteratorGame.next(); if(game!=null) { game.setInning(inning);
             * Iterator<Ground> iteratorGround = game.getGrounds().iterator();
             * while (iteratorGround.hasNext()) { Ground ground = (Ground)
             * iteratorGround.next(); if(ground!=null) { ground.setGame(game);
             * grounds.addAll(game.getGrounds()); } } } }
             * //innings.addAll(batting.getInnings()); } } }
             */

            /*
             * Iterator<Team> iteratorTeam = player.getTeams().iterator(); while
             * (iteratorTeam.hasNext()) { Team team = (Team)
             * iteratorTeam.next(); team.setPlayer(player); }
             */
            Iterator<Gallery> iteratorGallery = player.getGallerys().iterator();
            while (iteratorGallery.hasNext()) {
                Gallery galleryobj = (Gallery) iteratorGallery.next();
                galleryobj.setPlayer(player);
            }
            // battings.addAll(player.getBattings());
            // bowlings.addAll(player.getBowlings());
            // teams.addAll(player.getTeams());
            gallery.addAll(player.getGallerys());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return Count;
    }
}

player model after parse json by using Gson google lib

Player[
  id=1,
  _id=531029b207987409620000d6,
  battingStyle=RHB,
  bowlingStyle=RAOS,
  dob=2000-02-28T06: 15: 15.264Z,
  playingRole=BWL,
  sname=QadeerButt,
  fname=Tahir,
  gallery=[

  ],
  games=[
    Game[
      id=4,
      gameType=T20‎,
      name=TotallyCricketvsLahoreTiger,
      totalOvers=20,
      dateStarted=2014-06-18T19: 00: 00.000Z,
      dateEnded=2014-06-18T19: 00: 00.000Z,
      innings=[

      ],
      grounds=[
        Ground[
          id=26,
          address=14835SE18thPl,
          Bellevue,
          WA98007,
          UnitedStates,
          city=Bellevue,
          country=UnitedStates,
          name=RobinswoodPark
        ],
        Ground[
          id=26,
          address=14835SE18thPl,
          Bellevue,
          WA98007,
          UnitedStates,
          city=Bellevue,
          country=UnitedStates,
          name=RobinswoodPark
        ]
      ],
      teams=[
        Team[
          id=30,
          name=TotallyCricket,
          category=Veterans,
          teamGender=Men,
          rating=5
        ],
        Team[
          id=19,
          name=LahoreTiger,
          category=Under19,
          teamGender=Men,
          rating=3
        ]
      ]
    ]
  ]
]

GSon From server

{
  "status": 1,
  "players": {
    "__v": 1,
    "_id": "531029b207987409620000d6",
    "battingStyle": "RHB",
    "bowlingStyle": "RAOS",
    "dob": "2000-02-28T06:15:15.264Z",
    "fname": "Tahir",
    "playingRole": "BWL",
    "sname": "Qadeer Butt",

        "teams": [
          {
            "__v": 30,
            "_id": "52f86b1d31f3b9b205000a58",
            "category": "Veterans",
            "name": "Totally Cricket",
            "rating": 5,
            "teamGender": "Men"
          },
          {
            "__v": 19,
            "_id": "52f9e64231f3b9b205000f36",
            "category": "Under19",
            "name": "Lahore Tiger",
            "rating": 3,
            "teamGender": "Men"
          }
        ],

        "grounds": [
          {
            "__v": 26,
            "_id": "53381c1bf0bce0bd20000002",
            "address": "14835 SE 18th Pl, Bellevue, WA 98007, United States",
            "city": "Bellevue",
            "country": "United States",
            "latitude": "",
            "longitude": "",
            "name": "Robinswood Park"
          },
          {
            "__v": 26,
            "_id": "53381c1bf0bce0bd20000002",
            "address": "14835 SE 18th Pl, Bellevue, WA 98007, United States",
            "city": "Bellevue",
            "country": "United States",
            "latitude": "",
            "longitude": "",
            "name": "Robinswood Park"
          }
        ]

  }
}***
4

0 回答 0