Java jdbc无法插入数据库

时间:2013-10-01 07:42:11

标签: java sql-server resultset

我有2个类ConnectionUtil,DemoResultSet。问题是当我运行插入2次()时。然后只有1条记录被插入数据库。第二个插入创建错误:"Error:The connection is closed."。所以当我取消注释close() statement时。它运行得很好。我不知道有什么麻烦。任何人都给我一些想法

public class ConnectionUtil {

    private static String url = "jdbc:sqlserver://localhost:1433;databaseName=Northwind";
    private static String username = "user";
    private static String pw = "pass";
    private static Connection conn = null;

    static {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static Connection getConnection() {
        if (conn == null) {
            try {
                conn = DriverManager.getConnection(url, username, pw);
            } catch (SQLException ex) {
                Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return conn;
    }
}

public class DemoResultSet {

    private static ResultSet rs = null;
    private static Connection conn = null;

    public static void initialize() {
        try {
            conn = ConnectionUtil.getConnection();
            Statement statement = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE );
            String sql = "select CategoryID, CategoryName from Categories";
            rs = statement.executeQuery(sql);
        } catch (SQLException ex) {
            Logger.getLogger(DemoResultSet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        initialize();
        insert();
        insert();
    }

    public static void insert() {
        try {
            rs.moveToInsertRow();
            rs.updateString("CategoryName", "Test C1008G3");
            rs.insertRow();
            System.out.println("Inserted");
            conn.close(); //uncomment it's okay
        } catch (SQLException ex) {
            System.out.println("Error:" + ex.getMessage());
        }
    }
}

4 个答案:

答案 0 :(得分:2)

您正在关闭插入内部的连接,因此第二次插入发生在已关闭的连接上。

conn.close(),应该像这样放置:

public static void main(String[] args) throws Exception{
    try{
        initialize();
        insert();
        insert();
    }
    finally{
        conn.close();
    }
}

这样您就可以保证在出现任何问题时正确关闭连接。

答案 1 :(得分:0)

在您的插入方法中,您有conn.close(); //uncomment it's okay

但不是!

关闭此连接后,请勿再次打开它。

答案 2 :(得分:0)

jdbc连接是一个有点重的对象,它背后的想法并不是在每次操作后都不关闭它,而是重用多个任务的连接。应用程序完成后,您应该关闭连接。如果你坚持自己的连接,你必须在每次关闭后重新初始化。

答案 3 :(得分:0)

问题是你在关闭所述连接后试图写入连接。 你可以取消注释那条线,但这只是不好的做法。 我的建议:调用initialize();方法不是来自main方法,而是insert方法中的第一个语句。

这样,您确定每次需要时都有连接。