JDBC概述
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种
基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDB
C也是个商标名
简单来说,JDbc可以做三件事情:与数据库建立连接、发送 操作数据库的语句并处理结果。
模拟登陆注册业务的实现
数据库准备
创建数据库表单添加属性
uid、username、password、age、sex等
创建实体类,将表单内的数据添加进去,根据基本类型赋予属性。
注册业务的练习代码
模拟 用户注册 业务
4 * 1 模拟用户的假数据
5 * 2 保存到数据库中
6 * 2.1 判断当前用户名是否被注册 如果被注册 则提示用户名已存在
7 * 2.2 如果没有注册 则将 用户 信息存储到数据库中 并提示注册成功
11 @Test
12 public void testRegister() throws Exception {
13 //1 创建 一个 user 对象 模拟用户注册信息
14 User user = new User("root", "123456", 18, true, "2018-01-01");
15 //2 将用户信息存储到用户 user 表 中
16 // 2.1 加载驱动
17 Class.forName("com.mysql.jdbc.Driver");
18 // 2.2 建立连接
19 String url = "jdbc:mysql://localhost:3306/mytest?CharacterEncoding=UTF-8";
20 Connection conn = DriverManager.getConnection(url, "root", "qwe");
21 // 2.3 创建查询
22 Statement st = conn.createStatement();
23
24 // 2.4 执行sql 首先判断当前用户名 是否已经被注册 (查询当前用户名在数据库表中是否存在)
25 String sql1 = "select * from user where username = '" + user.getUserName() + "'";
26 ResultSet set = st.executeQuery(sql1);
27 // 判断结果集中是否有数据 如果有数据 证明该用户名已存在
28 if(set.next()){
29 //条件成立 证明有数据 提示用户名已存在
30 System.out.println("对不起 用户名已经存在");
31 }else{
32 // 将生日转化成DATE
33 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
34 Date date = sdf.parse(user.getBirthday());
35 java.sql.Date day = new java.sql.Date(date.getTime());
36 //条件不成立 证明用户名不存在 则将用户信息存储到数据库中 并提示 注册成功
37 String sql2 = "insert into user (username,password,age,sex,birthday) values ('"
38 + user.getUserName() + "',"
39 + user.getPassWord() + ","
40 + user.getAge() + ","
41 + user.isSex() + ", '"
42 + day +"')";
43 //执行并获取受影响的行数 如果 为 0 则 插入 失败 为 1则为成功
44 int count = st.executeUpdate(sql2);
45 if(count>0){
46 System.out.println("恭喜 注册成功");
47 }else{
48 System.out.println("sorry 注册失败");
49 }
50 }
51 // 2.5 关闭
52 set.close();
53 st.close();
54 conn.close();
55
56 }
登陆业务的练习代码
* 模拟 登录 业务
* 模拟用户登录的假数据
* 判断用户名和密码是否正确
* 正确 则获取用户的所有信息
* 错误 提示用户 用户名或密码不正确
@Test
public void testLogin() throws Exception {
// 1 创建一个user 对象 模拟用户登录的账号密码
User user = new User("root", "123456");
// 2 登录业务的实现
// 2.1 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.2 建立连接
String url = "jdbc:mysql://localhost:3306/mytest?CharacterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(url, "root", "qwe");
// 2.3 创建查询
Statement st = conn.createStatement();
// 2.4 执行sql
String sql1 = "select * from user where username='"
+ user.getUserName() + "' and password="
+ user.getPassWord();
/* 根据用户名和密码作为查询条件去数据库中查询
* 如果查询到数据 证明 该用户名和密码匹配 则获取用户的所有信息
* 如果查询不到 证明 该用户名或密码不正确 给出提示信息
* */
ResultSet set = st.executeQuery(sql1);
if(set.next()){
int id = set.getInt("id");
String userName = set.getString("username");
String passWord = set.getString("password");
int age = set.getInt("age");
boolean sex = set.getBoolean("sex");
java.sql.Date date = set.getDate("birthday");
String birthday = new SimpleDateFormat("YYYY-MM-DD").format(date);
User user2 = new User(id, userName, passWord, age, sex, birthday);
System.out.println(user2);
}else{
System.out.println("对不起 用户名或密码错误");
}
// 2.5 关闭
set.close();
st.close();
conn.close();
}
Dao模式
基本概念
DAO(Data Access Object,数据访问对象),主要的功能是用于进行数据操作的,在程序的标准开发框架中属于数据层的操作。
开发结构
客户层(Client)—>显示层(JSP/Servlet)—>业务层(BO)—>数据层(Dao)—>资源层(DataBase)
资源层(DataBase):资源层是数据库的操作层,里面可以进行各种数据库的存储,但是这些数据存储的
时候肯定是依靠SQL语句,
数据层
通过一个专门的数据库组件完成对数据库的操作
业务层
业务层是整个项目的核心
Dao组成
DatabaseConnection:专门负责数据库打开与关闭操作的类
VO:主要由属性,setter, getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录;
DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如增删改查等;
Impl: DAO接口的真实实现类,主要完成具体数据库操作,但不负责数据库的打开和关闭;
Factory: 工厂类,通过工厂类取得一个DAO的实例化对象。
命名规范
数据库连接: xxx.dbc.DatabaseConnection
DAO接口: xxx.dao.IXxxDAO
DAO接口真实实现类:xxx.dao.impl.XxxDAOImpl
VO类: xxx.vo.Xxx, VO命名要与表的命名一致
工厂类:xxx.factory.DAOFactory.