Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235

    Problema creazione database sql in java

    Prima di tutto un saluto sono nuovo di questo sito siccome ogni volta che ho problemi con java incontro sempre le delucidazioni del vostro sito ho deciso di registrarmi perchè è veramente interessante..detto questo
    allora io devo fare un progetto che può inserire ricercare e cancellare oggetti in un database...
    nello specifico il mio database deve essere formato di oggetti di una classe creata da me di nome CD un'altra DVD e poi un altra Libro...
    è un progetto client server multithread con interfaccia grafica e database mysql...
    allora mi sono bloccato in un punto, praticamente ho creato manualmente il database in mysql ed ho aggiunto la tabella inserisciCD dove poi posso inserire oggetti di tipo CD stessa cosa per DVD e per Libro(mi manca ora solo la parte di ricerca nel database e di cancellazioni di oggeti nel database).
    ho collegato il mio bottone salva ad un action listener che manda attraverso il metodo Client.inserisciCD(parametri da inserire) l'oggetto che il client vuole caricare nel database.
    Qui mi da però un errore:

    codice:
    New client accepted.
    
    java.io.StreamCorruptedException: invalid stream header: 6D696F3B
    	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    	at java.io.ObjectInputStream.<init>(Unknown Source)
    	at Progetto.ServerThread.<init>(MultiThreadServer.java:70)
    	at Progetto.MultiThreadServer.main(MultiThreadServer.java:44)
    Exception in thread "Thread-1" java.lang.NullPointerException
    	at Progetto.ServerThread.run(MultiThreadServer.java:81)
    new client accepted si trova nel server ed è dopo l'accept quindi il server e il client suppongo siano connessi, però non aggiunge al database il nuovo CD

    il server del progetto è questo:

    codice:
    package Progetto;
    import java.io.*;
    import java.net.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.*;
    import java.sql.*;
    public class MultiThreadServer {
    	
    	private static ServerSocket serverSocket;
        private static final int PORT = 7776;
        private static Connection con;
        public static void main(String[] args) {
        	
         try{ 
        	 Class.forName("com.mysql.jdbc.Driver");
        	 String nomeDB = "ArchivioDB";
        	 String nomeUtente = "root";
        	 String pwdUtente = "root";
        	 con = DriverManager.getConnection("jdbc:mysql://localhost/" + nomeDB + "?user=" + nomeUtente + "&password=" + pwdUtente); 
    //         boolean ris = con.createStatement().execute(Query.CreaArchivioCD);
    //         if (ris){
    //        	 System.out.println("Archivio CD");
    //         }
         
         
         }catch(SQLException e) { 
        	 System.out.println("errore ");
        	 e.printStackTrace();
         }
         catch (ClassNotFoundException e) {
    		e.printStackTrace();
         }
             
        	try {
                serverSocket = new ServerSocket(PORT);
          
                while(true) {
             	  //Wait for client...
                	Socket client = serverSocket.accept();
                	System.out.println("\nNew client accepted.\n");
                	ServerThread thread = new ServerThread(client,con);
                    thread.start();
                  // Esecuzione dei thread in base alla richiesta dei client
         
                }
        	}catch (IOException ioEx) {
                System.out.println("\nUnable to set up port!");
                ioEx.printStackTrace();
                System.exit(1);
            }
    }
        
    }
    
    class ServerThread extends Thread {
    	    Socket client;
    	    ObjectInputStream input;
    	    PrintWriter output;
    	    Connection con;
    
    	    public ServerThread(Socket socket,Connection con ) {
    	        //Set up reference to associated socket...
    	        client = socket;
    	        this.con=con;
    
    	        try {
    	            input = new  ObjectInputStream(client.getInputStream());
    	            output = new PrintWriter(client.getOutputStream(),true);	   
    
    	        }
    	        catch(IOException ioEx) {
    	            ioEx.printStackTrace();
    	        }
    	    }
    	    
    	    public void run() {
    	    	try {
    				Object obj=input.readObject();
    				if(obj.getClass().getName().equals("CD")){
    					CD cd = (CD)obj;
    					PreparedStatement ps = con.prepareStatement(Query.InsertCD);
    					ps.setString(1,cd.getTitolo());
    					ps.setString(2,cd.getAutore());
    					ps.setInt(3,cd.getNumeroTracce());
    					ps.setDouble(4,cd.getTempoEsecuzione());
    					ps.setBoolean(5,cd.getPrestito());
    					ps.setString(6,cd.getCommento());
    					int res = ps.executeUpdate();
    					if(res>0){
    						output.print(true);
    					} else 
    						output.print(false);
    					ps.close();
    				}
    				if(obj.getClass().getName().equals("DVD")){
    					DVD dvd = (DVD)obj;
    					PreparedStatement ps = con.prepareStatement(Query.InsertDVD);
    					ps.setString(1,dvd.getTitolo());
    					ps.setString(2,dvd.getRegista());
    					ps.setDouble(3,dvd.getTempoEsecuzione());
    					ps.setBoolean(4,dvd.getPrestito());
    					ps.setString(5,dvd.getCommento());
    					int res = ps.executeUpdate();
    					if(res>0){
    						output.print(true);
    					} else 
    						output.print(false);
    					ps.close();
    				}
    				if(obj.getClass().getName().equals("Libro")){
    					Libro libro = (Libro)obj;
    					PreparedStatement ps = con.prepareStatement(Query.InsertLibro);
    					ps.setString(1,libro.getTitolo());
    					ps.setString(2,libro.getAutore());
    					ps.setString(3,libro.getcasaEditrice());
    					ps.setInt(4,libro.getAnnoPubblicazione());
    					ps.setInt(5,libro.getNumeroPagine());
    					ps.setBoolean(6,libro.getPrestito());
    					ps.setString(7,libro.getCommento());
    					
    					int res = ps.executeUpdate();
    					if(res>0){
    						output.print(true);
    					} else 
    						output.print(false);
    					ps.close();
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    	    }
    }

  2. #2
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    [CODE]il client del progetto è questo:

    codice:
    package Progetto;
    import java.io.*;
    import java.net.*;
    import java.util.*;
    public class Client {
    	private static InetAddress host;
    	private static final int PORT = 7776;
    
    	public static void main(String atgs[]) {
    		try
    		{
    			host = InetAddress.getLocalHost();
    		}
    		catch(UnknownHostException uhEx)
    		{
    			System.out.println("\nHost ID not found!\n");
    			System.exit(1);
    		}
    		GUIManager gui = new GUIManager();
    	
    	}
    	
    	public static boolean inserisciCD(CD inserireCD) {
    		Socket socket = null;
    		boolean res=false;
    		try
    		{
    			socket = new Socket(host,PORT);
    			Scanner in =new Scanner(socket.getInputStream());
    			PrintStream ps = new PrintStream (socket.getOutputStream());
    			ps.print(inserireCD);
    			if(in.nextBoolean()) 
    				res= true;
    			
    			
    		}catch(IOException ioEx)
    		{
    			ioEx.printStackTrace();
    		}
    		return res;
    		
    	}
    	public static boolean inserisciDVD(DVD inserireDVD) {
    		Socket socket = null;
    		boolean res=false;
    		try
    		{
    			socket = new Socket(host,PORT);
    			Scanner in =new Scanner(socket.getInputStream());
    			PrintStream ps = new PrintStream (socket.getOutputStream());
    			ps.print(inserireDVD);
    			if(in.nextBoolean()) 
    				res= true;
    			
    			
    		}catch(IOException ioEx)
    		{
    			ioEx.printStackTrace();
    		}
    		return res;
    	}
    	public static boolean inserisciLibro(Libro inserireLibro) {
    		Socket socket = null;
    		boolean res=false;
    		try
    		{
    			socket = new Socket(host,PORT);
    			Scanner in =new Scanner(socket.getInputStream());
    			PrintStream ps = new PrintStream (socket.getOutputStream());
    			ps.print(inserireLibro);
    			if(in.nextBoolean()) {
    				res= true;
    			}
    			
    		}catch(IOException ioEx){
    			ioEx.printStackTrace();
    		}
    		return res;
    	}
    }

  3. #3
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    per favore non c'è nessuno che mi può aiutare che sto impazzendo da questa mattina

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da payens88
    per favore non c'è nessuno che mi può aiutare che sto impazzendo da questa mattina
    Una delle cose da fare quando si posta del codice (specie se così lungo e articolato) è usare gli sppositi tag CODE previsti dal forum e da regolamento interno.

    Questo permette agli utenti di leggere meglio il codice, che codì com'è ora è praticamente illeggibile.

    Sistemo io i tuoi post, se il codice è indentato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    scusami non lo sapevo

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Una cosa: quando si devono inviare degli oggetti (tramite serializzazione) si dovrebbe usare ObjectOutputStream e non PrintStream che si usa, solitamente, per stream di testo... cosa che gli oggetti non sono.

    Dovrai, di conseguenza, rivedere gran parte del tuo codice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    ma l'errore che mi da quindi è per questo motivo????

  8. #8
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    [CODE]
    codice:
    socket = new Socket(host,PORT);
    			Scanner in =new Scanner(socket.getInputStream());
    			ObjectOutputStream ps = new ObjectOutputStream (socket.getOutputStream());
    			ps.writeObject(inserireCD);
    			if(in.nextBoolean()) 
    				res= true;
    [B]ho cambiato il client in questo

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da payens88
    ma l'errore che mi da quindi è per questo motivo????
    Direi proprio di sì: usando il metodo print() che riceve un Object (come fai tu), si ottiene come risultato, l'invio di una stringa che rappresenta il valore di String.valueOf( oggetto )... e non è esattamente quello che vuoi ottenere tu.


    Per non parlare del fatto che, dall'altra parte, stai cercando di costruire un ObjectInputStream utilizzando uno stream che non è fatto per la trasmissione di oggetti (non avendo usato ObjectOutputStream, ma PrintStream).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente bannato L'avatar di payens88
    Registrato dal
    Jun 2010
    Messaggi
    235
    scusami quindi dovrei mettere nel client



    codice:
        ObjectOutputStream ps = new ObjectOutputStream (socket.getOutputStream());
    ps.writeObject(inserireCD);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.