核心技术Ⅱ:数据库编程

来自Wikioe
Eijux讨论 | 贡献2021年1月9日 (六) 06:09的版本 →‎关于JDBC
跳到导航 跳到搜索


关于JDBC

Java数据库连接(JDBC)API:

遗循了微软公司非常成功的ODBC模式(ODBC:微软提供为C语言访问数据库的一套编程接口)。JDBC和ODBC都基千同一个思想:根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信。


JDBC的目标:

  1. 通过使用标准的SQL语句,甚至是专门的SQL扩展,程序员就可以利用Java语言开发访问数据库的应用,同时还依旧遵守Java语言的相关约定。
  2. 数据库供应商和数据库工具开发商可以提供底层的驱动程序。因此,他们可以优化各自数据库产品的驱动程序。


JDBC 驱动程序类型:

  1. 笫1类驱动程序:将JDBC翻译成ODBC, 然后使用一个ODBC驱动程序与数据库进行通信。
    较早版本的Java包含一个这样的驱动程序:JDBC/ODBC桥,不过在使用这个桥接器之前需要对ODBC进行相应的部署和正确的设置。(Java 8已经不再提供JDBC/ODBC桥)
  2. 笫2类驱动程序:由部分Java程序和部分本地代码组成的,用于与数据库的客户端API进行通信。
    在使用这种驱动程序之前,客户端不仅斋要安装Java类库,还需要安装一些与平台相关的代码。
  3. 第3类驱动程序:纯Java客户端类库,它使用一种与具体数据库无关的协议将数据库请求发送给服务器构件,然后该构件再将数据库请求翻译成数据库相关的协议。这简化了部署,因为平台相关的代码只位于服务器端。
  4. 第4类驱动程序:纯Java类库,它将JDBC请求直接翻译成数据库相关的协议。


JDBC 的典型用法:

  1. 传统的客户端/服务器模型:通常是在服务器端部署数据库,而在客户端安装富GUI程序。(在此模型中,JDBC驱动程序应该部署在客户端)
    JDBC:传统的客户端-服务器应用.png
  2. 三层模型:客户端不直接调用数据库,而是调用服务器上的中间件层,由中间件层完成数据库查询操作。
    JDBC:三层结构的应用.png


结构化查询语言:SQL【SQL,读作“ [ˈsiːkwəl] ”】

SQL数据类型.png

JDBC配置

  1. 驱动程序JAR文件):
    需要准备对应的数据库驱动包:在运行访问数据库的程序时,需要将驱动程序的 JAR 文件包括到类路径中(编译时并不需要这个 JAR 文件)。
    // 在从命令行启动程序时,只需要使用下面的命令:
    java -classpath driverPath:. ProgramName
    
  2. 注册驱动器类
    1. 自动注册:许多JDBC的JAR文件会自动注册驱动器类,则可以跳过手动注册步骤。
      • (包含“META-INF/services/java.sql.Driver”文件的 JAR 文件可以自动注册驱动器类)
      • 自动注册对于遵循 JDBC4 的驱动程序是必须具备的特性。
    2. 手动注册:通过“DriverManager”来注册驱动器。
      1. 在 Java 程序中加载驱动器类:(注册驱动器的静态初始化器)
        Class.forName("org.postgresql.Driver"); // force loading of driver class
        
      2. 设置“jdbc.drivers”属性:
        • 命令行参数指定这个属性:
          java -Djdbc.drivers=org.postgresql.Driver ProgramName
          
        • 或,应用中通过调用设置系统属性:
          System.setProperty("jdbc.drivers", "org.postgresql.Driver");
          
        • 在这种方式中可以提供多个驱动器,用冒号将它们分隔开:
          org.postgresq1.Driver:org.apache.derby.jdbc.ClientDriver
          
  3. 连接到数据库
    1. 在代码中打开数据库连接:
      String url = "jdbc:postgresql :COREJAVA"; 
      String username = "dbuser"; 
      String password = "secret"; 
      Connection conn = DriverManager.getConnection(url, username, password);
      
      驱动管理器遍历所有注册过的驱动程序,以便找到一个能够使用数据库 URL 中指定的子协议的驱动程序。
    2. 使用数据库配置文件(如“database.properties”)
      jdbc.drivers=org.postgresql.Oriver
      jdbc.url=jdbc:postgresql:COREJAVA
      jdbc.username=dbuser
      jdbc.password=secret
      


  • 数据库驱动器名称:如:
    org.apache.derby.jdbc.ClientDriver
    org.postgresql.Driver
    com.mysql.jbdc.driver
    
  • 数据库URL:JDBCURL 的一般语法为:“jdbc:subprotocol:other_stuff”,其中subprotocol用于选择连接到数据库的具体驱动程序。
    URL包含各种与数据库类型相关的参数,例如“主机名”、“端口号”和“数据库名”。如:
    jdbc:derby://1ocalhost:1527/COREJAVA;create=true
    jdbc:postgresq1:COREJAVA
    


示例:

	try{
		Class.forName("com.mysql.jbdc.driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql:///spring_day01","root","admin");

		String sql = "select * from users where username = ?";
		PrepareStatement pre = conn.prepareStatement(sql);
		pre.setString(1,"小陈");
    
		ResultSet rs = pre.executeQuery();
		while(rs.next()){
			String username = rs.getString("username");
			String password = rs.getString("password");
	
			User user = new User();
			user.setUsername(username);
			user.setPassword(password);

			System.out.println(user);
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}finally{
		rs.close();
		pre.close();
		conn.close();
	}

使用JDBC语句

执行SQL语句 管理连接、语句和结果集 分析SQL异常 组装数据库

执行查询操作

预备语句 读写LOB SQL 转义 多结果集 获取自动生成的键

可滚动和可更新的结果集

可滚动的结果集 可更新的结果集

行集

构建行集 被缓存的行集

元数据

事务

用JDBC对事务编程 保存点 批量更新

高级SQL类型

Web与企业应用中的连接管理