`
kiikgu
  • 浏览: 4529 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

jdbc连接,Statement.isClosed()方法调用问题

    博客分类:
  • java
阅读更多
用JDBC连接数据库,关闭资源时,调用statement.isclosed()会出现AbstractMethod错误,上网搜了一下,一种说法是Statement的具体实现类没有实现isClosed()方法,但是接口的方法在实现类中不是必须得全部实现吗?迷惑。。。
顺便搜了一下Abstract类和Interface的区别与联系,如下:
抽象类是对某一类型的事物,在编程时,为了描述这类事物,而高度抽象、总结出来的一种基础类型。这么说还是很晦涩,打个比方好了,就好比说动物,动物就是一种抽象类,当我们说动物的时候,我们可以想象出很多种具体的动物类别,比如,猪、狗、老虎、狮子,这些都是继承了“动物”这个抽象类而实现了各自特有属性特征的具体子类。

抽象类有几个必要因素:

1、抽象类不能实例化。

2、抽象类可以含有抽象方法和其他带有抽象标志的访问器。(什么是抽象方法,我们接着说。)

3、抽象类是用来给其他类继承的,所以,我们不能用sealed来修饰抽象类,不然就矛盾了。

4、如果抽象类中含有抽象方法或其他带有抽象标志的访问器,在派生自这个抽象类的子类中,必须明确实现这些抽象方法和访问器。

    二、接口interface的理解。

关于接口的概念,很好说,我也不在这里赘述。关键是如何理解接口。我们可以把接口看作是一种“can do something”的抽象。也打个比方,是个经典的比方,鸟和飞机是两种不同的类别,但是鸟会飞,飞机也会飞,它们都会飞“can fly”,但是他们飞的原理是不同的,但实际他们达到的目的是相同的。所以我们可以写一个飞的接口,让这两个类都实现飞的目的。

为什么要这么做呢?这就是面向对象的编程技巧,我们需要考虑到代码的可读性,扩展性。我们定义了接口,就好比我们订立了一种契约,合同或者说标准。我们必须严格按照这种契约去做事情,正所谓有规矩才成方圆,这样才能更有条理,更有效率地编写代码。

    三、抽象类和接口取舍建议。

其实,说道这里,都会发现,抽象类和接口在实现某一种方法的机制上面其实是很相似的,都先定立一种条约,然后子类必须实现他们。我们究竟如何使用他们呢,首先看看他们的区别:

    当我们需要订立的约定内容需要作为参数传递的话,我们就要用接口,抽象类中的抽象方法就不那么方便了。
    子类只能继承一个抽象类,但是可以继承多个接口。如果我们有一组类需要实现同样的方法,如果用抽象类,那么所有的这些子类的基类都必须是这些抽象类。
    抽象类可以有具体实现过的方法或者其他成员,但是接口不行,接口中的成员都不可以有具体的实现。

而后这里有几点官方的建议:

    如果我们希望所写的组件有多个版本,或者说所写的组件需要经常更新,那么建议用抽象类。因为我们可以通过简单的方法来更新基类从而更新我们的组件。但是接口不一样,接口就好比合同,一但订立,就很难去更改。如果我们需要有一个新版本的接口,那么我们需要重新写这个接口。因为我们无法通过更改接口来更新实现这些接口的子类。
    如果我们所设计的功能可适用于具有相当大差异性的对象们,那么我们建议采用接口。抽象类适用于差异性较小的对象之间所要实现的功能。
    如果我们需要设计简单的,小型的功能,我们使用接口。如果我们需要设计大型的功能性单元,使用抽象类。
    如果我们需要提供一种在所有组件中用到的公共的,实现好的功能模块,我们使用抽象类,抽象类可以部分实现成员,但是接口不可以实现任何成员。
分享到:
评论

相关推荐

    使用jdbc动态连接数据库

    - `isClosed()`:判断连接是否已关闭。 - `isReadOnly()`:判断连接是否为只读模式。 - `setReadOnly(boolean readOnly)`:设置连接的只读模式。 - `close()`:立即释放连接对象的数据库和JDBC资源。 ##### 3. ...

    对JSP数据库连接类使用方法的详细讲解

    `isClosed()`方法用于检查连接是否还有效。 Statement类是执行SQL语句的主要接口。我们可以通过Connection创建Statement对象,然后使用它来执行SQL。例如,`stmt=cn.createStatement();`创建Statement对象后,我们...

    java jdbc 分页

    记住在每次迭代后检查`ResultSet.isClosed()`,确保没有越界。 6. **关闭资源**:在完成数据处理后,务必关闭ResultSet、Statement和Connection,以释放数据库资源,防止内存泄漏。 在实际项目中,为了代码的可...

    连接access数据库

    con.isClosed()) { con.close(); } ``` 在实际应用中,我们通常会使用try-catch块来捕获可能发生的`SQLException`异常,并在catch块中打印异常信息或执行错误处理逻辑。 ### 三、执行SQL语句 连接数据库后,我们...

    Jsp中调用Oracle存储过程的小例子

    <p><%out.print(conn.isClosed());%> ``` 这段JSP代码做了以下几件事: 1. 导入了所需的Java SQL库。 2. 声明并初始化了数据库连接的必要属性,包括驱动类名、URL、用户名和密码。 3. 使用`Class.forName()`加载...

    连接postsql数据库的java代码

    conn.isClosed()) { conn.close(); } } catch (SQLException e) { System.out.println("Error closing the connection."); e.printStackTrace(); } } ``` 此外,你还可以使用PreparedStatement或...

    java连接oracle数据库———sqlHelper类

    conn.isClosed()) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 使用这个`sqlHelper`类,你可以编写如下的代码来执行一个查询: ```java SqlHelper helper = new ...

    MySQL工具类

    conn.isClosed()) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } ``` 通过这样的工具类,开发者可以在自己的业务代码中避免重复的数据库操作,提高代码可读性和可维护性。例如,要...

    sql常见操作 数据库的链接 增加 删除 更新 查询

    这些操作最终都需要调用 `executeUpdate()` 方法来执行。 - **代码示例**: ```java public static void addStudent(Student s) { String sql = "INSERT INTO students (sname, age, sex, cid) VALUES (?, ?, ?,...

    Java中使用JDBC操作数据库简单实例

    con.isClosed()) { System.out.println("Successfully connected"); } else { System.out.println("Failed to connect"); } while (rs.next()) { System.out.println("Column1: " + rs.getInt(1)); System....

    java.sql.connection.pdf

    - `isClosed()` 和 `isReadOnly()`:检查连接是否已关闭或是否为只读模式。 - `clearWarnings()` 和 `getWarnings()`:处理和获取数据库操作产生的警告。 4. **其他功能**: - `nativeSQL(String)`:允许驱动...

    Jsp中利用JavaBean技术实现分页功能

    conn.isClosed()) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` ##### 2. 分页逻辑实现 接下来创建一个名为`SplitPage`的类来处理分页逻辑。该类包含多个属性和方法,用于...

    深入解析Java中的JDBC事务

    conn.isClosed()) { conn.rollback(); // 系统错误,回滚事务 } } finally { if (pstmtUpdate != null) { try { pstmtUpdate.close(); } catch (SQLException ex) { ex.printStackTrace(); } } if ...

    自定义JSP分页标签

    conn.isClosed()) { conn.close(); } } } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return N; } // 生成分页链接列表 private String pageList(int num) { if ...

Global site tag (gtag.js) - Google Analytics