diff --git a/src/main/java/lbs/lbs/entity/ChampionImg.java b/src/main/java/lbs/lbs/entity/ChampionImg.java index 5fea181..0b34f79 100644 --- a/src/main/java/lbs/lbs/entity/ChampionImg.java +++ b/src/main/java/lbs/lbs/entity/ChampionImg.java @@ -10,7 +10,7 @@ @Table(name= "champion_img") public class ChampionImg { @Id @Column - @GeneratedValue(strategy = GenerationType.SEQUENCE) + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String champ_name; diff --git a/src/main/java/lbs/lbs/entity/ChampionInfo.java b/src/main/java/lbs/lbs/entity/ChampionInfo.java new file mode 100644 index 0000000..e8acb40 --- /dev/null +++ b/src/main/java/lbs/lbs/entity/ChampionInfo.java @@ -0,0 +1,43 @@ +package lbs.lbs.entity; + +import jakarta.persistence.*; +import lombok.Getter; + +@Entity +@Getter +public class ChampionInfo { + @Id @Column(name = "champion_info_id") + private int id; + + private String en_name; + private String ko_name; + private String story; + + @Lob + private byte[] champ_img; + + private String title; + private String par_type; + private int hp; + private int hp_per_level; + private int mp; + private int mp_per_level; + private int move_speed; + private int armor; + private float armor_per_level; + private int spell_block; + private float spell_block_per_level; + private int attack_range; + private int hp_regen; + private float hp_regen_per_level; + private int mp_regen; + private float mp_regen_per_level; + private int crit; + private int crit_per_level; + private int attack_damage; + private float attack_damage_per_level; + private float attack_speed; + private int attack_speed_per_level; + + +} diff --git a/src/main/java/lbs/lbs/parse/ChampInfoParsing.java b/src/main/java/lbs/lbs/parse/ChampInfoParsing.java new file mode 100644 index 0000000..e31330d --- /dev/null +++ b/src/main/java/lbs/lbs/parse/ChampInfoParsing.java @@ -0,0 +1,137 @@ +package lbs.lbs.parse; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.util.Map; + +public class ChampInfoParsing { + + private static final String JDBC_URL = "jdbc:mysql://localhost:3306/lbs_project"; + private static final String USER = "root"; + private static final String PASSWORD = "1234"; + + public static void main(String[] args) { + String jsonFilePath = "C:\\Users\\82102\\Desktop\\롤 프로젝트\\dragontail-13.19.1\\13.19.1\\data\\ko_KR\\champion.json"; // JSON 파일 경로 + String jsonData = readJsonFile(jsonFilePath); + String imagePath = "C:\\Users\\82102\\Desktop\\롤 프로젝트\\dragontail-13.19.1\\13.19.1\\img\\champion"; // 이미지 파일이 있는 디렉터리 경로 + + ChampInfoParsing parser = new ChampInfoParsing(); + parser.parseAndStoreChampionData(jsonData, imagePath); + } + + public void parseAndStoreChampionData(String jsonData, String imagePath) { + String dbUrl = "jdbc:mysql://localhost:3306/lbs_project"; // MySQL 데이터베이스 URL + String dbUser = "root"; // MySQL 사용자 이름 + String dbPassword = "1234"; // MySQL 비밀번호 + + try { + // JSON 파일 읽기 + JsonParser jsonParser = new JsonParser(); + JsonObject championData = jsonParser.parse(jsonData).getAsJsonObject(); + + // MySQL 연결 + Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword); + + // 데이터베이스에 데이터 저장 + for (Map.Entry championEntry : championData.getAsJsonObject("data").entrySet()) { + + JsonObject championInfo = championEntry.getValue().getAsJsonObject(); + + + + // 기본 정보 추출 + int championId = championInfo.get("key").getAsInt(); + String enName = championInfo.get("id").getAsString(); + String koName = championInfo.get("name").getAsString(); + String title = championInfo.get("title").getAsString(); + String story = championInfo.get("blurb").getAsString(); + String partype = championInfo.get("partype").getAsString(); + + byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath, enName+".png")); + // 스탯 정보 추출 + JsonObject stats = championInfo.getAsJsonObject("stats"); + int hp = stats.get("hp").getAsInt(); + int hpPerLevel = stats.get("hpperlevel").getAsInt(); + int mp = stats.get("mp").getAsInt(); + int mpPerLevel = stats.get("mpperlevel").getAsInt(); + int moveSpeed = stats.get("movespeed").getAsInt(); + int armor = stats.get("armor").getAsInt(); + float armorPerLevel = stats.get("armorperlevel").getAsFloat(); + int spellBlock = stats.get("spellblock").getAsInt(); + float spellBlockPerLevel = stats.get("spellblockperlevel").getAsFloat(); + int attackRange = stats.get("attackrange").getAsInt(); + int hpRegen = stats.get("hpregen").getAsInt(); + float hpRegenPerLevel = stats.get("hpregenperlevel").getAsFloat(); + int mpRegen = stats.get("mpregen").getAsInt(); + float mpRegenPerLevel = stats.get("mpregenperlevel").getAsFloat(); + int crit = stats.get("crit").getAsInt(); + int critPerLevel = stats.get("critperlevel").getAsInt(); + int attackDamage = stats.get("attackdamage").getAsInt(); + float attackDamagePerLevel = stats.get("attackdamageperlevel").getAsFloat(); + float attackSpeed = stats.get("attackspeed").getAsFloat(); + int attackSpeedPerLevel = stats.get("attackspeedperlevel").getAsInt(); + + // 데이터베이스에 삽입 + String query = "INSERT INTO champion_info " + + "(champion_info_id, en_name, ko_name, story, title, champ_img, par_type, hp, hp_per_level, mp, mp_per_level, " + + " move_speed, armor, armor_per_level, spell_block, spell_block_per_level, attack_range, hp_regen, " + + " hp_regen_per_level, mp_regen, mp_regen_per_level, crit, crit_per_level, attack_damage, " + + " attack_damage_per_level, attack_speed, attack_speed_per_level)" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setInt(1, championId); + preparedStatement.setString(2, enName); + preparedStatement.setString(3, koName); + preparedStatement.setString(4, story); + preparedStatement.setString(5, title); + preparedStatement.setBytes(6, imageBytes); + preparedStatement.setString(7, partype); + preparedStatement.setInt(8, hp); + preparedStatement.setInt(9, hpPerLevel); + preparedStatement.setInt(10, mp); + preparedStatement.setInt(11, mpPerLevel); + preparedStatement.setInt(12, moveSpeed); + preparedStatement.setInt(13, armor); + preparedStatement.setFloat(14, armorPerLevel); + preparedStatement.setInt(15, spellBlock); + preparedStatement.setFloat(16, spellBlockPerLevel); + preparedStatement.setInt(17, attackRange); + preparedStatement.setInt(18, hpRegen); + preparedStatement.setFloat(19, hpRegenPerLevel); + preparedStatement.setInt(20, mpRegen); + preparedStatement.setFloat(21, mpRegenPerLevel); + preparedStatement.setInt(22, crit); + preparedStatement.setInt(23, critPerLevel); + preparedStatement.setInt(24, attackDamage); + preparedStatement.setFloat(25, attackDamagePerLevel); + preparedStatement.setFloat(26, attackSpeed); + preparedStatement.setInt(27, attackSpeedPerLevel); + // ... (나머지 스탯 정보 삽입) + + preparedStatement.executeUpdate(); + preparedStatement.close(); + } + + // 연결 종료 + connection.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static String readJsonFile(String filePath) { + try { + return new String(Files.readAllBytes(Paths.get(filePath))); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } +}