从MySQL转换为SQLite时出错

时间:2011-10-03 09:42:24

标签: java mysql sqlite

这并没有太大的麻烦但是我从用户点击按钮的更新中得到的错误。

最初在MySQL中这是一个枚举('Y','N')值,但由于SQLite不使用枚举或布尔值,我决定分别使用1和0的int。

如何解决这个问题?

if(e.getSource()==boughtB){
    String cigName;
    cigName = Habanos2.selection;
    String humiString;
    int humino;

    Connection con = null;
    System.out.println(cigName);

    try{
        ResultSet humiRS1 = HabMenu.getGenericRS("select * from cigar where name = '"+cigName+"'"); 
        if(humiRS1.next()){
            humiString = humiRS1.getString("humi_no");

            humino = Integer.parseInt(humiString);
            System.out.println("humino"+humino);

            Class.forName("org.sqlite.JDBC").newInstance();

            con = DriverManager.getConnection("jdbc:sqlite:cigardb.db");
            Statement s = con.createStatement();
            humino++;
            String humiNoS = Integer.toString(humino);
            s.executeUpdate("update cigar set humi = 1 where name ='"+cigName+"'" );
            s.executeUpdate("update cigar set humi_no = "+humiNoS+"where name ='"+cigName+"'");

            Habanos2Frame.myHumi.setText("");
            ResultSet humiii = HabMenu.getGenericRS("select * from cigar where humi = 1");

它产生了这个错误:

  

java.sql.SQLException:数据库已锁定           在org.sqlite.DB.execute(DB.java:270)           at org.sqlite.DB.executeUpdate(DB.java:281)       mysql humi error humiNoS =           at org.sqlite.Stmt.executeUpdate(Stmt.java:103)           at cigarDiary.buttonBar $ ButtonHandler.actionPerformed(buttonBar.java:207)           在javax.swing.AbstractButton.fireActionPerformed(未知来源)           at javax.swing.AbstractButton $ Handler.actionPerformed(Unknown Source)           在javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)

1 个答案:

答案 0 :(得分:1)

好的,我解决这个问题的方法是在完成使用后关闭每个ResultSet(rs.close)和Connection(con.close)。这是MySql似乎不介意的事情,但SQLite确实如此。当结果集及其连接仍然打开时,它不允许您执行更新。