|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
[Java] JDBC e disegno di immagini
Sono ancora qui a chiedervi aiuto per Java... i mie problemi sono:
1) per poter utilizzare un databese con JDBC è necessario caricare i driver del DBMS tramite la shell; non esiste un modo per caricare questi driver senza che l'utente debba intervenire tramite comandi da shell (poichè l'utente medio non ha familiarità con essi)? 2) ho la necessità di disegnare un immagine in un pannello JPanel, il problema consiste nel fato che tale pannello è di dimensioni troppo ridotte per contenere l'immagine e non posso ridimensionare quest'ultima (per motivi estetici). Esiste un modo per indicare arbitrariamente le dimensioni del pannello (ho provato con il metodo setSize() ma non ha dato alcun effetto)? Thx a tutti coloro che mi risponderrano |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Re: [Java] JDBC e disegno di immagini
Quote:
spiegati meglio, cos'e' che deve fare l'utente? se l'utente chiama un batch (o uno script di shell) che setta il classpath aggiungendo i drivers jdbc non va bene? |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
In poche parale devo semplicemente fare un'applicazione con una GUI per l'utente che possa accedere ad un database, il problema è che nelle applicazioni che utilizzano JDBC devono essere caricati i driver del DBMS che si intende utilizzare. Il caricamento viene effettuato tramite il passaggio di argomenti al comando "java" (o "javac") eseguito in sell in modo tale da aggiungerlo al classpath. Volevo trovare un modo per far si che l'applicazione stessa di Java caricasse tali driver senza il bisogno dell'intervento dell'utente da shell.
Mentre pensavo ad una soluzione ho trovato il metodo exec che permette di eseguire il codece contenuto in un file, quindi potrei aggirare il problema in questo modo... appena ho un attimo di tempo provo Se qualcuno ha una soluzione migliore si faccia avanti, i consigili (e le critiche) son sempre ben accetti ^O^. Thx P.S: plz aiutatemi anche con il ridimensionamento del pannello ç_ç |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
up
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
per il primo problema prova una roba del genere:
Codice:
URL url = new URL("jar:file:/mypath/mydriver.jar");
String nomedriver = "il.mio.Driver";
URLClassLoader urlcl = new URLClassLoader(new URL[] { url });
DriverManager.registerDriver((Driver)Class.forName(nomedriver, true, urlcl).newInstance());
naturalmente il jar e il nome della classe che implementa Driver li devi avere |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
Thx mille, ora provo
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
fammi sapere, non sono sicuro funzioni perche' qui non posso provare. non vorrei che per ragioni di sicurezza DriverManager si rifiutasse di caricare una clase con un classloader diverso da quello di default. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
mi da un MalformedURLException nell'istruzione:
URL url = new URL("jar:file:hsqldb/lib/hsqldb.jar"); e non ne capisco il motivo ?_? |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
Ok ho risolto con:
URL url = new URL("jar:file:hsqldb/lib/hsqldb.jar!/"); poichè ho trovato sul sito della sun che ci vuole "!/", anche se non ne ho capito la necessità... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
uff ancora probelmi, ora mi da un IllegalArgumenException in:
DriverManager.registerDriver((Driver)Class.forName(nomedriver, true, urlcl).newInstance()); Ho spezzato l'istruzione in: Driver driver = (Driver)Class.forName(nomedriver,true,urlcl).newInstance(); DriverManager.registerDriver(driver); e mi da la stessa eccezione in: Driver driver = (Driver)Class.forName(nomedriver,true,urlcl).newInstance(); Che potrebbe essere?? La variabile nomedriver contiene "jdbc:hsqldb:hsql". |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
ok niubbata mia... sbagliato il nome del driver
String nomedriver = "org.hsqldb.jdbcDriver"; |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
mmm ora però da un prob che non credo essere in grado di risolvere... il codice è il seguente:
----------------------------------------------------------------------------------- try { URL url = new URL("jar:file:hsqldb/lib/hsqldb.jar!/"); System.out.println("url OK"); String nomedriver = "org.hsqldb.jdbcDriver"; System.out.println("nome driver OK"); URLClassLoader urlcl = new URLClassLoader(new URL[] { url }); System.out.println("URL class loader OK"); Driver driver = (Driver)Class.forName(nomedriver,true,urlcl).newInstance(); System.out.println("Driver OK"); DriverManager.registerDriver(driver); System.out.println("registrazione driver OK"); }catch(Exception e) { javax.swing.JOptionPane.showMessageDialog(null, e.toString()); } Connection conn = null; Statement stmt = null; ResultSet rset = null; try { conn = DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1:8888","sa",""); System.out.println("Connessione stabilita..."); stmt = conn.createStatement(); System.out.println("Statement creato..."); stmt.execute("DROP TABLE quotes IF EXISTS;"); System.out.println("Query eseguite..."); }catch(java.sql.SQLException sqlE) { javax.swing.JOptionPane.showMessageDialog(null, sqlE.toString()); } try { rset.close(); System.out.println("Recordset chiuso..."); }catch(Exception e) { javax.swing.JOptionPane.showMessageDialog(null, e.toString()); } try { stmt.close(); System.out.println("Statement chiuso..."); }catch(Exception e) { javax.swing.JOptionPane.showMessageDialog(null, e.toString()); } try { conn.close(); System.out.println("Connessione chiusa..."); }catch(Exception e) { javax.swing.JOptionPane.showMessageDialog(null, e.toString()); } ----------------------------------------------------------------------------------- Mi presenta un SQLException: No suitable driver all'istruzione: conn = DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1:8888","sa",""); |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Scusa ma se i driver li devi lanciare al momento dell'apertura del pogramma puoi creare un semplice programmino che appunto apra il tuò programma con i parametri inseriti correttamente.
mi pare che per le dimenzioni di un oggetto si debba usare setbound |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
faccio una prova domattina, a quest'ora dubito di avere abbbastanza neuroni accesi per tentare solo di capire che succede |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
Quote:
|
|
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
Quote:
Quote:
|
||
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
ho provato, il problema è come supponevo che DriverManager non carica la classe come dovrebbe (probabilmente per il motivo che ho nominato prima). ho trovato un "accrocchio" ma è una mezza schifezza, creati una classe: Codice:
class FintoDriver implements Driver
{
private Driver driver;
FintoDriver (Driver driver)
{
this.driver = driver;
}
public boolean acceptsURL (String url) throws SQLException
{
return this.driver.acceptsURL (url);
}
public Connection connect (String url, Properties p) throws SQLException
{
return this.driver.connect (url, p);
}
public int getMajorVersion ()
{
return this.driver.getMajorVersion ();
}
public int getMinorVersion ()
{
return this.driver.getMinorVersion ();
}
public DriverPropertyInfo[] getPropertyInfo (String string,
Properties p) throws
SQLException
{
return this.driver.getPropertyInfo (string, p);
}
public boolean jdbcCompliant ()
{
return this.driver.jdbcCompliant ();
}
}
e modifica la chiamata nel tuo codice così: Codice:
Driver driver = (Driver) Class.forName (nomedriver, true, urlcl).newInstance (); DriverManager.registerDriver (new FintoDriver (driver)); |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
OK, funziona tutto a dovere. Thx mille dell'aiuto che mi hai dato
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jun 2004
Città: Brianza
Messaggi: 305
|
Qualcuno sa darmi una mano anche con questo:
2) ho la necessità di disegnare un immagine in un pannello JPanel, il problema consiste nel fato che tale pannello è di dimensioni troppo ridotte per contenere l'immagine e non posso ridimensionare quest'ultima (per motivi estetici). Esiste un modo per indicare arbitrariamente le dimensioni del pannello (ho provato con il metodo setSize() ma non ha dato alcun effetto)? Thx |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:01.



















