Aggiornando il server qualche query ha cominciato a dare errore; in particolare, se avete un campo di tipo datetime, e non volevate valorizzarlo potevate inserire nella insert la stringa ” (stringa vuota)
In mysql 4 si aveva:
” -> ’0000-00-00 00:00:00′
In mysql 5:
” -> Errore
Ho risolto mettendo come valore del campo: ’00000000000000′.
Tutto per la pigrizia di non specificare i campi nella insert.
Qui si trova la documentazione ufficiale:
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
Lo scenario è lo stesso descritto dalla pagina sopra: l’operazione da eseguire consiste nel leggere un campo da una tabella ed incrementarlo di una unità. Essendo due operazioni vanno eseguite premunendosi del fatto che nessun altro interroghi la tabella fino a quando non vengono terminate entrambe.
Per effettuare il lock è necessario essere sotto transazione, con autocommit disattivato. Qui trovate come effettuare transazioni in Java
http://java.sun.com/docs/books/tutorial/jdbc/basics/transactions.html
In sostanza si inizia una transazione impostando a false la proprietà autocommit e si termina con il commit o il rollback. E come ultima cosa si rimette l’autocommit a true:
import java.sql.*;
private Connection con;con.setAutoCommit(false);
con.commit(); / con.rollback();
con.setAutoCommit(true);
Ecco l’esempio del SELECT FOR UPDATE:
public static int getIDInvio(SMSConnect conMySql) {
String tmp;
ResultSet rs;
int ris = 0;
conMySql.beginTrans();
tmp = "SELECT MAX(ID) FROM TBINVII FOR UPDATE";
rs = conMySql.getResultset(tmp);
if (!(rs==null)) {
try {
rs.next();
ris = rs.getInt(1);
ris++;
}
catch (Exception e) {//Errore...}
}
else {//Errore...}
tmp = "UPDATE TBINVII SET ID = ID + 1";
if (!conMySql.executeQuery(tmp)) {//Errore...}
conMySql.commit();
return ris;
}
Pagina di riferimento: http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html
Per esportare un database esistente:
mysqldump -u<user> -p --opt <database> > <nomescript.sql>
Questa esportazione, con l’opzione “opt” comprende le drop/create delle tabelle e le insert di tutti i record presenti, non la creazione del database.
Per importare un database dal file creato precedentemente:
c:\mysql -uroot -p <database> < nomescript.sql