Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Nie zapisuje graczy do MySQL


Rekomendowane odpowiedzi

Opublikowano

Witam, Tworze aktualnie plugin na drop i robie w nim zapis do MYSQL:

Wszystko działa, tworza sie tabele, łaczy sie z baza tylko jak gracz wejdzie na serwer to nie zapisuje go do MySQL'A

 

Kod:

  Klasa MYSQL:

public static String host = Main.getInst().getConfig().getString("MySQL.host");
	public static int port = Main.getInst().getConfig().getInt("MySQL.port");
	public static String database = Main.getInst().getConfig().getString("MySQL.database");
	public static String user = Main.getInst().getConfig().getString("MySQL.user");
	public static String password = Main.getInst().getConfig().getString("MySQL.password");
	public static Connection conn;
	
	
	public static void connect(){
		if(!isConnected()){
			try {
				conn = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, user, password);
				System.out.println("[MySQL] Polaczono z baza danych MYSQL");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void disconnect(){
		if(isConnected()){
			try {
				conn.close();
				System.out.println("[MySQL] Rozlaczono z baza danych MYSQL");
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static boolean isConnected(){
		return conn != null;
	}
	
	public static void createTable(){
		if(isConnected()){
			try {
				conn.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS drops (uuid VARCHAR(100), name VARCHAR(50), cobble INT(11), diamond INT(11), emerald INT(11), gold INT(11), iron INT(11), coal INT(11), redstone INT(11), lvl INT(11))");
				System.out.println("[MySQL] Wygeneraowano tabele");
			} catch (SQLException e) {
				e.printStackTrace();
			}	
		}
	}
	
	public static void saveTable(){
		if(isConnected()){
			try{
			for(Drop d : DropManager.getUsers()){
				StringBuilder sb = new StringBuilder();
				sb.append("INSERT INTO drops (uuid, name, cobble, diamond, emerald, gold, iron, coal, redstone, lvl) VALUES (");
				sb.append("'" + d.getUuid().toString() +"',");
				sb.append("'" + d.getName() +"',");
				sb.append("'" + d.getCobble() +"',");
				sb.append("'" + d.getDiamond() +"',");
				sb.append("'" + d.getEmerald() +"',");
				sb.append("'" + d.getGold() +"',");
				sb.append("'" + d.getIron() +"',");
				sb.append("'" + d.getCoal() +"',");
				sb.append("'" + d.getRedstone() +"',");
				sb.append("'" + d.getLvl() +"'");
				sb.append(") ON DUPLICATE KEY UPDATE ");
				sb.append("name='" + d.getName() + "',");
				sb.append("cobble='" + d.getName() + "',");
				sb.append("diamond='" + d.getName() + "',");
				sb.append("emerald='" + d.getName() + "',");
				sb.append("gold='" + d.getName() + "',");
				sb.append("iron='" + d.getName() + "',");
				sb.append("coal='" + d.getName() + "',");
				sb.append("redstone='" + d.getName() + "',");
				sb.append("lvl='" + d.getName() + "';");
				conn.createStatement().executeUpdate(sb.toString());
			}
			}catch(SQLException e){
				e.printStackTrace();
			}
			System.out.println("[MySQL] Zapisano Graczy");
		}
	}
	
	public static void loadTable(){
		if(isConnected()){
			try{
			ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM drops");
			while(rs.next()){
				Drop d = DropManager.getUser(UUID.fromString(rs.getString("uuid")));
				d.setName(rs.getString("name"));
				d.setCobble(rs.getInt("cobble"));
				d.setDiamond(rs.getInt("diamond"));
				d.setEmerald(rs.getInt("emerald"));
				d.setGold(rs.getInt("gold"));
				d.setIron(rs.getInt("iron"));
				d.setCoal(rs.getInt("coal"));
				d.setRedstone(rs.getInt("redstone"));
				d.setLvl(rs.getInt("lvl"));
				}
			}catch(SQLException e){
				e.printStackTrace();
			}
			System.out.println("[MySQL] Zaladowano Graczy");
		}
	}
}

Klasa: PlayerJoin

	@EventHandler
	public static void onJoin(PlayerJoinEvent e){
		Drop d = DropManager.getUser(e.getPlayer());
		d.setUUID(e.getPlayer().getUniqueId());
		d.setName(e.getPlayer().getName());
		d.setCobble(0);
		d.setDiamond(0);
		d.setEmerald(0);
		d.setGold(0);
		d.setIron(0);
		d.setCoal(0);
		d.setRedstone(0);
		d.setLvl(0);
	}

 

                 EASYYT.PL

Opublikowano

a cóż to jest

sb.append("INSERT INTO drops (uuid, name, cobble, diamond, emerald, gold, iron, coal, redstone, lvl) VALUES (");

jak mnie pamięć nie myli to musisz zrobić w values zmienne tak przynajmniej jest w php

np jak masz w pierwszym uuid to musisz w php zrobic

sb.append("INSERT INTO drops (uuid, name, cobble, diamond, emerald, gold, iron, coal, redstone, lvl) VALUES ($uuid, $name, $cobble);
Opublikowano

@krzukosz

W tym przypadku akurat nie

bym tak zrobil jak bym chcial zrobic statystyki na stronie, ale ja chce zrobic baze pod plugin, czyli mam dobrze jak wczesniej :0

 

                 EASYYT.PL

Opublikowano

@krzukosz

W tym przypadku akurat nie

bym tak zrobil jak bym chcial zrobic statystyki na stronie, ale ja chce zrobic baze pod plugin, czyli mam dobrze jak wczesniej :0

Zazwyczaj jak coś się "nie zapisuje" "nie ładuje" czy "nie..." to w konsoli serwera/aplikacji masz stackTrace i w nim masz podane co "zjebales" i jeśli byś nam wysłał takiego stackTrace było by łatwiej, bo jednak błedów mogłeś zrobić dużo

Co ja tutaj robie...

Opublikowano

 

@krzukosz

W tym przypadku akurat nie

bym tak zrobil jak bym chcial zrobic statystyki na stronie, ale ja chce zrobic baze pod plugin, czyli mam dobrze jak wczesniej :0

 

Zazwyczaj jak coś się "nie zapisuje" "nie ładuje" czy "nie..." to w konsoli serwera/aplikacji masz stackTrace i w nim masz podane co "zjebales" i jeśli byś nam wysłał takiego stackTrace było by łatwiej, bo jednak błedów mogłeś zrobić dużo
Bez tego się nie obejdzie? Musiałeś nabić post?

 

@topic

Po pierwsze, dane nawet nie są dodawane do bazy, ponieważ kwerenda nie jest nawet w połowie dobrze napisana. Po drugie za każdym wejściem na serwer wszystkie dane ustawiasz na 0, zamiast wykonać metodę ładującą te dane, tj. loadTable().

sygn.png

Opublikowano

Pokaż obiekt i manager, ale n hastebin.com wrzuc.

 

DropManager.getUser(e.getPlayer());

Tu masz tworzenie obiektu ? (W tej metodzie) ?

Opublikowano

Łap na szybkiego zrobione.

Pisane w hastebinie, wiec napewno metody getUUID() bedziesz musial poprawic, bo nie chcialo mi sie pisac calych.

 

DropManager: https://hastebin.com/fisejahola.cs

 

A przy wchodzeniu: https://hastebin.com/obihuxilow.java

 

 

 

A co do obiektu, pobierz sobie lombok'a  mniej roboty i czystszy kod:

https://projectlombok.org/

https://projectlombok.org/features/

 

 

 

 

PS. w managerze  w removeUser usun negacje.

 

 

Po tym nie bedzie Ci działąło wszytko, musisz jeszcze klase mysql przerobić.

 

Najlepiej jak w obiekcie bys zrobil tworzenie obiektu z ResultSet'a.

i przy zapisywaniu w update, masz przypisywanie wszedzie nick gracza, zmien to :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...