JAVAWEB开发之JDBC详解(连接操作数据库、处理大数据、批处理)

本文深入探讨JDBC,从基础到高级,包括JDBC编程步骤、DriverManager、Connection、Statement、ResultSet、批处理和处理大数据。讲解了DAO模式、PreparedStatement的使用,以及如何优化对数据库的CRUD操作和处理大规模数据。
摘要由CSDN通过智能技术生成

JDBC简介

 JDBC全称为:Java  DataBase Connectivity (Java数据库连接)
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC

Sun公司为了简化数据库开发,定义了一套JDBC接口,这套接口由数据库厂商去实现,这样,开发人员只需要学习JDBC接口, 并通过JDBC加载具体的驱动,就可以操作数据库。
组成JDBC的2个包(java.sql 、javax.sql)
(1)java.sql
         类:DriverManager
         接口:Connection  Statement  ResultSet  PreparedStatement 
                   CallableStatement(它用于调用存储过程)
(2)javax.sql
          接口 DataSource

开发JDBC应用需要以上2个包的支持外
还需要导入相应JDBC的数据库驱动(即数据库驱动  mysql-connector-java-x.x.x-bin.jar)
什么是驱动?
两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

第一个JDBC程序

 创建user表
create table user(
		   id int primary key auto_increment,
		   username varchar(20) unique not null,
		   password varchar(20) not null,
		   email varchar(40) not null
		);
		
		INSERT INTO USER VALUES(NULL,'tom','123','tom@163.com');
		INSERT INTO USER VALUES(NULL,'fox','123','fox@163.com');
编程从user表中读取数据,并打印在命令行窗口中。
(一)搭建实验环境
         1、在MySQL中创建一个库,并创建user表和插入表的数据。
         2、新建一个Java工程,并导入数据驱动
(二)编写程序,在程序中加载数据库驱动(称为注册驱动)
         DriverManager.registerDriver(Driver  driver);
(三)建立连接(Connection)
         Connection  conn = DriverManager.getConnection(url, user, pass);
(四)创建用于向数据库发送SQL的Statement对象,并发送SQL
         Statement  st = conn.createStatement();
         ResultSet   rs = st.executeQuery(sql);
(五)从代表结果集的ResultSet中取出数据,打印到命令行窗口
(六)断开与数据库的连接,并释放相关资源。
新建项目工程,创建cn.itcast.jdbc包 创建JdbcDemo1.java
package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.Driver;

public class JdbcDemo1 {

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

		// 1.注册驱动
		DriverManager.registerDriver(new Driver());

		// 2.获取连接对象
		Connection con = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/mydb1", "root", "root");

		// 3.通过连接对象获取操作sql语句Statement
		Statement st = con.createStatement();

		// 4.操作sql语句
		String sql = "select * from user";

		// 操作sql语句(select语句),会得到一个ResultSet结果集
		ResultSet rs = st.executeQuery(sql);

		// 5.遍历结果集
		// boolean flag = rs.next(); // 向下移动,返回值为true,代表有下一条记录.
		// int id = rs.getInt("id");
		// String username=rs.getString("username");
		// System.out.println(id);
		// System.out.println(username);
		
		while(rs.next()){
			int id=rs.getInt("id");
			String username=rs.getString("username");
			String password=rs.getString("password");
			String email=rs.getString("email");
			
			System.out.println(id+"  "+username+"  "+password+"  "+email);
		}
		
		//6.释放资源
		rs.close();
		st.close();
		con.close();
	}
}

JDBC 编程步骤以及JDBC访问数据库的流程

JDBC编程步骤

简单的说,JDBC的意义在于在Java程序中执行SQL语句。
 驱动程序的意义在于提供统一的接口并隐藏实现细节。驱动程序定义了数据库能做什么,比如上面所说的几个步骤,数据库的制造商(例如Oracle)提供符合这些接口的实现(怎么做),我们在编写Java程序中只需要调用驱动程序中的接口就可以操作数据库,完成这四个步骤。同计算机硬件的驱动程序类似,JDBC的驱动实现了 "做什么"和"怎么做"的分离。
与使用SQLPlus访问数据库类似,在操作数据库之前,需要先跟数据库建立连接。建立连接后,可以通过获得的连接对象来调用SQL语句。
操作数据基本的含义是执行SQL语句,包括DML,DDL,DCL 均可,还可以调用数据库中已有的存储过程,释放资源。
使用JDBC编程时,与数据库建立的连接以及通过这个连接创建的语句对象,都有可能需要调用响应的close方法来释放底层建立的网络连接,或者打开文件。

JDBC访问数据库的流程
  • 通过DriverManager加载驱动程序driver;
  • 通过DriverManager类获得表示数据库连接的Connection类对象;
  • 通过Connection对象绑定要执行的语句,生成Statement类对象;
  • 执行SQL语句,接收执行结果集ResultSet;
  • 可选的对结果集ResultSet类对象的处理;
  • 必要的关闭ResultSet、Statement和Connection

程序详解—DriverManager

JDBC程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
    DriverManager.registerDriver(new Driver);
    DriverManager.getConnection(url, user, password);
它是java.sql包下的一个驱动管理的工具类,可以理解成是一个容器(Vector),可以装入很多数据库驱动
它的registDriver方法分析
 public static synchronized void registerDriver(java.sql.Driver driver)
  参数:java.sql.Driver
  我们传递的是  com.mysql.jdbc.Driver;
  在com.mysql.jdbc.Driver类中有一段静态代码块:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
     }
}
注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
  (一)有上述的的源代码可知,如果采用此种方式,会导致驱动程序注册两次,也就是说在内存中会有两个Driver对象
  (二)程序依赖MySQL的API,脱离MySQL的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
   推荐方式:利用反射Class.forName("com.mysql.jdbc.Driver");
   采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
 同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回connection对象。
在cn.itcast.jdbc包下新建JdbcDemo2.java 如下:
package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//解决关于加载驱动问题
public class JdbcDemo2 {

	public static void main(String[] args) throws SQLException,
			ClassNotFoundException {

		// 1.注册驱动
		// DriverManager.registerDriver(new Driver()); //加载了两个驱动
		Class.forName("com.mysql.jdbc.Driver"); // 加载mysql驱动
		Class.forName("oracle.jdbc.driver.OracleDriver");// 加载oracle驱动

		// String url="jdbc:mysql://localhost:3306/day17";
		String url = "jdbc:mysql:///mydb1";

		// 2.获取连接对象
		Connection con = DriverManager.getConnection(url, "root", "root");

		// 3.通过连接对象获取操作sql语句Statement
		Statement st = con.createStatement();

		// 4.操作sql语句
		String sql = "select * from user";

		// 操作sql语句(select语句),会得到一个ResultSet结果集
		ResultSet rs = st.executeQuery(sql);

		// 5.遍历结果集
		// boolean flag = rs.next(); // 向下移动,返回值为true,代表有下一条记录.
		// int id = rs.getInt("id");
		// String username=rs.getString("username");
		// System.out.println(id);
		// System.out.println(username);

		while (rs.next()) {
			int id = rs.getInt("id");
			String username = rs.getString("username");
			String password = rs.getString("password");
			String email = rs.getString("email");

			System.out.println(id + "  " + username + "  " + password + "  "
					+ email);
		}

		// 6.释放资源
		rs.close();
		st.close();
		con.close();
	}
}


 数据库URL 

URL用于标识数据库位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:
jdbc:mysql://localhost:3306/test?key=value
  • jdbc: 协议
  • mysql:子协议
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值