Skocz do zawartości

Nie zapisuje graczy do MySQL


Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

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);

Prawdziwą odwagą nie jest wiedzieć jak odebrać życie, a kiedy je darować. ~ Mithrandir

Odnośnik do komentarza
Udostępnij na innych stronach

@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...

Odnośnik do komentarza
Udostępnij na innych stronach

 

@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

Odnośnik do komentarza
Udostępnij na innych stronach

Ł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 :)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

  • Ostatnio przeglądający forum Nie zapisuje graczy do MySQL   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...