尚硅谷之JDBC

3、获取数据库链接

可以通过 DriverManager 类建立到数据库的连接Connection:

DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。

  • public static Connection getConnection(String url)
  • public static Connection getConnection(String url,String user, String password)
  • public static Connection getConnection(String url,Properties info)

3.1 JDBC URL

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

JDBC URL的标准由三部分组成,各部分间用冒号分隔。

jdbc:<子协议>:<子名称>

  • 协议:JDBC URL中的协议总是jdbc
  • 子协议:子协议用于标识一个数据库驱动程序
  • 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息

例如:

  • MySQL的连接URL编写方式:
    • jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
    • jdbc:mysql://localhost:3306/testdb
    • jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8
    • jdbc:mysql://localhost:3306/testdb?user=root&password=123456
  • Oracle9i:
    • jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称
    • jdbc:oracle:thin:@localhost:1521:testdb
  • SQLServer
    • jdbc:sqlserver://主机名称:sqlserver服务端口号:DatabaseName=数据库名称
    • jdbc:sqlserver://localhost:1433:DatabaseName=testdb

//1、加载与注册驱动

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

//2、获取数据库连接

String url = "jdbc:mysql://localhost:3306/test";

Connection conn = DriverManager.getConnection(url, "root", "root");

//硬编码

3.2 jdbc.properties

src下建立文件jdbc.properties,当然也可以是其他名字,只不过这里为了见名知意取这个名

通常至少应该包括 "user" 和 "password" 属性

#key=value

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/test

user=root

password=root

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

//预先加载配置文件jdbc.properties,把配置信息封装到Properties对象中

Properties pro = new Properties();

//ClassLoader只能加载类路径下的资源文件

        //如果不是类路径下,只能使用FileInputStream

pro.load(ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"));

//1、加载与注册驱动

Class.forName(pro.getProperty("driver"));

//2、获取数据库连接

// Connection conn = DriverManager.getConnection(pro.getProperty("url"), pro);

Connection conn = DriverManager.getConnection(pro.getProperty("url"), pro.getProperty("user"),pro.getProperty("password"));

System.out.println(conn);

}

//解决了硬编码的问题