首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - SQLITE_BUSY;数据库文件已锁定

Java - SQLITE_BUSY;数据库文件已锁定
EN

Stack Overflow用户
提问于 2014-03-12 03:51:12
回答 1查看 13.8K关注 0票数 0

我的应用程序读取一个html表,然后脚本(TableToCSV)将其转换为.csv格式。之后,我将该.csv转换为sqlite数据库。在那之后,我在数据库上运行查询。问题是,在执行时,它会显示% SQLITE_BUSY;数据库文件已锁定。

出现这种情况的原因是什么?我如何解决这个问题?

这是我的代码-

代码语言:javascript
复制
        final JFileChooser  fileDialog = new JFileChooser();
    JButton btnInputFile = new JButton("Input File");
    btnInputFile.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            int returnVal = fileDialog.showOpenDialog(rootPane);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
               java.io.File file = fileDialog.getSelectedFile();

               String name = file.getName();
               name = name.substring(0, name.lastIndexOf("."));
               name += ".html";
               File newFile = new File(file.getParentFile(), name);
               if (file.renameTo(newFile)) {
                   try {
                    TableToCSV tableToCSV = new TableToCSV(newFile, ',', '\"', '#', CSV.UTF8Charset );
                    System.out.println("action");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
               }

               try
               {
                BufferedReader br=new BufferedReader(new FileReader("v.csv"));
                String line;

                while((line=br.readLine())!=null)
                {
                    System.out.println(line);
                    String[]value = line.split(",");
                    System.out.println(value.length);

                    String sql = "INSERT into main ([Ticket #], Status, Priority, Department, [Account Name]) "
                     + "values ('"+value[0]+"','"+value[1]+"','"+value[2]+"','"+value[3]+"','"+value[4]+"')";

                     PreparedStatement pst = DatabaseConnection.ConnectDB().prepareStatement(sql);
                     pst.executeUpdate();

                }
                br.close();

               }

               catch(Exception e)
               {
                JOptionPane.showMessageDialog(null, e);
               }

            }

        }
    });

更新- DatabaseConnection.java

代码语言:javascript
复制
public class DatabaseConnection {
Connection conn = null;
Statement stmt = null;

public static Connection ConnectDB() {

    try {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:database.db");
        conn.setAutoCommit(true);
        return conn;
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
        return null;
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-12 03:58:21

这可能是因为您对sqlite数据库有多个打开的引用。首先,我会在while循环中的finally块中关闭PreparedStatement。

代码语言:javascript
复制
PreparedStatement pst = null;
try{   
  pst = DatabaseConnection.ConnectDB().prepareStatement(sql);
  pst.executeUpdate();
}finally{
  if(pst != null) {
    pst.close();
  }
}

您还应该在一切结束时关闭数据库连接。如果这样还不能解决问题,那么请更多地解释一下如何将.csv转换为sqlite数据库

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22335196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档