Skocz do zawartości
  • 0

Mysql zapis boolean fat pomocy


Pytanie

więc tak mam User i gdy zapisuję to do mysql to jest taki błąd

 

[19:04:29 WARN]: java.sql.SQLException: Incorrect integer value: 'false' for column 'banned' at row 1
[19:04:29 WARN]: 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
[19:04:29 WARN]: 	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
[19:04:29 WARN]: 	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
[19:04:29 WARN]: 	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
[19:04:29 WARN]: 	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
[19:04:29 WARN]: 	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
[19:04:29 WARN]: 	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662)
[19:04:29 WARN]: 	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)
[19:04:29 WARN]: 	at pl.main.Main.saveData(Main.java:140)
[19:04:29 WARN]: 	at pl.main.Main.onDisable(Main.java:62)
[19:04:29 WARN]: 	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:323)
[19:04:29 WARN]: 	at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:364)
[19:04:29 WARN]: 	at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424)
[19:04:29 WARN]: 	at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417)
[19:04:29 WARN]: 	at org.bukkit.plugin.SimplePluginManager.clearPlugins(SimplePluginManager.java:458)
[19:04:29 WARN]: 	at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:708)
[19:04:29 WARN]: 	at org.bukkit.Bukkit.reload(Bukkit.java:535)
[19:04:29 WARN]: 	at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25)
[19:04:29 WARN]: 	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[19:04:29 WARN]: 	at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13)
[19:04:29 WARN]: 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[19:04:29 WARN]: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654)
[19:04:29 WARN]: 	at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557)
[19:04:29 WARN]: 	at java.lang.Thread.run(Thread.java:748)

 

coś nie tak z booleanem banned

 

jak coś to tak sprawdzam

sb.append("banned boolean not null,");

pomocy

Odnośnik do komentarza
https://skript.pl/temat/25782-mysql-zapis-boolean-fat-pomocy/
Udostępnij na innych stronach

12 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
			private static Connection conn;
			
			private void checkTable(){
				openConnection();
				StringBuilder sb = new StringBuilder();
				sb.append("create table if not exists user(");
				sb.append("uuid varchar(100) not null,");
				sb.append("name varchar(50) not null,");
				sb.append("banned boolean not null,");
				sb.append("s1 varchar(50) not null,");
				sb.append("s2 varchar(50) not null,");
				sb.append("primary key(uuid));");
				try {
					conn.createStatement().executeUpdate(sb.toString());
				} catch (SQLException e) {
					e.printStackTrace();
				}
			    closeConnection();
			}
			
			private void loadData() throws SQLException{
				openConnection();
				int i = 0;
				ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM `user`");
				while(rs.next()){
					User u = User.get(UUID.fromString(rs.getString("uuid")));
					u.setName(rs.getString("name"));
					u.setbanned(rs.getBoolean("banned"));
					u.setlayerArenaName(rs.getString("s1"));
					u.sets2(rs.getString("s2"));
					i++;
					
				}
				Bukkit.getConsoleSender().sendMessage("§2Load " + i + " users succes!");
				closeConnection();
			}
			
			private static void saveData() throws SQLException{
				openConnection();
				int i = 0;
				for(User u : UserManager.getUsers()){
					StringBuilder sb = new StringBuilder();
					sb.append("INSERT INTO user (uuid, name, banned, s1, s2) VALUES (");
					sb.append("'" + u.getUUID().toString() +"',");
					sb.append("'" + u.getName() +"',");
					sb.append("'" + u.getbanned() +"',");
					sb.append("'" + u.gets1() +"',");
					sb.append("'" + u.gets2() +"'");
					sb.append(") ON DUPLICATE KEY UPDATE ");
					sb.append("name='" + u.getName() +"',");
					sb.append("banned='" + u.getbanned() +"',");
					sb.append("s1='" + u.gets1() +"',");
					sb.append("s2='" + u.gets2() +"';");
					conn.createStatement().executeUpdate(sb.toString());
					i++;
				}
				Bukkit.getConsoleSender().sendMessage("§2Saved "+i+" users succes!");
				closeConnection();
			}
			
			private synchronized static void openConnection(){
				if(!isConnected()){
					try{
						conn = DriverManager.getConnection("usuniete :)");
					} catch(SQLException e){
						e.printStackTrace();
					}
				}
			}
			
			private synchronized static void closeConnection(){
				if(isConnected()){
					try{
						conn.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
				}
			}
			
			public static boolean isConnected() {
				try{
					if(conn == null) return false;
					if(conn.isClosed()) return false;
				} catch(SQLException e){
					e.printStackTrace();
				}
				return true;
			}

zmieniłem Stringi na s1 i s2  bo nie mogę ich ujawnić :)

Odnośnik do komentarza
https://skript.pl/temat/25782-mysql-zapis-boolean-fat-pomocy/#findComment-170521
Udostępnij na innych stronach

  • 0

taaa, nie możesz, straszne, na pewno ktoś by potrzebował nazwy pola w bazie, ech co za rak.

A warto by wiedzieć co masz w tych stringach bo jest duża szansa ze mogą być one użyte by nawet przejąć kontrolę nad twoją bazą danych - bo robisz wszystko w najgorszy możliwy sposób. poczytaj o PreparedStatement, a tak to problem masz taki że próbujesz ustawić pole w bazie "banned" na string o wartości "false", a to tak nie może zadziałać, bo przecież typ tej kolumny to boolean a nie string.

