Inside JDBC(二)

        在Inside JDBC(一)中,给大家介绍了DriverManager类与Driver接口的含义及用法,从本文开始,我们来看看JDBC的具体用法。
        要操作数据库,首先的建立数据库连接(Connection),数据库连接的具体功能定义在java.sql.Connection接口中。我们先来看看如何建立连接。
        通过对Driver接口的学习,知道了其connect方法是用于建立数据库连接的,完整代码如下:

package com.wwei.jdbc;
import java.sql.Connection;
import java.sql.Driver;
import java.util.Properties;

public class Conn_1 {

    public static void main(String[] args) throws Exception{

        Driver driver = new com.mysql.jdbc.Driver();

        String url = "jdbc:mysql://localhost/test";
        Properties info = new Properties();//连接信息
        info.put("user", "root");
        info.put("password", "wwei");
        Connection con = driver.connect(url, info);//建立连接,成功返回连接实例,否则返回null。

        if(con != null){
            System.out.println("建立连接");
        }   
       if(con != null && !con.isClosed()){
            con.close();
            System.out.println("连接已断开");
        }
    }
} 

 
Connection实例使用完毕,切记关闭。如果在有连接池的情况要返回连接池。在这段代码中,我们采用了直接实例化驱动类com.mysql.jdbc.Driver,这种方式不可取,因为迫使应用代码高度依赖MySQL 的Connector/J实现,如果变更了数据库代码需要重构。 在这里之所以这样写,是希望大家更深入的理解JDBC,在实际开发中应该是下面一段代码的写法:

package com.wwei.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class Conn_2 {

    public static void main(String[] args) throws Exception {
        // 连接信息可以从外部得到,比如配置文件。
        String url = "jdbc:mysql://localhost:3306/test";
        String driverClass = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "wwei";

        Class.forName(driverClass);
        Connection con = DriverManager.getConnection(url, user, password);
        if (con != null) {
            System.out.println("建立连接");
        }

        if (con != null && !con.isClosed()) {
            con.close();
            System.out.println("连接已断开");
        }
    }
}  

 

这一次,JDBC代码就没有耦合具体的JDBC驱动实现了,如果出现数据库的变更,我们只需要修改相应的连接信息了和驱动实现的jar库文件,这些链接信息都可以从JDBC驱动实现的文档中获得,不需要死记。当为了提高熟练度,最好还是记住常见数据库的连接信息。大家可以Google一下。
        在Connection接口中,常用方法有SQL语句对象(Statement,PreparedStatement,CallableStatement)的工厂方法:Statement createStatement()系列、PreparedStatement prepareStatement(String sql)系列、CallableStatement prepareCall(String sql)系列,分别用于创建普通、预编译、存储过程SQL语句对象;事务处理方法: boolean getAutoCommit()、 void setAutoCommit(boolean autoCommit)、

void setTransactionIsolation(int level)、Savepoint setSavepoint(String name)、 void commit()、
void rollback()、void rollback(Savepoint savepoint)。
        默认情况下,Connection 对象处于自动提交模式下,这意味着它在执行每个语句后都会自动提交更改。
如果禁用自动提交模式(setAutoCommit(false)),为了提交更改,必须显式调用 commit 方法;
否则无法保存数据库更改。
        上述方法的使用举例待介绍SQL语句对象和结果集(ResultSet)之后在编写,先来了解一下java.sql.DatabaseMetaData接口,这个接口定义了整体数据库的综合信息,有驱动提供商实现。虽然很少用到但如果想从驱动实现中了解数据支持的功能,就需要了解了。代码:

package com.wwei.jdbc;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;

public class DBMetaData {

    public static void main(String[] args) throws Exception{    

        DatabaseMetaData meta = null;
        String url = "jdbc:mysql://localhost:3306/test";
        String driverClass = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "wwei";
        Class.forName(driverClass);

        Connection con = DriverManager.getConnection(url, user, password);
        if (con != null) {
            meta = con.getMetaData();
            System.out.println("数据库产品名称:" + meta.getDatabaseProductName() );
            System.out.println("数据库产品版本:" + meta.getDatabaseProductVersion() );
            System.out.println("数据库主版本:" + meta.getDatabaseMajorVersion());
            System.out.println("数据库次版本:" + meta.getDatabaseMinorVersion());     
            System.out.println("驱动名称:" + meta.getDriverName() );
            System.out.println("驱动版本:" + meta.getDriverVersion());          
            System.out.println("驱动实现JDBC规范主版本:" + meta.getJDBCMajorVersion());
            System.out.println("驱动实现JDBC规范次版本:" + meta.getJDBCMinorVersion());          
            System.out.println("当前数据库允许列最大字符数:" + meta.getMaxColumnNameLength());
            System.out.println("当前数据库支持最大并发连接数:" + meta.getMaxConnections());         
            System.out.println("数据库中在同一时间内可处于开放状态的最大活动语句数:" + meta.getMaxStatements());
        }

        if (con != null && !con.isClosed()) {
            con.close();  
        }
    }
}

DatabaseMetaDate中有更多的信息,可以进一步查阅JDK 文档学习。下一篇将介绍所有SQL语句对象及结果集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值