数据库锁定SQLite Java
我正在制作一些程序来检查不同用户名的大小。当我调用函数dodajobrisipristup(表,组合框)时,它表示数据库已锁定。我寻找解决方案,所有人都说,这可能是因为我没有在某个地方关闭连接,但我找不到在哪里。有人能帮我吗数据库锁定SQLite Java,java,Java,我正在制作一些程序来检查不同用户名的大小。当我调用函数dodajobrisipristup(表,组合框)时,它表示数据库已锁定。我寻找解决方案,所有人都说,这可能是因为我没有在某个地方关闭连接,但我找不到在哪里。有人能帮我吗 public void DodajObrisiPristupe(JTable tabela, JComboBox<String> korisnickoime) { DefaultTableModel model = (DefaultTableModel)
public void DodajObrisiPristupe(JTable tabela, JComboBox<String> korisnickoime)
{
DefaultTableModel model = (DefaultTableModel)tabela.getModel();
for (int i = 0; i < model.getRowCount(); i++)
{
String serijskibroj = model.getValueAt(i, 2).toString();
boolean pristup = (Boolean)model.getValueAt(i, 4);
if(ProveriDaLiPostojiPristup(serijskibroj, korisnickoime.getSelectedItem().toString()) == true)
{
if(pristup == false)
ObrisiPristup(serijskibroj, korisnickoime.getSelectedItem().toString());
}
else
{
if(pristup == true)
DodajPristup(serijskibroj, korisnickoime.getSelectedItem().toString());
}
}
}
您没有在
ProveriDaLiPostojiPristup(字符串,字符串)
中关闭连接
您应该始终将连接包装在try with resources或try finally中,以便它们始终处于关闭状态
发生的情况是,您的方法返回true,但是因为执行在那里停止,所以它不会执行它下面的行。如果将语句包装在一个块中,则会出现这种情况:
如果你的方法名是英文的,我们就更容易调试了。下次我会解决的,谢谢你的评论。
public boolean ProveriDaLiPostojiPristup(String serijskibroj, String korisnickoime)
{
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:" + naziv + ".db");
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM PRISTUPI;");
while(rs.next())
{
if(Decrypt(rs.getString("korisnickoime")).equals(korisnickoime) && Decrypt(rs.getString("vage")).equals(serijskibroj))
return true;
}
rs.close();
stmt.close();
c.close();
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
return false;
}
public void DodajPristup(String serijskibroj, String korisnickoime)
{
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:" + naziv + ".db");
stmt = c.createStatement();
String sql = "INSERT INTO PRISTUPI (KORISNICKOIME,VAGE) " +
"VALUES ('" + Encrypt(korisnickoime) + "', '" + Encrypt(serijskibroj) + "');";
stmt.executeUpdate(sql);
stmt.close();
c.close();
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
}
public void ObrisiPristup(String serijskibroj, String korisnickoime)
{
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:" + naziv + ".db");
stmt = c.createStatement();
String sql = "DELETE from PRISTUPI where KORISNICKOIME = '" + Encrypt(korisnickoime) + "' AND VAGE = '" + Encrypt(serijskibroj) + "';";
stmt.executeUpdate(sql);
stmt.close();
c.close();
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
}
c = DriverManager.getConnection("jdbc:sqlite:" + naziv + ".db");
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM PRISTUPI;");
while(rs.next())
{
if(Decrypt(rs.getString("korisnickoime")).equals(korisnickoime) &&
Decrypt(rs.getString("vage")).equals(serijskibroj))
return true;
}
rs.close();
stmt.close();
c.close();
try(c = DriverManager.getConnection("jdbc:sqlite:" + naziv + ".db")){
try(stmt = c.createStatement()){
try(ResultSet rs = stmt.executeQuery("SELECT * FROM PRISTUPI;")){
while(rs.next())
{
if(Decrypt(rs.getString("korisnickoime")).equals(korisnickoime) && Decrypt(rs.getString("vage")).equals(serijskibroj))
return true;
}
}
}
}