Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite数据库文件已锁定(数据库已锁定)_Java_Sqlite - Fatal编程技术网

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

我们已经用java创建了一个与sqlite数据库连接的软件,一切都很好。但当我们按下按钮打开数据库时,我们得到一条消息,数据库被锁定。
[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管理工具/编辑器时,会出现锁定异常?或者你的应用程序中有一个加载数据库的按钮?