数据库锁定SQLite Java

数据库锁定SQLite Java,java,Java,我正在制作一些程序来检查不同用户名的大小。当我调用函数dodajobrisipristup(表,组合框)时,它表示数据库已锁定。我寻找解决方案,所有人都说,这可能是因为我没有在某个地方关闭连接,但我找不到在哪里。有人能帮我吗 public void DodajObrisiPristupe(JTable tabela, JComboBox<String> korisnickoime) { DefaultTableModel model = (DefaultTableModel)

我正在制作一些程序来检查不同用户名的大小。当我调用函数dodajobrisipristup(表,组合框)时,它表示数据库已锁定。我寻找解决方案,所有人都说,这可能是因为我没有在某个地方关闭连接,但我找不到在哪里。有人能帮我吗

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;
        }

     }
   }
}