Java JDBC编程总结

转自:http://gongxue.cn/xuexishequ/ShowArticle.asp?ArticleID=86154
 
 

 

JDBC JAVA 操作数据库的基本技术,并不是唯一技术。本文将对 Java JDBC 编程进行总结,希望能对大家有所帮助。

Hibernate TopLink OR Mapping 操作数据库的技术都是建立 JDBC 技术之上的,实际来说,他们的性能和 JDBC 是有很大差距的,但反过来说,如果 JDBC 用不好,还不如 hibernate 呢。暂且不说这些孰优孰劣的话了,再次主要是对 Java 的基础技术做个总结,以加深认识。

一、 JDBC 的基本原理

JDBC Java 操作数据库的技术规范。他实际上定义了一组标准的操作数据库的接口。为了能让 Java 操作数据库,必须要有实现了 JDBC 这些接口的类,不同的数据库厂商为了让 Java 语言能操作自己的数据库,都提供了对 JDBC 接口的实现 -- 这些实现了 JDBC 接口的类打成一个 jar 包,就是我们平时看到的数据库驱动。由于不同的数据库操作数据的机制不一样,因此 JDBC 的具体实现也就千差万别,但是你作为 java 程序员,你只和 Java JDBC 的接口打交到,才不用理会他们怎么实现的!呵呵,现在知道 JDBC 驱动是怎么回事了。当然,这些类可以自己去写 -- 如果你很牛!

二、 JDBC 编程的步骤

为了说明这个步骤,假设你要通过 java 程序执行一个 sql 查询,你需要按照如下的步骤去走:

1 、创建指定数据库的 URL

这个 URL 实际上还是统一资源定位器,里面包含了一些连接数据库的信息:数据库类型、端口、驱动类型、连接方式、数据库服务器的 ip( 或名字 ) 、数据库名(有的是别名)等。其格式如下:

jdbc:subProtocol:subName://DBserverIP:port/DatabaseName
例如 mysql 的一个 url jdbc:mysql://192.168.3.143:3306/zfvims

2 、加载驱动类到 JVM 内存区域中

有两种方法:

一种是用 Class.forName() 方法加载指定的驱动程序。

一种是将驱动程序添加到 java.lang.System 的属性 jdbc.drivers 中。
最后说明一点,有时候添加到系统的 CLASSPATH 环境变量是不行的,原因是在使用 JDBC 接口操作数据库前, JVM 还没有加载上驱动。

Class.forName("com.mysql.jdbc.Driver")

3 、、通过 DriverManager 类管理驱动、创建数据库连接。

DriverManager 类作用于程序员和 JDBC 驱动程序之间,提供注册管理驱动建立连接细节等方法,它所有成员均为静态的。通过其 getConnection 方法会创建一个 JDBC Connection 对象。

Connection conn=DriverManager.registerDriver("jdbc:mysql://192.168.3.143:3306/zfvims","lavasoft","password");

4 Connection -- 数据库连接

这里所说的 Connection 类实际上是实现了 JDBC Connection 接口的类,这个类一般都是 jdbc 驱动程序实现了。 Connection 类表示了数据库连接,通过其对象可以获取一个获取数据库和表等数据库对象的详细信息。但更多的是通过这个连接更进一步去向数据库发送 SQL 语句去执行,下面会讲到。
数据库的连接的建立是很耗费资源和时间的,因此在不用连接的情况下要通过其 close() 方法将连接关闭,以释放系统资源。

5 Statement -- 发送并执行(静态) SQL 语句

通过 Connection 对象的 createStatement() 方法可以创建一个 Statement 对象,通过该对象的方法可以(发送)并执行一个静态 sql 语句。如果要执行动态的 sql sql 串中有参数),那么就用 PreparedStatement 类,用法和 Statement 类似。

Statement stmt=con.createStatement()

6 ResultSet -- 结果集

当你执行一条 sql 查询后,就会产生一个查询结果。 ResultSet 就表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet 对象具有指向其当前数据行的指针。通过 ResultSet 对象不但可以结果集数据,还可以获取结果集表的列名、数据类型等信息。

ResultSet rs=stmt.executeQuery(sql)

7 、关闭数据库连接

当对 sql 操作完成后,应该关闭数据库连接,这样避免因为连接未关闭而耗费系统资源,如果每次都不关闭,多次操作将建立多个连接,最终数据库连接会达到最大限度,或者耗尽系统的资源,从而导致应用崩溃。因此要注意关闭资源,尤其是数据库连接。

三、 JDBC 编程最基本的实例

下面通过一个执行一条简单的 MySQL 查询来说名上面的 JDBC 编程的一般方法和步骤。

 

public class TestJDBC(){

    public static Connection getConnectionByJDBC() {

        Connection conn = null;

        try {

            //装载驱动类

            Class.forName("com.mysql.jdbc.Driver");

        } catch (ClassNotFoundException e) {

            System.out.println("装载驱动异常!");

            e.printStackTrace();

        }

        try {

            //建立JDBC连接

            conn = DriverManager.getConnection(""jdbc:mysql://192.168.3.143:3306/zfvims","lavasoft","password");

        } catch (SQLException e) {

            System.out.println("链接数据库异常!");

            e.printStackTrace();

        }

        return conn;

    }

 

    public static String test() {

        String sqlx = "select t.code,t.name from province t order by t.code asc";

        try {

            //创建一个JDBC声明

            Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

            //执行查询

            ResultSet = stmt.executeQuery(sqlx);

            while (rs.next()) {

                String code = rs.getString("code");

                String name = rs.getString("name");

                System.out.println(code+name);

            }

        } catch (SQLException e) {

            System.out.println(e.getMessage());

            e.printStackTrace();

        } finally {

            //预防性关闭连接(避免异常发生时在try语句块关闭连接没有执行)

            try {

                if (conn != null) conn.close();

            } catch (SQLException e) {

                System.out.println(e.getMessage());

                e.printStackTrace();

            }

        }

    }  

    public static void main(String args[]) {

        new TestJDBC().test();

    }  

}

四、 JDBC 编程的陷阱

1 conn 一定要在 finally 语句块进行关闭。

2 Statement ResultSet 尽可能缩小其变量作用域。

3 Statement 可以使用多次,定义多个。一个 Statement 对象只和一个 ResultSet 对象关联,并且是最后一次查询。

4 ResultSet Connection ResultSet 关闭后自动关闭。

你可能感兴趣的:(Java JDBC编程总结)