JDBC
简介
Java DataBase Connectivity Java数据库连接
我们学习的技术是JDBC 不是 MYSQLJDBC 也不是 ORACLE JDBC JDBC是一套标准,是Java与各大数据库厂商共同定制的一套接口. 这套接口由各大数据库厂商进行了实现.
使用步骤: (6步)
- 引入jar文件.
- 加载数据库驱动 (JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤) Class.forName(“com.mysql.jdbc.Driver”);
-
通过驱动管理器, 获取JDBC连接对象.
Connection conn = DriverManager.getConnection(“数据库连接地址”,“帐号”,“密码”);
数据库连接地址格式: 主协议:子协议://ip地址:端口号/数据库名称
mysql的连接地址:
jdbc:mysql://localhost:3306/java35
oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL - 通过连接对象, 创建SQL执行对象 (SQL执行环境) Statement state = conn.createStatement();
- 通过SQL执行对象 ,执行SQL语句. state.execute(String sql语句);
-
释放资源
state.close();
conn.close();
工厂方法设计模式 ( 静态工厂方法模式)
工厂方法模式一种创建对象的模式. 工厂方法模式基于”输入”,应用在超类和多个子类之间的情况,这种模式将创建对象的责任转移到工厂类;
工厂设计模式的优点:
- 面向接口编程,体现了面向对象的思想
- 降低了耦合, 将创建对象的工作转移到了工厂类
DAO
***DAO(Data Access Object)***是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务 逻辑与数据库资源中间。
为了建立一个健壮的Java应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的 语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中, 当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个 特定的数据存储。
DAO模式是标准的JavaEE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分 开.一个典型的DAO实现有下列几个组件:
- 一个DAO工厂类;
- 一个DAO接口;
- 至少一个实现DAO接口的具体类;
- 数据传递对象(有些时候叫做Bean对象).
JDBC完成人事管理系统
完成人事管理系统,实现人事数据保存到数据库,能够实现人事数据的增、删、改、查
随着我国疫情的好转,目前大部分的企业已经实现全面复工,小明所在的公司最近正 在进行大量的招聘人员(由于疫情期间影响,目前该公司只有5名员工),该公司想在最 近开发一套简易的系统实现人事的管理;
User类
public class User {
private int e_id ;
private String e_name;
private Double e_salary;
private String e_hiredate ;
private int manager_id;
public User(int e_id, String e_name, double e_salary, String e_hiredate, int manager_id) {
this.e_id = e_id;
this.e_name = e_name;
this.e_salary = e_salary;
this.e_hiredate = e_hiredate;
this.manager_id = manager_id;
}public int getE_id() {
return e_id;
}
public void setE_id(int e_id) {
this.e_id = e_id;
}
public double getE_salary() {
return e_salary;
}
public void setE_salary(double e_salary) {
this.e_salary = e_salary;
}
public void setE_hiredate(String e_hiredate) {
this.e_hiredate = e_hiredate;
}
public int getManager_id() {
return manager_id;
}
public void setManager_id(int manager_id) {
this.manager_id = manager_id;
}
public String getE_name() {
return e_name;
}
public void setE_name(String e_name) {
this.e_name = e_name;
}
public User(int e_id, String e_name) {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return e_id == user.e_id &&
Double.compare(user.e_salary, e_salary) == 0 &&
manager_id == user.manager_id &&
Objects.equals(e_name, user.e_name) &&
Objects.equals(e_hiredate, user.e_hiredate);
}
@Override
public int hashCode() {
return Objects.hash(e_id, e_name, e_salary, e_hiredate, manager_id);
}
@Override
public String toString() {
return "bean.User{" +
"e_id=" + e_id +
", e_name='" + e_name + '\'' +
", e_salary=" + e_salary +
", e_hiredate=" + e_hiredate +
", manager_id=" + manager_id +
'}';
}
}
接口BaseUserDao
public interface BaseUserDao {
boolean insert(String e_name, double e_salary,String e_hiredate, int manager_id)throws Exception;
boolean remove(int e_id);
boolean update(int e_id, double e_salary);
List<User> findAll();
}
MySqlUserDao
public class MySqlUserDao implements BaseUserDao {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Override
public boolean insert(String e_name, double e_salary, String e_hiredate, int manager_id) throws Exception {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
Statement state = conn.createStatement();
//更改语句
String sql = "insert into employees(e_id,e_name,e_salary,e_hiredate,manager_id) values(null,'" + e_name + "','" + e_salary + "','" + e_hiredate + "','" + manager_id + "')";
System.out.println(sql);
//执行批处理
int i = state.executeUpdate(sql);
//清空批处理指令
state.clearBatch();
state.close();
conn.close();
if (i>=1) {
return true;
}
return false;
}
@Override
public boolean remove(int e_id){
Connection conn = null;
Statement state = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
state = conn.createStatement();
//insert into xzk_user values('username','password') : 字符串的定义格式 字符串的表现格式
int row1 = state.executeUpdate("delete from employees where e_id =" + e_id);
if (row1 >= 1) {
return true;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
state.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
};
@Override
public boolean update(int e_id, double e_salary){
Connection conn = null;
Statement state = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
state = conn.createStatement();
//insert into xzk_user values('username','password') : 字符串的定义格式 字符串的表现格式
//这块改动,动态更改薪资
int row1 = state.executeUpdate("update employees set e_salary=" + e_salary + " where e_id =" + e_id);
return row1>0;
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
state.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
};
@Override
public List<User> findAll() {
List<User> data = new ArrayList<>();
Connection conn = null;
Statement state = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
state = conn.createStatement();
rs = state.executeQuery("select * from employees");
while(rs.next()){
int e_id = rs.getInt("e_id");
String e_name = rs.getString("e_name");
Double e_salary = rs.getDouble("e_salary");
String e_hiredate = rs.getString("e_hiredate");
int manager_id = rs.getInt("manager_id");
data.add(new User(e_id,e_name,e_salary,e_hiredate,manager_id));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
state.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return data;
}
}
UserDaoFactory
public class UserDaoFactory {
public static BaseUserDao get(){
return new MySqlUserDao();
}
}
Main
public class Main {
static Scanner input = new Scanner(System.in);
static BaseUserDao dao = UserDaoFactory.get();
public static void main(String[] args) throws Exception {
System.out.println("欢迎来到人事管理系统");
System.out.println("请选择:");
System.out.println("1.调整薪资\t\t2.离职员工\t\t3.查看所有用户\t\t4.新增员工");
String menu = input.nextLine();
switch (menu){
case "1":
sal();
break;
case "2":
dim();
break;
case "3":
showUsers();
break;
case "4":
increased();
break;
}
}
private static void increased() throws Exception {
System.out.println("请输入姓名:");
String e_name = input.nextLine();
System.out.println("请输入薪资:");
Double e_salary = input.nextDouble();
System.out.println("请输入领导编号:");
int manager_id = input.nextInt();
System.out.println("请输入来司日期:");
String e_hiredate = input.next();
System.out.println(e_hiredate);
//格式进行转转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = sdf.parse(e_hiredate + " 11:11:11");
System.out.println(parse);
String format = sdf.format(parse);
boolean flag = dao.insert(e_name,e_salary,format,manager_id);
System.out.println(flag?"员工添加成功":"员工添加失败");
}
private static void showUsers() {
List<User> data = dao.findAll();
System.out.println("所有用户信息如下:");
//获取到数据 遍历输出
for (User datum : data) {
System.out.println(datum.toString());
}
}
private static void dim() {
System.out.println("请输入账号:");
//id是int的
int e_id = input.nextInt();
boolean flag = dao.remove(e_id);
System.out.println(flag?"离职成功":"离职失败");
}
private static void sal() {
System.out.println("请输入账号:");
int e_id = input.nextInt();
System.out.println("请输入要增加的薪酬:");
double e_salary = input.nextDouble();
boolean flag = dao.update(e_id,e_salary);
System.out.println(flag?"恭喜你,加薪成功":"很遗憾,加薪失败");
}
}
运行结果
欢迎来到人事管理系统
请选择:
1.调整薪资 2.离职员工 3.查看所有用户 4.新增员工
MYSQL创建表
版权声明:本文为sun_1238原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。