Tips&Tricks | I trucchi del mestiere |
![]() |
Copiare i dati tra due database |
import java.sql.*; public class SQLServerToAccess { static final String FORNAME="sun.jdbc.odbc.JdbcOdbcDriver"; static String DriverInput; static String DriverOutput; public static void main(String[] args) throws ClassNotFoundException{ try{ Class.forName(FORNAME); DriverInput="jdbc:odbc:"+args[0]; //driver del database sql DriverOutput="jdbc:odbc:"+args[1]; //driver del database access Connection conIn=DriverManager.getConnection(DriverInput); Connection conOut=DriverManager.getConnection(DriverOutput); Statement stIn=conIn.createStatement(ResultSet.TYPE_SCROLL_INSE NSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs=stIn.executeQuery("select * from Utenti");//il resultset dev'essere scrollabile a causa di un problema rs.first(); do{ String nomeUtente=rs.getString(1); String cognomeUtente=rs.getString(2); int codiceUtente=rs.getInt(3); Statement stOut=conOut.createStatement(); stOut.execute("INSERT INTO Utenti VALUES('"+nomeUtente+"','"+cognomeUtente+"',"+ codiceUtente+")"); } while(rs.next()); rs.last(); //questa e le righe a seguire servono ad ovviare ad un problema di inserimento dell'ultimo valore Statement first=conOut.createStatement(); //inserito nel DB di partenza first.execute("insert into Utenti values('"+rs.getString(1)+"','"+rs.getString(2)+"',"+rs.getI nt(3)+")"); System.out.println("Copia Terminata!"); System.exit(0); }catch(SQLException e){ System.out.println("SQL Exception!"); System.exit(1); } } } |
![]() |
Eseguire operazioni in background |
import java.util.*; public class BackgroundJobExecutor implements Runnable { private Queue queue; private boolean stopRequest = false; private boolean stopping = false; private Thread thread; private final AbstractJob nop = new AbstractJob() { public void execute() { dispose(); } }; public BackgroundJobExecutor() { queue = new Queue(); thread = new Thread(this); } /** * Inizia a processare i job */ public void start() { thread.start(); } /** * Aggiunge un job alla coda */ public boolean add(AbstractJob job) { if (job == null) { throw new NullPointerException("Job cannot be null"); } if (stopRequest || stopping) { throw new IllegalArgumentException("BackgroundJobExecutor has been stopped."); } return queue.put(job); } public void run() { while (!stopRequest) { AbstractJob l = (AbstractJob)queue.get(); if (l == null) { break; } l.execute(); } dispose(); } /** * Termina i job in coda e si ferma */ public void stop() { if (stopRequest) { throw new IllegalArgumentException("BackgroundJobExecutor has been stopped."); } if (!stopping) { stopping = true; queue.putLast(nop); } } /** * Ferma l'esecusione senza necessariamente aver terminati i job in coda */ public void dispose() { stopRequest = true; queue.clear(); if (thread != null) { thread.interrupt(); thread = null; } } private class Queue { private List list = new LinkedList(); public synchronized Object get() { while (list.size() == 0) { try { wait(); } catch (InterruptedException ex) { return null; } } Object o = list.iterator().next(); list.remove(o); return o; } public synchronized boolean put(Object obj) { boolean b = list.add(obj); notify(); return b; } public synchronized void clear() { list.clear(); } public synchronized void putLast(Object o) { list.add(list.size(), o); } } } |