JavaWeb之JDBC学习(十三)

JDBC快速入门

简介

今天学习JDBC。重点掌握如何使用Java连接。代码练习基于JDBC/mysql改写用户注册,客户订单

1. 什么是JDBC?

1. JDBC(Java DataBase Connectivity),即Java数据库连接!也就是说,Java程序员可以使用JDBC API来操作数据库
2. 组成包:java.sql.*;javax.sql.*;这两个包都包含在了JDK中
3. 最早JDBC是Java EE中的规范,但是现在已经添加到Java SE中了。也就是说,JDBC API在JDK中就已经存在

2. JDBC开发步骤

1、注册驱动	Class.forName(com.mysql.jdbc.Driver)
2、获取与数据库的链接	Connection conn = DriverManager.getConnection(url,username,passwrod)
3、得到代表发送和执行SQL语句的对象 ResultSet rs = conn.createStatement()
4、执行语句	rs.executeQuery("");
5、如果执行的是查询语句,就会有结果集,处理遍历结果集rs.next()
6、释放占用的资源	rs.close(); stmt.close();	conn.close();

3. JDBC的编码规范和工具类的提取

JDBC的编码规范和工具类的提取
1. 编写配置文件
	driverClass=com.mysql.jdbc.Driver
	url=jdbc:mysql://192.168.13.2:3306/day15cus
	username=root
	password=root
2. 抽取了工具类
	static {
		InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("");
		Properties prop = new Properties();
		try {
			prop.load(is);
			driverClass = prop.getProperty("driverClass");
			url = prop.getProperty("url");
			username = prop.getProperty("username");
			password = prop.getProperty("password");

			//为了加载驱动只加载一次,放在静态代码块中
			Class.forName(driverClass);
		} catch (Exception e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	//获取数据库连接
	public static Connection getConnection() throws Exception {

		return DriverManager.getConnection(url,username,password);
	}
	//关闭资源release();

4. JDBC对数据库中的数据进行CRUD

数据库中插入数据
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	try {
		conn = JdbcUtil.getConnection();
		stmt = conn.createStatement();
		stmt.executeUpdate("insert into users (name,password,email,birthday) values(‘alice‘,‘123‘,‘[email protected]‘,‘1999-09-19‘)");
	} catch(Exception e) {
		throw new RuntimeException(e);
	}
数据库中更新数据
	Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            stmt.executeUpdate("update users set password=‘1234‘ where id=6");
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            JdbcUtil.release(rs, stmt, conn);
        }
数据库删除数据
	   Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            for(int x=8;x<10;x++)
            stmt.executeUpdate("delete from users where id="+x);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            JdbcUtil.release(rs, stmt, conn);
        }
数据库查询数据
	try {
		conn = JDBCUtils.getConnection();
		stmt = conn.createStatement();

		String sql = "select sid, sname, sage, cid from student where sid=‘8510‘";
		ResultSet rs = stmt.executeQuery(sql);

		while(rs.next()) {
			System.out.println(rs.getString(1)+">>"+rs.getString(2)+">>" + rs.getString(3)+">>" + rs.getString(4));
		}

		JDBCUtils.close(rs, stmt, conn);
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
            JdbcUtil.release(rs, stmt, conn);
        }

5. PreparedStatement特点和作用

a、指示SQL语句的预编译。提高数据库的执行效率
b、防止SQL注入。给数据库的已经不是字符串了
c、语句中的参数可以使用占位符(?)

6. Dao解耦的好处

好处: 降低了层与层之间的耦合性,大大提高了程序的扩展
如何解耦
	创建一个工厂类用于生产实现类,将实现类的名称放在配置文件中,使用反射创建该对象,便于以后维护和开发

JDBC项目练习

1. 用户注册案例

