在 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