JavaWeb-JDBC入门

今日内容

	JDBC概述
	JDBC实现CURD操作
	单元测试
	DAO设计模式

一、JDBC概述

	java Database connection java语言连接数据库
	是java内部提供一套操作数据库的接口,实现对象数据库的统一访问

组成

	DriverManager:驱动管理器,用户注册驱动,获取连接对象
	Connection接口:数据库的连接对象
	Statement接口:执行SQL语句,操作数据  (使用字符串拼接时可能会造成sql注入不建议使用)
	PreparedStatement接口 执行SQL语句,操作数据(预处理机制,使用?占位符传入参数解决sql注入问题)
	ResultSet接口:结果集 一张虚拟的表

二、通过JDBC实现CURD操作

1、准备

学习过程中使用的是mysql数据库,使用的IDE工具Eclipse
<1>在mysql数据库中创建表
		Student
<2>在Eclipse中创建实体类
	 创建实体类Student
<3>引入数据厂商提供的驱动(.jar文件的方式)
	将文件引入到WebContent下 WEB-INF下lib中	
<4>编写代码
	使用JDBC访问数据库的步骤:
		1、加载数据库的驱动
		2、获取数据库的连接对象
		3、编写SQL语句
		4、获取PrepareStatement对象,执行SQL语句
		5、处理结果集ResultSet
		6、释放资源colse()
注册数据库驱动
	Class.forName("驱动类全权定名");
获取数据库连接对象
Connection conn=Connection DriverManager.getConnetion(url,user,password);
参数一:url统一资源定位 Uniform Resource Locator 
	标识网络上的一个具体的资源(网页,一张照片,一个视频)
	协议+ip地址+端口+资源名称
	8.0以前:jdbc:mysql://127.0.0.1:3306/tlxy
	8.0以后:jdbc:mysql://127.0.0.1:3306/tlxy?
	characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
	(增加了时区的参数)
参数二:用户名
参数三:密码
执行sql语句
String sql=" select * from student where name =?";
String name="123";
PreparedStatement ps =conn.prepareStatement(sql);
ps.setString(1, name);
ReusltSet rs =ps.executeQuery();
ReusltSet
作用:封装了查询的结果数据,内部含有一个游标,默认实行数据前
方法:boolean next(),将指向数据的游标下移,返回没有数据的标记
	if(rs.next()){
		 rs.getObject(1);//通过索引值获取value
		 int sid =rs.getObject("sid");//通过列名称获取值
		 String name=rs.getObject("name");
		 int age=rs.getObject("age")
		 Student stu = Student(sid,name,age);    //数据封装到实体类
	}
关闭连接
conn.close();
ps.close();
rs.close();

编写JDBC工具类

为了减少代码的冗余编写JDBC工具类
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
 * 简单的JDBC工具类
 */
public class JDBCUtils {
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	//静态块 只需要加载一次数据库驱动
	static {		
		try {	
			Properties p = new Properties();//使用Properties配置类读取配置文件
			//读取配置文件信息,文件放在Project目录下
			p.load(new FileReader("db.properties"));//加载字符流文件
			driver=p.getProperty("mysql.dataSource.driver");//驱动器全限定名
			url=p.getProperty("mysql.dataSource.url");//url
			username=p.getProperty("mysql.dataSource.username");//用户名
			password=p.getProperty("mysql.dataSource.password");	//密码
			Class.forName(driver);//加载数据库驱动
		} catch (Exception e) {			
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() { //连接数据库
		Connection conn=null;
	try {
			conn =DriverManager.getConnection(url,username,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		return conn;
	}
	
	public static  void CloseCon(Connection conn,Statement st,ResultSet rs) {//关闭数据库
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}		
	}
}

单元测试

Junit是Java单元测试框架,已经在Eclipse中默认安装
Junit4通过注解的方式来识别测试方法	
@Before 在测试方法运行之前运行
@Test	测试方法	
@After	在测试方法运行之后运行

DAO设计模式

<1>概念
DAO:data access object 数据库访问对象
是位于业务逻辑和持久化数据之间的一套标准

<2>作用

隔离了业务逻辑代码和数据操作代码,将业务层和数据层进行解耦
实现不同数据的操作
增加了程序的可扩展性和灵活性

<3>组成

1、数据库交互的工具类,负责数据库的开启和关闭操作
2、实体类:主要属性和各种操作属性的set/get方法组成的类型,VO类bean类,entity类
   此类中属性和表的字段对应,每一个实体对象表示表中的一条记录
3、DAO接口:定义操作的标准
4、DAO接口是实现类:完成具体的数据操作
5、DAO工厂类:通过工厂类获取一个DAO对象
6、Service类:通过工厂获取DAO对象,执行各种数据操作
获取properties文件的信息
ResourceBundle rb = ResourceBundle.getBundle("com.tlxy.factory.user");
String str = rb.getString("UserDaoInfo");
//通过全限定名获取Class
Class<UserDao> forName = (Class<UserDao>) Class.forName(str);
1.9以后由于Class.newInstance()已经过时使用下面方式替换
//通过Constructor.newInstance()
Constructor<UserDao> dc = forName.getDeclaredConstructor();
dao = dc.newInstance();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值