1. 开发前奏
	1.1 导包commons-beanutils-1.8.3.jar/commons-logging-1.1.1.jar/mysql-connector-java-5.0.8-bin.jar
	1.2 创建组织包
		com.itheima.domain			实体类User
		com.itheima.dao				定义操作数据库接口
		com.itheima.dao.impl		定义操作数据库具体实现
		com.itheima.service			定义业务逻辑接口
		com.itheima.service.impl	实现业务逻辑接口中的方法
		com.itheima.utils			工具类
		com.itheima.web.form		页面实体类和表单信息一致
		com.itheima.web.controller	控制器
		junit.test					测试类
		com.itheima.exception		异常类

		数据库中创建User表结构

2. 创建数据库user表
	create table user(
		id varchar(100) primary key,
   		username varchar(100) not null unique,
    		password varchar(100) not null,
    		email varchar(100) not null,
   		birthday date not null,
   		nickname varchar(100) not null
	);

3. 创建实体类User
	private String id;
	private String username;
	private String password;
	private String email;
	private Date birthday;
	private String nickname;

4. 实现UserDaoMySQLImpl类中方法
	4.1 实现方法addUser/find/findByUsername
	4.2 定义JdbcUtils工具类,利用配置文件实现(提高扩展性)

5. 实现BusinessServiceImpl类中方法
	5.1 实现方法register/login
	5.2 定义BeanFactory工厂类用来创建实现类实例,利用配置文件实现

6. 创建控制器ControllerServlet类
	6.1 首先解决乱码问题
	6.2 根据用户传递的操作类型,创建不同操作类型的方法
	6.3 创建业务操作方法
		1) login方法
			#1.1 获取用户登录传递过来的用户名和密码
			#1.2 调用业务逻辑层中login方法验证是否登录成功,
			如果成功重定向到首页(如果重定向的话,这里需要将user设置session域,主页中调用)
			#1.3 否则验证失败提示信息,1秒后刷新到登录页

		2) register方法
			#2.1 将用户录入的数据注入到页面实体类formBean中
			#2.2 调用formBean中validate方法验证是否有效
			#2.3 拷贝formBean到user实体类中
			#2.4 设置user的id
			#2.5 调用业务层中register注册方法如果注册成功,提示信息,1秒后跳到登录页
			#2.6 否则抛异常,将错误信息加入到集合中,转发到注册页

		3) logout方法
			#3.1 将session域中的user移除
			#3.2 提示信息注销成功,1秒后刷新到登录页

页面设计
	1. indext.jsp主页
		1.1 判断session域中user值是否为空,不为空就提示欢迎界面,提供注销功能
		1.2 若为空就提示注册或者登录界面
	2. login.jsp登录页
		2.1 用户登录表单提交到总控制器中
		2.2 加入一个隐藏域,为该提交操作类型的参数
	3. register.jsp注册页面
		3.1 用户注册表单,提交操作参数
		3.2 注意:隐藏域id,日期控件,设置value值,<span>区域

2. 客户信息管理系统

1. 开发前奏
	1.1 导包
		commons-beanutils-1.8.3.jar
		commons-logging-1.1.1.jar
		mysql-connector-java-5.0.8-bin.jar
	1.2 创建组织包
		com.itheima.domain
		com.itheima.dao
		com.itheima.dao.impl
		com.itheima.service
		com.itheima.service.impl
		com.itheima.utils
		com.itheima.web.controller
		junit.test

		dfcg.properties配置文件
	1.3 开发步骤
		DB-->domain-->BusinessService(test)-->CustomerDao(test)
		-->controller(utils)<-->view

2. 创建数据库customer表
	create table customer(
		id varchar(100) primary key,
		name varchar(100) not null unique,
		gender varchar(100) not null,
		birthday date not null,
		phone varchar(100) not null,
		email varchar(100) not null,
		hobby varchar(100) not null,
		type varchar(100) not null,
		description text
	);

3. 创建实体类
	private String id;
	private String name;
	private String gender;
	private Date birthday;
	private String phone;
	private String email;
	private String hobby;
	private String type;
	private String description;