poczytaj też o operacjach batch, bo robienie save dla każdego usera w osobnym requeście to też zły pomysł.

 

Więc ogólnie użyj PreparedStatement z batch i wszystko się naprawi.

https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/

 

PS: zapomniałeś o s1 = setlayerArenaName

I CO TERAZ?!?!?!?!!!?

Edytowane przez GotoFinal
Odnośnik do komentarza
https://skript.pl/temat/25782-mysql-zapis-boolean-fat-pomocy/#findComment-170523
Udostępnij na innych stronach

  • 0

umiesz może czytać? masz w linku cały przykład jak to zrobić...

https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/

 

	private static void batchInsertRecordsIntoTable() throws SQLException {

		Connection dbConnection = // połączenie z bazą
		PreparedStatement preparedStatement = null;

		String insertTableSQL = "INSERT INTO DBUSER"
				+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
				+ "(?,?,?,?)"; // pytajniki zastępują tutaj wartości, zmień na swojego inserta ale też użyj pytajników zamiast wartości

		try {
			preparedStatement = dbConnection.prepareStatement(insertTableSQL);

          
          // i ustawiasz kolejne wartości, pierwsza zminna to numer pytajnika
			preparedStatement.setInt(1, 101);
			preparedStatement.setString(2, "mkyong101");
			preparedStatement.setString(3, "system");
			preparedStatement.setTimestamp(4, getCurrentTimeStamp());
          // i dodajesz do batcha
			preparedStatement.addBatch();
          // i możesz tak robić w pętli na wszystkich graczy


          // i za pętlą wtedy wykonujesz całość
			preparedStatement.executeBatch();


		} catch (SQLException e) {
// to jakoś powinieneś ładnie obsłużyć błąd, np ponawiając próbe dodania i wypritnowanie exception do konosli na zapas
          e.printStackTrace();

		}

	}

 

Odnośnik do komentarza
https://skript.pl/temat/25782-mysql-zapis-boolean-fat-pomocy/#findComment-170534
Udostępnij na innych stronach

  • 0

Zrobiłem to i działa zapisywanie ale nie wiem jak pobrać np int xd z bazy przy loadPlayers pomocy!!!!

 

private Connection connection;
	public String host, database, username, password, table;
	public int port;

	public void mysqlSetup() {
		host = "//";
		port = //;
		database = "//";
		username = "//";
		password = "//";
		table = "//";

		try {

			synchronized (this) {
				if (getConnection() != null && !getConnection().isClosed()) {
					return;
				}

				Class.forName("com.mysql.jdbc.Driver");
				setConnection(
						DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database,
								this.username, this.password));

				Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "MYSQL CONNECTED");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public Connection getConnection() {
		return connection;
	}

	public void setConnection(Connection connection) {
		this.connection = connection;
	}
	
	public boolean playerExists(UUID uuid) {
		try {
			PreparedStatement statement = getConnection()
					.prepareStatement("SELECT * FROM " + table + " WHERE UUID=?");
			statement.setString(1, uuid.toString());

			ResultSet results = statement.executeQuery();
			if (results.next()) {
				getServer().broadcastMessage(ChatColor.YELLOW + "Player Found");
				return true;
			}
			getServer().broadcastMessage(ChatColor.RED + "Player NOT Found");

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public void createPlayers(){
		try{
			for(User u : UserManager.getUsers()){
				PreparedStatement statement = getConnection().prepareStatement("SELECT * FROM " + table + " WHERE UUID=?");
				statement.setString(1, u.getUUID().toString());
				ResultSet results = statement.executeQuery();
				results.next();
				System.out.print(1);
				if(playerExists(u.getUUID()) != true){
					PreparedStatement insert = getConnection().prepareStatement("INSERT INTO " + table + " (UUID,NAME,COINS) VALUES (?,?,?)");
					insert.setString(1, u.getUUID().toString());
					insert.setString(2, u.getName());
					insert.setInt(3, u.getXD());
				}
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
	}
	
	public void loadPlayers(){
		try{
			PreparedStatement statement = getConnection().prepareStatement("SELECT * FROM " + table + " WHERE UUID=?");
			for(User u : UserManager.getUsers()){
				statement.setString(1, u.getUUID().toString());
				ResultSet results = statement.executeQuery();
				results.next();
				System.out.print(1);
				if(playerExists(u.getUUID()) != true){
					PreparedStatement insert = getConnection().prepareStatement("INSERT INTO " + table + " (UUID,NAME,COINS) VALUES (?,?,?)");
					
				}
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
	}

	public void createPlayer(final UUID uuid, Player player) {
		try {
			PreparedStatement statement = getConnection()
					.prepareStatement("SELECT * FROM " + table + " WHERE UUID=?");
			statement.setString(1, uuid.toString());
			ResultSet results = statement.executeQuery();
			results.next();
			System.out.print(1);
			if (playerExists(uuid) != true) {
				PreparedStatement insert = getConnection()
						.prepareStatement("INSERT INTO " + table + " (UUID,NAME,COINS) VALUES (?,?,?)");
				insert.setString(1, uuid.toString());
				insert.setString(2, player.getName());
				insert.setInt(3, 500);
				insert.executeUpdate();

				getServer().broadcastMessage(ChatColor.GREEN + "Player Inserted");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

jak pobrać te dane???

Odnośnik do komentarza
https://skript.pl/temat/25782-mysql-zapis-boolean-fat-pomocy/#findComment-170631
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...