← 返回首页
JDBC教程(二)
发表时间:2020-03-21 12:58:30
讲解JDBC之Connection

Connection:Connection是Java与数据库的连接对象。

1.Connection的两大作用

1)创建执行SQL语句的对象

通过Connection可以获得三种类型的语句对象。 - Statement :执行SQL - CallableStatement :执行数据库中存储过程 - PreparedStatement :执行SQL.对SQL进行预处理。解决SQL注入漏洞。

2)管理事务

通过Connection可以开启事务。

2.如何获取Connection对象

通过 DriverManager.getConnection(URL, USER, PASS)方法来获取连接对象。例如:

String URL = "jdbc:mysql://localhost:3306/myschool?useUnicode=true&characterEncoding=UTF-8";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

其中,URL表示要连接的数据库的URL地址。语法如下:

注意:不同数据库的jdbc URL 写法不同。见下表:

数据库 URL格式
MySQL jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
MSSQL jdbc:sqlserver://localhost:1433;databaseName=test
Oracle jdbc:oracle:thin:@localhost:1521:orcl

3.通过读取属性文档获取连接对象

在实际项目开发时很少把URL,USERNAME,PASSWORD这三个参数配置在源代码里,因为这样做不利于项目的维护和扩展。通常把数据库的连接写在配置文档里面,这样我们只需要打开配置的开关,就可以很灵活的切换数据库。

实例:

在src根目录下,创建jdbc.properties.

编辑jdbc.properties,内容如下:

#MYSQL
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
maxActive=50
maxIdle=20
maxWait=60000

#MSSQLServer
#driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://localhost:1433;databaseName=myschool
#username=sa
#password=sa
#maxActive=50
#maxIdle=20
#maxWait=60000

#ORACLE
#driverClassName=oracle.jdbc.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:myschool
#username=scott
#password=tiger
#maxActive=50
#maxIdle=20
#maxWait=60000

这里在属性文档里面配置了三种不同的数据库连接配置,默认使用MySQL,其它两种注释掉。 新建util包,创建数据库工具类DBUtil。这里使用到了设计模式中的懒汉模式。

package util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class DBUtils {
    private static Connection conn = null;
    private static String url =null;
    private static String username = null;
    private static String password = null;
    private DBUtils(){

    }
    static{
        try
        {
            Properties pro = new Properties();
            InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            pro.load(in); //读取属性文档配置信息
            String driverClassName = pro.getProperty("driverClassName");
            Class.forName(driverClassName);
            url = pro.getProperty("url");
            username = pro.getProperty("username");
            password = pro.getProperty("password");
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }

    public static Connection getConnection ()throws Exception
    {
        if(conn==null){
            conn = DriverManager.getConnection(url,username,password);
        }
        return conn;
    }
}

编写测试类。

public class DBUtilTest {
    public static void main(String[] args) {
        try {
            Connection conn1 = DBUtils.getConnection();
            Connection conn2 = DBUtils.getConnection();
            if(conn1!=null){
                System.out.println("MySQL连接成功!");
            }else{
                System.out.println("MySQL连接失败!");
            }

            System.out.println(conn1 == conn2);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

运行结果:
MySQL连接成功!
true

说明工具类可正常获取连接对象,并且是单例模式。