Java SQLite数据库文件已锁定(数据库已锁定)
我们已经用java创建了一个与sqlite数据库连接的软件,一切都很好。但当我们按下按钮打开数据库时,我们得到一条消息,数据库被锁定。Java SQLite数据库文件已锁定(数据库已锁定),java,sqlite,Java,Sqlite,我们已经用java创建了一个与sqlite数据库连接的软件,一切都很好。但当我们按下按钮打开数据库时,我们得到一条消息,数据库被锁定。 [SQLITE\u BUSY]数据库文件已锁定(数据库已锁定) 所以我们根本无法使用它。。这个错误的原因是什么?我们怎样才能解决它呢 此代码用于我们遇到问题的按钮: String id_patient = id.getText(); int idd, idd1 = 0; idd = Integer.valueOf(first011.a55); //first0
[SQLITE\u BUSY]数据库文件已锁定(数据库已锁定)
所以我们根本无法使用它。。这个错误的原因是什么?我们怎样才能解决它呢
此代码用于我们遇到问题的按钮:
String id_patient = id.getText();
int idd, idd1 = 0;
idd = Integer.valueOf(first011.a55); //first011.a55 = id_patient
Connection connection22;
Statement statement22, stat, statement44, statement2;
connection22 = null;
try {
connection22 = DriverManager.getConnection("jdbc:sqlite:D:\\workspace\\FAMRSOFTWARE\\dataessai.sqlite");
statement2 = connection22.createStatement();
statement2.setQueryTimeout(30);
statement22 = connection22.createStatement();
statement22.setQueryTimeout(30);
stat = connection22.createStatement();
stat.setQueryTimeout(30);
statement44 = connection22.createStatement();
statement44.setQueryTimeout(30);
//This is to take and use id_demand from an other table in database
ResultSet Resultat = statement22.executeQuery("SELECT * FROM demandes WHERE ID_patient =" + first011.a55);
while (Resultat.next()) {
String iddemande = Resultat.getString("ID_demande");
idd1 = Integer.valueOf(iddemande);
}
int i = 0;
int string;
String idanalyse;
while (i < tablee.getRowCount()) {
if (!(tablee.getValueAt(i, 0) == null)) {
statement22.executeUpdate("INSERT INTO datails (ID_demande, ID_analyse ) VALUES ('" + idd1 + "', '" + Integer.valueOf((String) tablee.getValueAt(i, 0)) + "')");
i++;
} else {
break;
}
}
i = 0;
while (i < tablee.getRowCount()) {
if (!(tablee.getValueAt(i, 0) == null)) {
ResultSet Resultat2 = statement44.executeQuery("SELECT * FROM parametres WHERE ID_analyse =" + tablee.getValueAt(i, 0));
while (Resultat2.next()) {
stat.executeUpdate("INSERT INTO fichetechnique (ID_patient, ID_parametre, ID_analyse ) VALUES ('" + id.getText() + "', '" + Resultat2.getString("ID_parametre") + "', '" + tablee.getValueAt(i, 0) + "')");
}
i++;
} else break;
}
statement2.executeUpdate("UPDATE demandes SET total = '" + apayer.getText() + "',versement = '" + v.getText() + "' WHERE ID_patient = " + first011.a55);
//statement2.executeUpdate("UPDATE demandes SET versement = '"+v.getText()+"' WHERE ID_patient = "+first011.a55);
JOptionPane.showMessageDialog(null, "Les Analyses de ce patient est enregistrer avec succès !! ");
} catch (SQLException e1) {
System.err.println(e1.getMessage());
}
setVisible(false);
String id_patient=id.getText();
int idd,idd1=0;
idd=整数.valueOf(first011.a55)//first011.a55=身份证患者
连接22;
声明22,stat,声明44,声明2;
connection22=null;
试一试{
connection22=DriverManager.getConnection(“jdbc:sqlite:D:\\workspace\\FAMRSOFTWARE\\dataessai.sqlite”);
statement2=connection22.createStatement();
声明2.setQueryTimeout(30);
statement22=connection22.createStatement();
声明22.setQueryTimeout(30);
stat=connection22.createStatement();
stat.setQueryTimeout(30);
statement44=connection22.createStatement();
声明44.setQueryTimeout(30);
//这是从数据库中的另一个表获取并使用id_需求
结果集ResultSet=statement22.executeQuery(“从需求中选择*,其中ID_patient=“+first011.a55”);
while(Resultat.next()){
String iddemande=Resultat.getString(“ID_demande”);
idd1=整数.valueOf(iddemande);
}
int i=0;
int字符串;
字符串分析;
而(i
如果您不打算使用try…with…resources
语句来关闭连接
,那么数据库会被锁定也就不足为奇了该错误的原因是什么?
有一个文件指针,操作系统使用信号量或互斥锁专门锁定该资源(DB文件),显然是在阻止读访问。有不同的锁定状态,一个常见的是允许读取,而DB被锁定以进行写入,例如,当我们按下按钮打开数据库时,我们收到一条消息,说数据库已锁定,请您澄清一下您所说的是什么意思?我假设您在运行另一个应用程序时运行DB管理工具/编辑器时,会出现锁定异常?或者你的应用程序中有一个加载数据库的按钮?