JAVA- jdbc

JDBC
学习目标
掌握JDBC的意义和使用
掌握Java的分层开发
为什么需要JDBC
JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力。

JDBC的使用
工作原理

JDBC API:提供供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
DriverManager类
Connection接口
Statement接口
ResultSet接口

DriverManager:依据数据库的不同,管理各种不同的JDBC驱动。
JDBC 驱动:由数据库厂商提供,负责连接各种不同的数据库。

JDBC API主要功能:与数据库建立连接、执行SQL 语句、处理结果。
DriverManager :依据数据库的不同,管理JDBC驱动。
Connection :负责连接数据库并担任传送数据的任务。
Statement :由 Connection 产生、负责执行SQL语句。
ResultSet:负责保存Statement执行后所产生的查询结果。

使用流程
JDBC的使用流程如下:
try {
//1.加载JDBC驱动
Class.forName(JDBC驱动类);
}
… …
try {
//2.与数据库建立连接
Connection con=DriverManager.getConnection(URL,数据库用户名,密码);
//3.发送SQL语句并得到结果
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(“SELECT a, b, c FROM Table1”);
//4.处理返回结果
while (rs.next()) {
int x = rs.getInt(“a”);
String s = rs.getString(“b”);
float f = rs.getFloat(“c”);
}
//5.释放资源
rs.close();
stmt.close();
con.close();
}

数据库访问基类:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**

  • 数据库访问基类
    */
    public class BaseDao {
    //数据库驱动
    private String driver=“com.mysql.jdbc.Driver”;
    //数据库连接地址
    private String url=“jdbc:mysql://localhost:3306/orcl”;
    //数据库用户名
    private String name=“root”;
    //数据库密码
    private String password="";

    public Connection conn;//数据库连接对象
    public PreparedStatement ps;//数据库操作对象
    public ResultSet rs;//存放结果数据

    /**

    • 获取数据库连接
      */
      public Connection getConn(){
      try {
      Class.forName(driver);
      this.conn=DriverManager.getConnection(url,name,password);
      } catch (Exception e) {
      e.printStackTrace();
      }
      return conn;
      }

    public static void main(String[] args) throws Exception {
    //1. 获取连接
    Connection conn=new BaseDao().getConn();
    //2. 执行查询
    String sql=“select * from k_user”;
    PreparedStatement ps=conn.prepareStatement(sql);
    ResultSet rs=ps.executeQuery();
    //3. 循环输出数据
    while(rs.next()){
    System.out.println(“用户名是:”+rs.getString(“username”));
    }
    }

}
分层开发
为什么要使用分层开发
分层开发是一种化大为小,分而治之的软件开发方法。
例如,一所学校被分为若干学院,各学院下面再分若干专业,这样的分层更易于管理。

一道好的菜放到客户的餐桌上需要经过以下几层:

制造一辆汽车需要经过以下几层:

分层开发的特点及好处
分层的特点:
每一层都有自己的职责。
上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能。
上一层调用下一层的功能,下一层不能调用上一层功能。

分层开发的好处:
各层专注于自己功能的实现,便于提高质量。
便于分工协作,提高开发效率。
便于代码复用。
便于程序扩展。
Java中的分层开发
不同层之间通过实体类传输数据:

DAO,Data Access Object(数据存取对象),位于业务逻辑和持久化数据之间,实现对持久化数据的访问。
DAO起着转换器的作用,把实体类转换为数据库中的记录:

DAO模式的作用:
隔离业务逻辑代码和数据访问代码
隔离不同数据库的实现

