在 IDEA 中连接数据库实现增删改查,使用dao封装数据库操作+bean封装实体类+util封装数据库连接与释放
主要内容
利用SQLyog图形化工具建立数据库
数据库存储工具为MySQL,通过图形化工具SQLyog(亦可通过Navicat图形化工具)在数据库建立需要使用的数据库。数据库名为demo02_jdbc,两张表为管理员表admin、用户表user,如下(记得保存):
管理员admin表:
用户user表:
具体代码搭建
以下对具体的封装代码简单介绍。代码构成后的结构如下:
bean目录下的 用户实体类User
作用:封装用户实体类
在接下来的主函数Test中可以看到,有关管理员表的操作并未进行封装,可以在主函数中查看具体的JDBC连接数据库的七个步骤,方便理解。同时只对用户类进行封装也方便对整体结构的理解。
package bean;
/**
* 实体类模型
*/
public class User {
private int uid; //用户id
private String username; //用户名
private String password; //用户密码
//构造方法
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
}
//get and set
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "{" +
"用户编号:" + uid +
", 用户姓名:" + username +
", 用户密码:" + password +
'}';
}
}
util中对数据库的连接与释放的封装
对数据库的连接与释放封装在类DBUtil中,便于在dao中的数据库具体操作 对数据库连接与释放的调用。
package util;
import java.sql.*;
public class DBUtil {
public DBUtil() {
}
private static String driverName = "com.mysql.cj.jdbc.Driver"; //JDBC驱动
private static String userName = "root";
private static String userPwd = "123";
private static String dbName = "demo02_jdbc";
private static String url1 = "jdbc:mysql://localhost:3306/" + dbName;
private static String url2 = "?user=" + userName + "&password=" + userPwd;
private static String url3="&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false";
private static String url = url1 + url2 + url3; //JDBC的 url
//private static String url= "jdbc:mysql://localhost:3306/";
/**
* Task:建立数据库的连接
* @return
*/
public static Connection DBConnection(){
try {
Class.forName(driverName); //1.加载JDBC驱动
Connection con = DriverManager.getConnection(url,userName,userPwd); //2.通过url建立JDBC的连接
return con;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* Task:关闭连接、释放资源
* @param con
* @param pstm
* @param rs
*/
public static void DBClose(Connection con, PreparedStatement pstm, ResultSet rs){ //7.关闭连接,释放资源
try {
if (rs != null) {
rs.close();
}
if (pstm != null) {
pstm.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Interface中数据库操作的接口层方法
主要是对数据库的增删改查、以及查询全部用户。
package Interface;
import bean.User;
import java.util.List;
public interface Operation {
public abstract int create() throws Exception;
public abstract int remove() throws Exception;
public abstract int update() throws Exception;
public abstract User find(User user) throws Exception;
public abstract List<User> findAll() throws Exception;
}
dao层对数据库操作的具体方法
对数据库的增删改查的具体方法。具体的逻辑层的实现有待修改,但代码正确,可以运行。
package dao;
import Interface.Operation;
import bean.User;
import util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class UserDao implements Operation {
//数据库操作语句
protected static String ELEMENTS="username,userpwd";
protected static String INSERT_SQL="insert into user ("+ELEMENTS+")"+"values (?,?)"; //插入人员姓名及密码
protected static String DELETE_SQL ="delete from user where username=?"; //按照人员姓名删除人员
protected static String UPDATE_SQL="update user set userpwd=? where username=?"; //按照人员姓名修改密码
protected static String SELECT_SQL="select "+ELEMENTS+" from user where username=?"; //按照人员姓名查找人员
protected static String SELECT_ALL="select * from user";
Connection con=null;
PreparedStatement prepStmt=null;
ResultSet rs=null;
/**
* Task:增加新的登陆成员
* @return 返回执行了sql语句后被影响到的行数
* @throws Exception
*/
@Override
public int create() throws Exception {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入需要增加人员的姓名:");
String username=scanner.nextLine();
System.out.print("请输入需要添加人员的密码:");
String userpwd=scanner.nextLine();
int n=0; //返回执行了sql语句后被影响到的行数
try{
con= DBUtil.DBConnection();
prepStmt =con.prepareStatement(INSERT_SQL);
prepStmt.setString(1,username);
prepStmt.setString(2,userpwd);
n=prepStmt.executeUpdate();
} catch(Exception e){
e.printStackTrace();
} finally{
DBUtil.DBClose(con,prepStmt,rs);
}
return n;
}
/**
*Task:执行删除操作
* @return 返回执行了sql语句后被影响到的行数
* @throws Exception
*/
@Override
public int remove() throws Exception {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入需要删除人员的姓名:");
String username=scanner.nextLine();
int n=0;
try{
con= DBUtil.DBConnection();
prepStmt =con.prepareStatement(DELETE_SQL);
prepStmt.setString(1,username);
n=prepStmt.executeUpdate();
} catch(Exception e){
e.printStackTrace();
} finally{
DBUtil.DBClose(con,prepStmt,rs);
}
return n;
}
/**
* Task:执行更新操作
* @return 返回执行了sql语句后被影响到的行数
* @throws Exception
*/
@Override
public int update() throws Exception {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入需要修改人员的姓名:");
String username=scanner.nextLine();
System.out.print("请输入新密码:");
String userpwd=scanner.nextLine();
//
int n=0;
try{
con= DBUtil.DBConnection();
prepStmt =con.prepareStatement(UPDATE_SQL);
prepStmt.setString(1,userpwd);
prepStmt.setString(2,username);
n=prepStmt.executeUpdate(); //
} catch(Exception e){
e.printStackTrace();
} finally{
DBUtil.DBClose(con,prepStmt,rs);
}
return n;
}
/**
* Task:按人员名字查找
* @param user 以User作为作为形参
* @return
* @throws Exception
*/
@Override
public User find(User user) throws Exception {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入需要查询人员的姓名:");
String username=scanner.nextLine();
//ArrayList<User> arrayList=new ArrayList<User>();
try{
con= DBUtil.DBConnection();
prepStmt =con.prepareStatement(SELECT_SQL);
prepStmt.setString(1,username);
rs=prepStmt.executeQuery(); //返回执行了查询语句的结果
if(rs.next()){
user=new User();
user.setUsername(rs.getString(1));
user.setPassword(rs.getString(2));
//arrayList.add(user1);
}
} catch(Exception e){
e.printStackTrace();
} finally{
DBUtil.DBClose(con,prepStmt,rs);
}
return user;
}
/**
* Task:查询全部用户
* @return
* @throws Exception
*/
@Override
public List<User> findAll() throws Exception {
try{
con=DBUtil.DBConnection();
prepStmt=con.prepareStatement(SELECT_ALL);
rs=prepStmt.executeQuery();
List<User> list=new ArrayList<>();
while (rs.next()){
User user=new User();
user.setUid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
list.add(user);
//return list;
}
System.out.println(list);
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtil.DBClose(con,prepStmt,rs);
}
return null;
}
}
主函数类Test
在主函数中主要是对管理员的登陆操作的介绍,在主函数中未对数据库的操作进行封装,可以方便对连接数据库的步骤的理解。
import bean.User;
import dao.UserDao;
import util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入管理员用户名:");
String adminname=scanner.nextLine();
System.out.print("请输入管理员密码:");
String adminpwd=scanner.nextLine();
Connection con=null;
PreparedStatement prepStmt=null;
ResultSet rs=null;
boolean flag=false; //作为是否登陆成功的标志
try{
con= DBUtil.DBConnection(); //1.加载JDBC驱动 2.通过url建立JDBC的连接
String SQL="select adminname from admin where adminname=? and adminpwd=?"; //3.创建SQL语句
prepStmt=con.prepareStatement(SQL); //4.获取对象
prepStmt.setString(1,adminname);
prepStmt.setString(2,adminpwd);
rs=prepStmt.executeQuery(); //5.执行SQL并返回结果
while(rs.next()) //6.处理结果
{
flag=true;
}
} catch(Exception e){
e.printStackTrace();
} finally{
DBUtil.DBClose(con, prepStmt, rs); //7.关闭连接,释放资源
}
if(flag){
System.out.println("登陆成功!");
UserDao userDao=new UserDao();
System.out.println("请选择操作:1.增加人员 2.删除人员 3.修改人员密码 4.查询人员 5.查询全部人员");
int choose; //输入数值以选择操作
int sign; //作为执行返回的标志
Scanner scanner1=new Scanner(System.in);
System.out.print("请输入选择:");
choose=scanner1.nextInt();
while (true){
switch (choose) //选择操作
{
case 1: //增加
try{
sign=userDao.create();
if(sign==1){System.out.println("增加人员成功!");}
}catch (Exception e){
System.out.println("增加失败");
}
break;
case 2: //删除
try{
sign=userDao.remove();
if(sign==1){System.out.println("删除人员成功!");}
}catch (Exception e){
System.out.println("删除失败");
}
break;
case 3: //修改
try{
sign=userDao.update();
if(sign==1){System.out.println("修改人员密码成功!");}
}catch (Exception e){
System.out.println("修改失败");
}
break;
case 4: //查询
User users=new User();
try {
users=userDao.find(users);
if(users==null){
System.out.println("无相应值,查询失败!");
}else {
String un=users.getUsername();
String ps=users.getPassword();
System.out.print("查找成功!"+" ");
System.out.println("用户名:"+un+",密码:"+ps);
}
}catch (Exception e){
System.out.println("查询失败!");
}
break;
case 5: //查询全部
List<User> userList=new ArrayList<>();
try {
userList=userDao.findAll();
}catch (Exception e){
System.out.println("查询全部失败!");
}
break;
default:System.out.println("选择错误!!!");
}
Scanner scanner2=new Scanner(System.in);
System.out.print("请输入选择:");
choose=scanner2.nextInt();
}
}else {
System.out.println("用户名或密码错误!");
}
//System.out.println();
}
}
在IDEA中连接数据库MySQL
特别注意先在src目录下创建一个lib包,将数据库驱动的jar包放在此包中,如下图:(注意MySQL 的版本,在这使用的是8.0.15)
在IDEA中连接数据库MySQL的具体操作配置如下:
- 如图在IDEA右边找到Database,打开后点击加号(+)找到数据库MySQL,点击
- 为数据库命名demo02(可以随便命名,无要求),并填入以下信息,注意用户名和密码的个人处理.
- 点击Test Connection按键,若出现如下,则测试连接成功。
- 测试连接成功后点击Apply,点击OK。 可以在IDEA中打开数据库如下:
在数据库中插入数据
管理员表:
用户表:
源码下载
到此可以测试连接,并测试数据库的有关操作!
源码地址:https://download.csdn.net/download/qq_43524683/11265125