使用JDBC工具類實(shí)現(xiàn)簡單的登錄管理系統(tǒng)
使用JDBC工具類實(shí)現(xiàn)一個簡單的登錄管理系統(tǒng),供大家參考,具體內(nèi)容如下
實(shí)現(xiàn)要求:
在控制臺實(shí)現(xiàn)一個用戶管理系統(tǒng),包含3個功能:
1.用戶登錄 2.注冊 3.用戶查詢。
啟動程序后,進(jìn)入主菜單選項(xiàng):
輸出:“請選擇您要操作的功能:1.用戶登錄 2.新用戶注冊 3所有用戶查詢: ”
功能說明:
1.用戶登錄:
請用戶輸入用戶名和密碼,接收后,去數(shù)據(jù)庫的users表中查詢是否存在該用戶名。并輸出合理的提示,例如:登錄成功! 用戶名不存在! 密碼錯誤!
不論登錄是否成功,都返回主菜單界面。
2.新用戶注冊 :
請用戶輸入用戶名和密碼,接收后,去數(shù)據(jù)庫的users表中執(zhí)行新增操作。并輸出合理的提示,例如:注冊成功! 用戶名已存在!
3.所有用戶查詢:
該功能必須在用戶登錄后方可查看,如果用戶已經(jīng)登錄成功,即可在控制臺查看所有用戶的所有信息。如果沒有登錄,提示:您還沒有登錄呢,無權(quán)查看用戶信息!
第一步:創(chuàng)建JDBCUtils類和jdbc.properties文件
user=root password=123456 url=jdbc:mysql://localhost:3306/db2?useSSLfalse&serverTimezone=UTC
//1.獲取連接對象 ?2.關(guān)閉連接對象---取代單元測試中的 ?@Before 和 @After 3.實(shí)現(xiàn)登錄驗(yàn)證 public class JDBCUtils { ? ? private static Connection conn; ? ? private static Properties prop; ? ? private ?static PreparedStatement prep; ? ? private static ResultSet rs; ? ? static { ? ? ? ? try { ? ? ? ? //使用類加載器加載jdbc.properties文件,返回一個字節(jié)流,和Properties關(guān)聯(lián)在一起 ? ? ? ? ? ? InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); ? ? ? ? ? ? //創(chuàng)建Properties對象 ? ? ? ? ? ? prop = new Properties(); ? ? ? ? ? ? prop.load(is); ? ? ? ? } catch (Exception e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ? ? } ?? ?//1.獲取連接對象 ? ? public static Connection getConnection(){ ? ? ? ? try { ? ? ? ? ? ? return DriverManager.getConnection(prop.getProperty("url"),prop); ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ? ? ? ? return null; ? ? } ?? ?//2.釋放資源 ? ? public static void close(ResultSet rs, Statement state,Connection conn){ ? ? ? ? if(rs !=null){ ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? rs.close(); ? ? ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(state !=null){ ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? state.close(); ? ? ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(conn !=null){ ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? conn.close(); ? ? ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? 3.//判斷登錄 ? ? public ?static ?boolean login(String user,String password){ ? ? //3.1獲取連接對象 ? ? ? ? Connection conn = JDBCUtils.getConnection(); ? ? ? ? try { ? ? ? ? ?//3.2定義sql ? ? ? ? ? ? String sql="select * from user where username=? and password=?"; ? ? ? ? ? ? //3.3獲取執(zhí)行sql的對象 ? ? ? ? ? ? prep = conn.prepareStatement(sql); ? ? ? ? ? ? //3.3.1 給占位符賦值 ? ? ? ? ? ? prep.setString(1,user); ? ? ? ? ? ? prep.setString(2,password); ? ? ? ? ? ? //3.4執(zhí)行sql ? ? ? ? ? ? ResultSet rs = prep.executeQuery(); ? ? ? ? ? ? return rs.next(); ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } finally{ ? ? ? ? //3.4調(diào)用關(guān)閉連接靜態(tài)方法 ? ? ? ? ?? ?JDBCUtils.close(rs,prep,conn);?? ? ? ? ? ? } ? ? ? ? return false; ? ? } }
第二步:創(chuàng)建測試類:Hello01
public class Hello01 { ? ? public static void main(String[] args) { ? ? ? ? Scanner sc = new Scanner(System.in); ? ? ? ? Connection conn=null; ? ? ? ? PreparedStatement prep=null; ? ? ? ? ResultSet rs=null; ? ? ? ? Statement state=null; ? ? ? ? //判斷是否登錄過,如果沒有登錄,就無法查詢 ? ? ? ? boolean a=false; ? ? ? ? //判斷用戶是否登錄,登錄過就無法再次登錄 ? ? ? ? boolean b=true; ? ? ? ? String name; ? ? ? ? String psw; ? ? ? ? while (true){ ? ? ? ? ? ? System.out.println("請輸入你要執(zhí)行的操作:1.登錄 2.注冊 3.查詢"); ? ? ? ? ? ? int i = sc.nextInt(); ? ? ? ? ? ? switch (i){ ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? if(b){ ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入你的賬號:"); ? ? ? ? ? ? ? ? ? ? ? ? name= sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入你的密碼:"); ? ? ? ? ? ? ? ? ? ? ? ? psw= sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? //JDBCUtils.login(name,psw) 這個方法的返回值是Boolean類型 可以當(dāng)if的條件判斷 ? ? ? ? ? ? ? ? ? ? ? ? if(JDBCUtils.login(name,psw)){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("恭喜您登錄成功"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //登錄成功 a的值變?yōu)閠urn ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a=true; ? ? ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("不好意思登錄失敗,請重新操作?。?!"); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? b=false; ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("您已經(jīng)登錄?。?!"); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入您要注冊的賬號:"); ? ? ? ? ? ? ? ? ? ? ? ? name = sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? conn = JDBCUtils.getConnection(); ? ? ? ? ? ? ? ? ? ? ? ? //開啟事務(wù) ? ? ? ? ? ? ? ? ? ? ? ? conn.setAutoCommit(false); ? ? ? ? ? ? ? ? ? ? ? ? while (true){ ? ? ? ? ? ? ? ? ? ? ? ? String sql = "select * from user where username=?"; ? ? ? ? ? ? ? ? ? ? ? ? prep = conn.prepareStatement(sql); ? ? ? ? ? ? ? ? ? ? ? ? prep.setString(1,name); ? ? ? ? ? ? ? ? ? ? ? ? ?rs = prep.executeQuery(); ? ? ? ? ? ? ? ? ? ? ? ? if(rs.next()){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("用戶名已存在,請重新輸入:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? name = sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請輸入您的密碼:"); ? ? ? ? ? ? ? ? ? ? ? ? psw = sc.next(); ? ? ? ? ? ? ? ? ? ? ? ? String sql1="insert into user values (null,?,?)"; ? ? ? ? ? ? ? ? ? ? ? ? ?prep = conn.prepareStatement(sql1); ? ? ? ? ? ? ? ? ? ? ? ? ?prep.setString(1,name); ? ? ? ? ? ? ? ? ? ? ? ? ?prep.setString(2,psw); ? ? ? ? ? ? ? ? ? ? ? ? ?prep.executeUpdate(); ? ? ? ? ? ? ? ? ? ? ? ? ?//int i1=3/0; ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("恭喜您注冊成功?。?!"); ? ? ? ? ? ? ? ? ? ? ? ? //提交事務(wù) ? ? ? ? ? ? ? ? ? ? ? ? conn.commit(); ? ? ? ? ? ? ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//事務(wù)回滾 ? ? ? ? ? ? ? ? ? ? ? ? ? ? conn.rollback(); ? ? ? ? ? ? ? ? ? ? ? ? } catch (SQLException ex) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ex.printStackTrace(); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? ? ? }finally { ? ? ? ? ? ? ? ? ? ? ? ? JDBCUtils.close(rs,prep,conn); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? //當(dāng)a的值為turn時才可以查詢 否則返回操作頁面 ? ? ? ? ? ? ? ? ? ? if(a){ ? ? ? ? ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ? ? ? ? conn = JDBCUtils.getConnection(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? String sql ="select * from user"; ? ? ? ? ? ? ? ? ? ? ? ? ? ? state = conn.createStatement(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? rs = state.executeQuery(sql); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ArrayList<User> users = new ArrayList<>(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? while (rs.next()){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int id = rs.getInt("id"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String username = rs.getString("username"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String password = rs.getString("password"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? User user = new User(id,username,password); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? users.add(user); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println(user); ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } catch (SQLException e) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? ? ? ? ? } finally { ? ? ? ? ? ? ? ? ? ? ? ? ? ? JDBCUtils.close(rs,state,conn); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請先登錄,在查詢?。?!"); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Kotlin基礎(chǔ)教程之控制流(順序,分支,循環(huán))
這篇文章主要介紹了Kotlin基礎(chǔ)教程之控制流的相關(guān)資料,需要的朋友可以參考下2017-05-05Spring中@ExceptionHandler注解的使用方式
這篇文章主要介紹了Spring中@ExceptionHandler注解的使用方式,@ExceptionHandler注解我們一般是用來自定義異常的,可以認(rèn)為它是一個異常攔截器(處理器),需要的朋友可以參考下2024-01-01Java HttpClient-Restful工具各種請求高度封裝提煉及總結(jié)
這篇文章主要介紹了Java HttpClient-Restful工具各種請求高度封裝提煉及總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10