Java - 数据库已锁定

时间:2014-03-12 00:27:17

标签: java sql database sqlite csv

我希望用csv文件中的值填充我的数据库。但它返回SQLITE_BUSY:数据库文件被锁定。

这是我的代码

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]+"')";

        System.out.println("test");

        PreparedStatement pst = null;
        try {
            pst = DatabaseConnection.ConnectDB().prepareStatement(sql);
            pst.executeUpdate();
        } finally {
            if(pst != null) {
                pst.close();
            }
        }

    }
    br.close();

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

我使用不同的打印语句来检查错误的位置,似乎它不能执行更新();当循环执行第二次时。这是我在控制台中获得的内容

Ticket,Status,Priority,Department,Account Name
5
test

这是我的DatabaseConnection仅供参考

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

    }
}

2 个答案:

答案 0 :(得分:2)

每次循环都会连接到数据库。

在循环外部创建数据库连接并使用in,因此在每次迭代时都不会getConnection

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

    db = DatabaseConnection.ConnectDB();
    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]+"')";

        System.out.println("test");

        PreparedStatement pst = null;
        try{   
          pst = db.prepareStatement(sql);
          pst.executeUpdate();
        }finally{
          if(pst != null) {
            pst.close();
          }
        }
    }
    br.close();
}
catch(Exception e)
{
    JOptionPane.showMessageDialog(null, e);
}

答案 1 :(得分:1)

检查以确保您的数据库不是只读的或类似的东西。如果将db项目移动到linux,请不要忘记文件权限。