连接数据库

来源:互联网 发布:python 列表生成式 编辑:程序博客网 时间:2024/04/29 08:08

一.加载JDBC驱动程序
  在连接数据库之前,首先要加载欲连接数据库的驱动程序到JVM(Java虚拟机),加载方法为通过java.lang.Class类的静态方法forName(String className),例如加载SQL Server 2000数据库的驱动程序,具体代码如下:

static {

    try {

        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    } catch (ClassNotFoundException e) {

        System.out.println("------ 在加载数据库驱动时抛出异常,内容如下:");

        e.printStackTrace();

    }

}

成功加载后,会将加载的驱动类注册给DriverManager类,如果加载失败,将抛出ClassNotFoundException异常,即未找到指定的驱动类,所以需要在加载数据库驱动类时捕捉可能抛出的异常。

技巧:
通常将负责加载驱动的代码放在static块中,好处是只有static块所在的类第一次被加载时加载数据库驱动,即第一次访问数据库时,避免重复加载驱动程序,浪费计算机资源。

二.创建数据库连接
java.sql.DriverManager(驱动程序管理器)类是JDBC的管理层,负责建立和管理数据库连接。通过DriverManager类的静态方法getConnection(String url, String user, String password)可以建立数据库连接,3个入口参数依次为欲连接数据库的路径、用户名和密码,该方法的返回值类型为java.sql.Connection,典型代码如下:

Connection conn = DriverManager.getConnection(

    "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=db_JSDQ10", "sa", "");

代码说明如下。
数据库类型:SQL Server数据库。
数据库路径:服务器所在的计算机,即本机(127.0.0.1)。
数据库名称:db_JSDQ10。
用户名称:sa。
用户密码:密码为空。


三.行SQL语句
建立数据库连接(Connection)的目的是与数据库进行通信,实现方式为执行SQL语句,但是通过Connection实例并不能执行SQL语句,还需要通过Connection实例创建Statement实例,Statement实例又分为3种类型。

Statement实例:该类型的实例只能用来执行静态的SQL语句。

PreparedStatement实例:该类型的实例增加了执行动态SQL语句的功能。

CallableStatement实例:该类型的实例增加了执行数据库存储过程的功能。
上面给出的3种不同类型的Statement,其中Statement是最基础的,PreparedStatement继承了Statement并做了相应的扩展,而CallableStatement继承了PreparedStatement,又做了相应的扩展,从而保证在基本功能的基础上,各自又增加了一些独特的功能。


四.获得查询结果
通过Statement接口的executeUpdate()或executeQuery()方法,可以执行SQL语句,同时将返回执行结果,如果执行的是executeUpdate()方法,将返回一个int型数值,代表影响数据库记录的条数,即插入、修改或删除记录的条数;如果执行的是executeQuery()方法,将返回一个ResultSet型的结果集,其中不仅包含所有满足查询条件的记录,还包含相应数据表的相关信息,例如每一列的名称、类型和列的数量等。


五.闭连接
在建立Connection、Statement和ResultSet实例时,均需占用一定的数据库和JDBC资源,所以每次访问数据库结束后,应该及时销毁这些实例,释放它们占用的所有资源,方法是通过各个实例的close()方法,并且在关闭时建议按照如下的顺序:

resultSet.close();

statement.close();

connection.close();

建议按上面的顺序关闭的原因在于Connection是一个接口,close()方法的实现方式可能多种多样。如果是通过DriverManager类的getConnection()方法得到的Connection实例,在调用close()方法关闭Connection实例时会同时关闭Statement实例和ResultSet实例。但是通常情况下需要采用数据库连接池,在调用通过连接池得到的Connection实例的close()方法时,Connection实例可能并没有被释放,而是被放回到了连接池中,又被其他连接调用,在这种情况下如果不手动关闭Statement实例和ResultSet实例,它们在Connection中可能会越来越多,虽然JVM的垃圾回收机制会定时清理缓存,但是如果清理的不及时,当数据库连接达到一定数量时,将严重影响数据库和计算机的运行速度,甚至导致软件或系统瘫痪。
 

原创粉丝点击