Det smarteste er nok at tæller antal rækker i en tabel, og sammenligne det med en værdi som du har gemt i databasen.
Hvis de ikke er ens, så har databasen ændret sig. Herefter skal du lige huske at sætter "tælleren" i databasen til den nye værdi.
Dette virker hos mig, med en mySQL db.
import java.util.Vector;
/*
* Date: 21-08-2002
*/
public class dbChange {
private String msg = "";
public String change() {
int count = 0;
DbHandler db = new DbHandler();
db.open("org.gjt.mm.mysql.Driver", "jdbc:
mysql://localhost/test", "", "");
//tæller antal rækker i den tabel som du vil se om er ændret
String sql = "select COUNT(*) from navn";
Vector v = db.doQuery(sql);
int temp = Integer.parseInt((String)v.elementAt(0));
System.out.println("temp " + temp);
//henter vores "tæller" værdi fra databasen. Den skal vi bruge til sammenligningen
String taeller = "select * from taeller";
Vector b = db.doQuery(taeller);
int t = Integer.parseInt((String)b.elementAt(0));
System.out.println("tæller: " + t);
//hvis der ikke er nogle rækker er vi ligeglade
if (v == null && v.size() == 0) {
msg = "ingen rækker fundet!!";
}
//hvis antal rækker er forskellig fra vores "tæller" værdi, så sætter vi værdien til antal rækker
if (t != temp) {
msg = "databasen har ændret sig!!";
db.doUpdate("delete from taeller");
db.doUpdate("insert into taeller (taeller) values (" + temp +")");
count = temp;
}
else {
msg = "Databasen har ikke ændret sig";
}
return msg;
}
public static void main(String[] args) {
dbChange db = new dbChange();
System.out.println(db.change());
}
}
Her er databasen klassen:
import java.sql.*;
import java.util.Vector;
public class DbHandler extends Object
{
private Connection con=null;
public DbHandler()
{
}
public boolean open(String dbDriverName, String dbClassName, String user, String pass)
{
try
{
if(con==null)
{
Class.forName(dbDriverName).newInstance();
con = DriverManager.getConnection(dbClassName, user, pass);
}
}
catch (SQLException e)
{
e.printStackTrace(System.out);
return false;
}
catch (ClassNotFoundException e)
{
e.printStackTrace(System.out);
return false;
}
catch (InstantiationException e)
{
e.printStackTrace(System.out);
return false;
}
catch (IllegalAccessException e)
{
e.printStackTrace(System.out);
return false;
}
return true;
}
public void close()
{
if(con!=null)
{
try
{
con.close();
con=null;
}
catch (SQLException e)
{
e.printStackTrace(System.out);
}
}
}
public int doUpdate(String sql)
{
if(con!=null)
{
try
{
long time=System.currentTimeMillis();
Statement stat=con.createStatement();
System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms "+sql);
return stat.executeUpdate(sql);
}
catch (SQLException e)
{
e.printStackTrace(System.out);
}
}
return 0;
}
public Vector doQuery(String sqlUdtryk) {
ResultSet rs = null;
Vector data = new Vector();
try {
Statement stmt = con.createStatement();
rs = stmt.executeQuery(sqlUdtryk);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while(rs.next()) {
if(numberOfColumns > 1) {
for(int i = 1; i <= numberOfColumns; i++) {
data.add(rs.getString(i));
}
}
else {
data.add(rs.getString(1));
}
}
} catch(SQLException e) {
}
return data;
}
}
Og et database dump:
# MySQL-Front Dump 2.2
#
# Host: localhost Database: test
#--------------------------------------------------------
# Server version 3.23.49-nt
#
# Table structure for table 'navn'
#
CREATE TABLE `navn` (
`fornavn` varchar(24) default NULL,
`efternavn` varchar(24) default NULL,
`adresse` varchar(24) default NULL
) TYPE=MyISAM;
#
# Dumping data for table 'navn'
#
INSERT INTO navn VALUES("per","hansen","vej 3");
INSERT INTO navn VALUES("sdf","sdf","sdf");
INSERT INTO navn VALUES("dfg","dfg","dfg");
INSERT INTO navn VALUES("sdf","sdfg","sef");
#
# Table structure for table 'taeller'
#
CREATE TABLE `taeller` (
`taeller` int(24) unsigned default '0'
) TYPE=MyISAM;
#
# Dumping data for table 'taeller'
#
INSERT INTO taeller VALUES("4");