编码实操
使用JDBC分层开发,完成完成用户登录、用户数据增删改查功能。
数据访问层代码
基类BaseDao的源码:
import java.sql.*;
/**

  • Dao层的基类,获取数据库连接
    */
    public class BaseDao {

private String driver = “com.mysql.jdbc.Driver”;
private String url = “jdbc:mysql://localhost:3306/orcl”;
private String name = “root”;
private String pass = “123456”;

public Connection conn;
public PreparedStatement ps;
public ResultSet rs;

/**

  • 得到数据库连接
    */
    public Connection getConn() {
    try {
    Class.forName(driver);
    this.conn = DriverManager.getConnection(url, name, pass);
} catch (Exception e) {
  e.printStackTrace();
}
return conn;

}

/** 测试连接 */
public static void main(String[] args) {
BaseDao bd = new BaseDao();
bd.getConn();
}

/** 关闭资源 **/
public void closeAll() {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (ps != null) {
ps.close();
ps = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}

/** 增删改的公用方法 **/
public int execSql(String sql, String param[]) {
int ret = 0;
this.conn = this.getConn();
try {
this.ps = conn.prepareStatement(sql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
ps.setString(i + 1, param[i]);
}

  }
  ret = ps.executeUpdate();
} catch (SQLException e) {
  e.printStackTrace();
} finally {
  this.closeAll();
}
return ret;

}
}
UserDao的源码:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.stock.entity.User;
/**

  • 与用户相关的数据库操作
    */
    public class UserDao extends BaseDao{

/**

  • 用户登录
  • @param userNo 用户名(编号)
  • @param pwd 密码
  • @return 用户对象
    */
    public User login(String userNo, String pwd) {
    String sql = “select * from k_user where userno=’”+userNo+"’ And pwd=’"+pwd+"’";
    this.conn=this.getConn();
    User user=null;
    try {
    this.ps=conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    user = new User();
    user.setId(rs.getInt(“id”));
    user.setUsername(rs.getString(“username”));
    user.setUserno(rs.getString(“userno”));
    user.setPwd(rs.getString(“pwd”));
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    this.closeAll();
    return user;
    }

/**

  • 查询用户列表
  • @return 用户集合
    */
    public List findUserList() {
    String sql = “select * from k_user order by id asc”;
    this.conn=this.getConn();
    List list = new ArrayList<>();
    try {
    this.ps=conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    User user = new User();
    user.setId(rs.getInt(“id”));
    user.setUsername(rs.getString(“username”));
    user.setUserno(rs.getString(“userno”));
    user.setPwd(rs.getString(“pwd”));
    user.setAge(rs.getInt(“age”));
    user.setSex(rs.getString(“sex”));
    user.setPosition(rs.getString(“position”));
    list.add(user);
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return list;
    }

/**

  • 添加用户
  • @param user 用户对象
  • @return 是否添加成功
    */
    public boolean addUser(User user) {
    String sql = “insert into k_user(username,userno,pwd) values(’”+user.getUsername()+"’,’"+user.getUserno()+"’,’"+user.getPwd()+"’)";
    this.conn=this.getConn();
    try {
    this.ps=conn.prepareStatement(sql);
    int count=ps.executeUpdate();
    if(count>0){
    return true;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return false;
    }

/**

  • 删除用户
  • @param id 用户ID
  • @return 是否删除成功
    */
    public boolean deleteUser(String id) {
    String sql = “delete from k_user where id=”+id;
    this.conn=this.getConn();
    try {
    this.ps=conn.prepareStatement(sql);
    int count=ps.executeUpdate();
    if(count>0){
    return true;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return false;
    }

}
User实体类:
public class User {

private int id;//用户ID
private String userno;//用户编号
private String username;//用户姓名
private String pwd;//密码
private String sex;//性别
private int age;//年龄
private String position;//职位

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getPosition() {
return position;
}

public void setPosition(String position) {
this.position = position;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUserno() {
return userno;
}

public void setUserno(String userno) {
this.userno = userno;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}
}

业务逻辑层代码
UserService类:
import java.util.List;

import com.stock.dao.UserDao;
import com.stock.entity.User;
/**

  • 业务类
  • 用户相关的业务操作
    */
    public class UserService {

UserDao userDao=new UserDao();
/**

  • 用户登录
  • @param userNo 用户名(编号)
  • @param pwd 密码
  • @return 用户对象
    /
    public User login(String userNo, String pwd) {
    return userDao.login(userNo,pwd);
    }
    /
    *
  • 查询用户列表
  • @return 用户集合
    /
    public List findUserList() {
    return userDao.findUserList();
    }
    /
    *
  • 添加用户
  • @param user 用户对象
  • @return 是否添加成功
    /
    public boolean addUser(User user) {
    return userDao.addUser(user);
    }
    /
    *
  • 删除用户
  • @param id 用户ID
  • @return 是否删除成功
    */
    public boolean deleteUser(String id) {
    return userDao.deleteUser(id);
    }

}
用户操作类:
import java.util.List;
import java.util.Scanner;

/**

  • 用户视图层
  • 接收用户的选择并进行处理
    */
    public class UserView {

UserService userService = new UserService();
Scanner sc = new Scanner(System.in);

/**

  • 用户登录
    */
    public User login() {
    System.out.println(“请输入用户名”);
    String userNo = sc.next();
    System.out.println(“请输入密码:”);
    String pwd = sc.next();
User user = userService.login(userNo, pwd);
if (user != null) {
  System.out.println("登录成功!");
} else {
  System.out.println("登录失败!!!");
}
return user;

}

/**

  • 显示所有用户信息
    */
    public void showUserList() {
    System.out.println(“所有用户信息如下:”);
    List list = userService.findUserList();
    System.out.println(“用户ID\t\t用户代码\t\t用户姓名\t\t密码\t\t性别\t\t年龄\t\t职位”);
for (User user : list) {
  System.out.println(user.getId() + "\t\t" + user.getUserno() + "\t\t"
      + user.getUsername() + "\t\t" + user.getPwd() + "\t\t"
      + user.getSex() + "\t\t" + user.getAge() + "\t\t"
      + user.getPosition());
}

}

public void addUser() {
System.out.println(“输入学号:”);
String userNo = sc.next();
System.out.println(“输入用户名:”);
String userName = sc.next();
System.out.println(“输入密码:”);
String pwd = sc.next();

User user = new User();
user.setUserno(userNo);
user.setUsername(userName);
user.setPwd(pwd);

if (userService.addUser(user)) {
  System.out.println("添加用户成功");
} else {
  System.out.println("添加用户失败");
}

}

public void deleteUser() {
System.out.println(“请输入要删除的用户id:”);
String id = sc.next();
if (userService.deleteUser(id)) {
System.out.println(“删除成功。”);
} else {
System.out.println(“删除失败!!!”);
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值