数据库编程——JDBC 配置

【0】README

1) 本文文字描述 转自 core java volume 2 , 旨在理解 数据库编程——JDBC 配置 的基础知识 ;
2) update timestamp: 1602022101; 更新内容有: 上传了一些图片, 而且举证说明了 为什么 jdbc.drivers=com.mysql.jdbc.Driver ? 和 为什么 jdbc.url=jdbc:mysql://localhost:3306/testCoreJava ?
3) for source code, please visit : https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter4/JDBCConfig   


【1】数据库URL

1)在连接数据库时, 我们必须使用各种与数据库类型相关的参数,如 主机名, 端口号, 数据库名;
2)JDBC 使用了一种与普通URL 相类似的语法类描述数据源。 下面是这这种语法的两个实例:

jdbc:derby://localhost:8080/corejava;create=true
jdbc:postgresql:corejava

3)JDBC URL 的一般语法为:

jdbc : subprotocol: other stuff

  • 3.1)其中 subprotocol :用于选择连接到 数据库的具体驱动程序;
    这里写图片描述

【2】驱动程序 JAR 文件

1)需要获得包含了 所用数据库的驱动程序的JAR文件;
2)在运行访问数据库的程序时, 需要将驱动程序的 JAR 文件包括到类路径中;
3)在从 命令行启动程序时,只需要使用下面的命令:

java -classpath .: driverPathProgramName
这里写图片描述


【3】注册驱动器类

1)如果驱动程序JAR文件不支持自动注册,那就需要找出数据库提供商使用的JDBC 驱动器类的名字。典型的驱动器名字如下:

org.apache.derby.jdbc.ClientDriver
org.postgresql.Driver

2)通过使用 DriverManager, 可以使用两种方式来注册驱动器。

  • 2.1)一种方式是在 java 程序中 加载驱动器类, 如:

    Class.forName(“org.postgresql.Driver”);

  • 2.2)方法二: 设置 jdbc.drivers 属性。可以用命令行参数来指定这个属性;

  • 2.3)方法三:或者在应用中设置系统属性:
    System.setProperty("jdbc.drivers", "org.postgresql.Driver");

Attention) 在方法三中可以提供多个驱动器, 用冒号将他们分开, 如

org.postgresql.Driver:org.apache.derby.jdbc.ClientDriver;


【4】连接到数据库

1)打开一个数据库连接, 如:

String drivers = props.getProperty(“jdbc.drivers”);
if (drivers != null) System.setProperty(“jdbc.drivers”, drivers);
String url = props.getProperty(“jdbc.url”);
String username = props.getProperty(“jdbc.username”);
String password = props.getProperty(“jdbc.password”);
return DriverManager.getConnection(url, username, password); // 利用驱动管理器打开一个数据库连接

2)驱动管理器(driver manager): 驱动管理器遍历所有注册过的驱动程序, 以便找到一个能够使用 数据库 URL 中指定的子协议的驱动程序;
3) 看个数据库连接荔枝:
这里写图片描述
这里写图片描述

4) source code at a glance

package com.corejava.chapter4;

import java.nio.file.*;
import java.sql.*;
import java.io.*;
import java.util.*;

public class TestDB
{
    private static String cur_dir = System.getProperty("user.dir") + File.separator +  
            "com" + File.separator + "corejava" + File.separator +  "chapter4" + File.separator;

   public static void main(String args[]) throws IOException
   {
      try
      {
         runTest();
      }
      catch (SQLException ex)
      {
         for (Throwable t : ex)
            t.printStackTrace();
      }
   }

   public static void runTest() throws SQLException, IOException
   {
      try (Connection conn = getConnection())
      {
         Statement stat = conn.createStatement();

         stat.executeUpdate("CREATE TABLE Greetings ("
                                + "Message CHAR(20))");
         stat.executeUpdate("INSERT INTO Greetings VALUES ('Hello, World!')");

         try (ResultSet result = stat.executeQuery("SELECT * FROM Greetings"))
         {
            if (result.next())
               System.out.println(result.getString(1));
         }
         stat.executeUpdate("DROP TABLE Greetings");
      }
   }
   public static Connection getConnection() throws SQLException, IOException
   {
      Properties props = new Properties();
      try (InputStream in = Files.newInputStream(Paths.get(cur_dir + "database.properties")))
      {
         props.load(in); // 加载数据库连接信息的 .properties 文件
      }
      String drivers = props.getProperty("jdbc.drivers"); //数据库驱动器
      if (drivers != null) System.setProperty("jdbc.drivers", drivers);
      String url = props.getProperty("jdbc.url");
      String username = props.getProperty("jdbc.username");
      String password = props.getProperty("jdbc.password");

      return DriverManager.getConnection(url, username, password); //利用驱动管理器打开一个数据库连接
   }
}
jdbc.drivers=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testCoreJava
jdbc.username=root
jdbc.password=root

Complementary)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值