Tem varias maneiras de se fazer isso…Vou colocar 2 aqui para vc sacar a ideia.
Imagino que vc tenha uma tabela onde guarda os clicks do mouse, se naum tem a crie.
vou colocar o nome dela aqui pra ilustrar de tabelaContador que possui 2 campos: codigo e data, usando o MySQL coloco isso com o tipo BIGINT para o codigo e autoincremento. Data pode ser tanto date, datetime, varchar, char vc quem sabe, pois ele vai servir apenas para inserir algo no banco e assim criar um novo registro.
Primeiro a classe de conexao
//classe de conexao com MySQL
public class Conexao{
public static Connection getConnection() throws SQLException{
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("jdbc:mysql://xxx.xxx.xxx.xxx/bancodedados?user=root&password=root");
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
throw new SQLException();
}
}
}
Aqui como seria com autoincremento, maneira mais facil de se fazer pois o proprio banco quem se encarrega de somar.
public class Contador{
private Connection con;
Contador() throws SQLException{
this.con = Conexao.getConnection();
}
public Integer retornaQuantidadeAcesso() throws SQLException{
//este metodo retorna a quantidade de acesso que seria o codigo de autoincremento no banco
int contador = 0;
PreparedStatement stm = this.con.prepareStatement("SELECT MAX(codigo) AS qtdAcesso FROM tabelaContador"); //aqui vai sempre trazer o ultimo codigo
ResultSet rs = stm.executeQuery();
rs.next();
contador = rs.getInt("qtdAcesso"); //aqui se estiver como autoincremento vc ja vai ter o codigo do ultimo acesso, sendo assim q qtde de acesso
return contador;
rs.close();
stm.close();
}
public void insereDataContador() throws SQLException{
//este metodo insere um novo registro
PreparedStatement stm = this.con.prepareStatement("INSERT INTO tabelaContador (data) VALUES (?)");
stm.setString(1, Calendar.getInstance().getTimeInMillis());
stm.executeUpdate();
stm.close();
}
}
Para autoincremento seria isso…Agora vou fazer fazer o exemplo sem autoincremento. Lembrando q a maneira mais correta seria usando autoincremento.
public Integer retornaQuantidadeAcesso() throws SQLException{
//este metodo retorna a quantidade de acesso que seria o codigo de autoincremento no banco
int contador = 0;
PreparedStatement stm = this.con.prepareStatement("SELECT MAX(codigo) AS qtdAcesso FROM tabelaContador"); //aqui vai sempre trazer o ultimo codigo
ResultSet rs = stm.executeQuery();
rs.next();
contador = rs.getInt("qtdAcesso") + 1; //aqui vc ja faz a soma e referencia a variavel primitiva contador.
return contador;
rs.close();
stm.close();
}
Agora basta colocar nos eventos corretos, que ja eh 100% funcional. Para autoincremento vc pode mandar Inserir e depois retornar o ultimo codigo. Sem autoincremento vc pode Consultar e depois inserir …ai vai da maneira como vc preferir.
Novamente eu digo, náo concatene Strings SQL…Use PreparedStatement.
t+ e boa sorte.