Connessione a SQL Server 2005

di il
6 risposte

Connessione a SQL Server 2005

Ciao a tutti, sto cercando di connettermi con NetBeans IDE ad un server SQL 2005 impostando la connessione da codice (ho già importato il driver).
La connessione da Services funziona, ma da codice non riesco a farlo funzionare.
import java.sql.*;

public class connessione {
 public Connection connect()
 {
     Connection cn = null;
     try
     {
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         cn = DriverManager.getConnection("jdbc:sqlserver://DBSSQL:1433;DatabaseName=Sicurezza;user=sa;password=xxxxx;");
     }
     catch (Exception ex)
     {
         System.out.println("Error: " + ex.getMessage());
     }
     return cn;
 }
}
L'errore è questo: "L'indice 1 non rientra nell'intervallo consentito."

Cosa sbaglio?
Grazie a tutti

6 Risposte

  • Re: Connessione a SQL Server 2005

    Ciao,
    hai provato a inserire
    import microsoft.sql.*;
    ?!
  • Re: Connessione a SQL Server 2005

    Ho provato ma mi dice "Unused import"
  • Re: Connessione a SQL Server 2005

    Usi il driver sqljdbc4.jar?
    cmq mi sono sbagliato prima, mi pare sia necessario
    import java.sql.*;
    potrebbe essere l indirizzo ip sbagliato?! (jdbc:sqlserver://ip:1433;)
    nel tuo caso di una macchina locale prova con 127.0.0.1
    
                    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    con=
                    DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;" +
                                                                 ";user=login"+
                                                                 ";password=pass");
    
    quindi se è tutto corretto lato codice dev essere un errore lato server...
  • Re: Connessione a SQL Server 2005

    Si, il driver JDBC è giusto e import java.sql.*; è presente. Continua a darmi errore "L'indice 1 non rientra nell'intervallo consentito".


    Maledetta Microsoft!
  • Re: Connessione a SQL Server 2005

    Ragazzi forse mi sta venendo un dubbio che il codice sbagliato sia sulla query sql che faccio, e non sul collegamento al server. Potete controllare per piacere?

    Cliccando sul button controllo se l'utente esiste:
    private void btn_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
            // Pulsante login:
            //Stringa di connessione SQL
            
            utenti obj = new utenti();
            obj.setUtente(txt_utente.getText());
            
            if (obj.consulta())
            {
                JOptionPane.showMessageDialog(this, "UTENTE TROVATO");
            }
    
            else
            {
                JOptionPane.showMessageDialog(this, "UTENTE NON TROVATO");
            }
        }  
    Questo è il metodo per la query:
    
    public boolean consulta()
        {
            boolean risposta = false;
            
            try
            {
                String sql = "SELECT * from USERDB where USERDB.UTENTE ='" + utente + "'";
                try (PreparedStatement cmd = cn.prepareStatement(sql)) {
                    cmd.setString(1, utente);
                    ResultSet rs = cmd.executeQuery();
                    
                    if(rs.next())
                    {
                        risposta = true;
                        utente = rs.getString(1);
                    }
                }
                cn.close();
            }
            catch (Exception ex)
            {
                System.out.println("Errore: " + ex.getMessage());
            }
            return risposta;
        }
    
  • Re: Connessione a SQL Server 2005

    Prova questo codice e/o adattalo ai tuoi scopi.
    Dovrebbe funzionare.

    
    package tuopackage;
    import java.sql.*;
    
    public class DBLink {
    	private Connection conn=null;
    	
    	public DBLink(){
    		Connection conn=null;
    		
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    			String server="jdbc:sqlserver://ServerDB:1433;databaseName=nome_database";
    			conn = DriverManager.getConnection(server, usernameAdm, passwordAdm)
    		}
    		catch(SQLException ex){
    			System.err.println("SQLException");
    			ex.printStackTrace();
    		}
    		catch(ClassNotFoundException ex){
    			System.err.println("ClassNotFoundException");
    			ex.printStackTrace();
    		}
    		
    		catch(Exception ex){
    			System.err.println("Generic Exception");
    			ex.printStackTrace();
    		}
    		
    		System.out.println("OK");
    		
    	}
    	
    	public boolean consulta(String user){
        	boolean risposta=false;
    		String utente=user;
    		try{
    			Statement  s = c.createStatement();
    			String query;
    			query += " SELECT * from USERDB where utente='" + utente + "'";
    			ResultSet  r = s.executeQuery(query);
    			while(r.next())
    			{
    				risposta = true;
    				utente = r.getString("utente");
                    
    			}
    			
    			r.close();
    			
    			s.close();
        	}
    
    		catch(SQLException e)
    		{
    		   System.err.println(e);
    		}
    		
    		return risposta;
    	}
    	
    	
    	
    	public void closeDB(){
    		try{
    			conn.close();
    		}
    		catch(SQLException sqlex){
    			sqlex.printStackTrace();
    		}
    	}	
    }
    
    
    Mi raccomando non "uccidere" mai le eccezioni, queste sono le informazioni preziose che ci fanno capire gli errori nel listato.
    Poi se hai degli errori che non riesci a capire fai un debug così da comprendere la riga responsabile dell'errore, la corretta valorizzazione delle variabili coinvolte etc etc.

    Inoltre non capisco la costruzione della tua classe (ho cambiato nome alla variabile dell'oggetto), posto che un oggetto si scrive sempre con la maiuscola, quindi la classe si crea con la maiuscola [Utenti ut=new Utenti()]
    
    utenti ut = new utenti();
    ut.setUtente(txt_utente.getText());
            
    if (ut.consulta()){
    ....
    
    E' sempre bene distinguere la classe che memorizza il nome dell'utente (entity) con la classe che ti fa la connessione al DB e la query (boundary), altrimenti mettiamo tutto in un calderone e non hai più la riusabilità del codice


    Nel tuo codice la query è sbagliata.
    I preparedStatement non si creano come hai fatto te.
    Hai letto un pò di documentazione?
    qui un esempio:
    
    PreparedStatement ps_1 = null;
    SelectDatiPrecedenti+=" SELECT punti, gol";
    SelectDatiPrecedenti+= " FROM Classifica";
    SelectDatiPrecedenti+=" WHERE giornata = ? ";
    ps_1 = c.prepareStatement(SelectDatiPrecedenti);
    ps_1.setInt(1, 15);
    
    P.S. mi aspetto ovviamente che tu abbia inserito la sqljdbc4.jar come librerie esterna e l'abbia aggiunta al tuo classpath, altrimenti non puoi fare nulla.
    Ultima domanda: che sistema operativo hai?

    Ciao
Devi accedere o registrarti per scrivere nel forum
6 risposte