4. 创建业务逻辑层实现类(BusinessServiceImpl),实现业务中方法
	List findAll()返回所有客户					saveCustomer(customer)添加一个客户
	deleteCustomer(customerid)			Customer 	findOne(customerid)查找一个客户
	updateCustomer(customer)更新客户

5. 创建数据访问层实现类(CustomerDaoImpl),实现CRUD方法,以便业务层调用
	findAll()返回所有客户				save保存一个客户
	delete删除一个客户					findOne查找一个客户
	update更新一个客户

6. 创建一个控制器ControllerServlet控制表单信息CRUD
	6.1 首先解决乱码问题
	6.2 获取客户传递的操作类型,根据操作类型操作客户信息
	6.3 控制器中操作类型方法
		addCustomer()添加一个客户
			1). 日期类型不一致,CoonverterUtils注册类型转换器
				register(DateLocaleConverter(),Date.class)
			2). 创建一个工具类,用作拷贝表单请求的值到JavaBean中
				因为请求的表单信息和JavaBean一致,所以这里可以省略页面实体类
			3). hobby有多个值,所以这里需要对hobby进行拼接字符串,设置到hobby中
			4). 调用业务逻辑实现添加功能
			5). 转发到listCustomer.jsp中--
		showAllCustomers()查看所有信息
			1). 调用业务逻辑实现查看所有信息,得到一个集合
			2). 将集合设置到request域中
			3). 转发到listCustomer.jsp中
		delOneCustomer()删除指定id信息
			1). 获取操作删除的id
			2). 调用业务逻辑方法实现删除
			3). 执行查看所有方法
		delMultiCustomer()删除多选的ID
			1). 首先获取ids一组值
			2). 遍历,调用业务层中deleteCustomer方法删除
			3). 再执行查看所有信息方法

页面设计
	1. 添加客户信息addCustomer.jsp
		用户注册表单信息,提交到ControllerServlet?op=addCustomer
		日期控件、返回主页
	2. index.jsp-->jsp:forward 转发到ControllerServlet-->jsp:param value="listAll" name= op
	3. list客户信息表
		1. 表单头部:添加(链接添加jsp)/删除(删除事件)
		2. 信息标题<全选/取消功能>
		3. 遍历客户信息
时间: 2024-10-16 22:28:44

JavaWeb之JDBC学习(十三)的相关文章

深入分析JavaWeb Item27 -- JDBC学习入门

一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这

javaweb学习总结(三十二)——JDBC学习入门【转】

原文地址:javaweb学习总结(三十二)——JDBC学习入门 一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后 才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数 据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作

JDBC学习笔记一

JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程序到JDBC管理器连接. JDBC Driver API: 这支持J

JDBC学习笔记二

Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方法来获取 * 2).通过excuteUpdate(sql)可以执行S

【转】JDBC学习笔记(1)——JDBC概述

转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程

【转】JDBC学习笔记(2)——Statement和ResultSet

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方

JDBC学习笔记(一)

public static void main(String[] args) { ResultSet rs = null; Statement stmt = null; Connection conn = null; try { /** * 1.加载JDBC驱动程序: * 加载目标数据库驱动到JVM * 成功加载后,会将Driver类的实例注册到DriverManager类 * oracle-Driver:oracle.jdbc.driver.OracleDriver * MySQL-Drive

JDBC学习第一站之Statement与PreparedStatement

Statement: 通过类的名字,把类(元数据对象)加载到内存中,加载驱动,由于是对数据流做操作,一定要加异常处理,后面也是 <span style="white-space:pre"> </span>// 通过类的名字,把类(元数据对象)加载到内存中 <span style="white-space:pre"> </span>Class.forName("com.mysql.jdbc.Driver&quo

JDBC 学习复习10 编写自己的JDBC框架

首先万分感谢狼哥 孤傲苍狼 博客,整个jdbc学习的博客资料 链接为http://www.cnblogs.com/xdp-gacl/p/4006830.html 详细代码见狼哥博客,列出我学习过程中遇到的问题吧. public static Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException { Connection conn = null; PreparedStatement p