最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用JDBC工具類(lèi)實(shí)現(xiàn)簡(jiǎn)單的登錄管理系統(tǒng)

 更新時(shí)間:2022年02月24日 10:02:18   作者:勤奮的小鎮(zhèn)青年、  
這篇文章主要為大家詳細(xì)介紹了使用JDBC工具類(lèi)實(shí)現(xiàn)簡(jiǎn)單的登錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

使用JDBC工具類(lèi)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄管理系統(tǒng),供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)要求:

在控制臺(tái)實(shí)現(xiàn)一個(gè)用戶管理系統(tǒng),包含3個(gè)功能:

1.用戶登錄  2.注冊(cè)  3.用戶查詢。

啟動(dòng)程序后,進(jìn)入主菜單選項(xiàng):

輸出:“請(qǐng)選擇您要操作的功能:1.用戶登錄  2.新用戶注冊(cè) 3所有用戶查詢: ”

功能說(shuō)明:

1.用戶登錄:

請(qǐng)用戶輸入用戶名和密碼,接收后,去數(shù)據(jù)庫(kù)的users表中查詢是否存在該用戶名。并輸出合理的提示,例如:登錄成功!  用戶名不存在! 密碼錯(cuò)誤!

不論登錄是否成功,都返回主菜單界面。

2.新用戶注冊(cè) :

請(qǐng)用戶輸入用戶名和密碼,接收后,去數(shù)據(jù)庫(kù)的users表中執(zhí)行新增操作。并輸出合理的提示,例如:注冊(cè)成功!  用戶名已存在! 

3.所有用戶查詢:

該功能必須在用戶登錄后方可查看,如果用戶已經(jīng)登錄成功,即可在控制臺(tái)查看所有用戶的所有信息。如果沒(méi)有登錄,提示:您還沒(méi)有登錄呢,無(wú)權(quán)查看用戶信息!

第一步:創(chuàng)建JDBCUtils類(lèi)和jdbc.properties文件

user=root
password=123456
url=jdbc:mysql://localhost:3306/db2?useSSLfalse&serverTimezone=UTC
//1.獲取連接對(duì)象 ?2.關(guān)閉連接對(duì)象---取代單元測(cè)試中的 ?@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 {
? ? ? ? //使用類(lèi)加載器加載jdbc.properties文件,返回一個(gè)字節(jié)流,和Properties關(guān)聯(lián)在一起
? ? ? ? ? ? InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
? ? ? ? ? ? //創(chuàng)建Properties對(duì)象
? ? ? ? ? ? prop = new Properties();
? ? ? ? ? ? prop.load(is);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
?? ?//1.獲取連接對(duì)象
? ? 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獲取連接對(duì)象
? ? ? ? Connection conn = JDBCUtils.getConnection();
? ? ? ? try {
? ? ? ? ?//3.2定義sql
? ? ? ? ? ? String sql="select * from user where username=? and password=?";
? ? ? ? ? ? //3.3獲取執(zhí)行sql的對(duì)象
? ? ? ? ? ? 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)建測(cè)試類(lèi):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;
? ? ? ? //判斷是否登錄過(guò),如果沒(méi)有登錄,就無(wú)法查詢
? ? ? ? boolean a=false;
? ? ? ? //判斷用戶是否登錄,登錄過(guò)就無(wú)法再次登錄
? ? ? ? boolean b=true;
? ? ? ? String name;
? ? ? ? String psw;
? ? ? ? while (true){
? ? ? ? ? ? System.out.println("請(qǐng)輸入你要執(zhí)行的操作:1.登錄 2.注冊(cè) 3.查詢");
? ? ? ? ? ? int i = sc.nextInt();
? ? ? ? ? ? switch (i){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? if(b){
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入你的賬號(hào):");
? ? ? ? ? ? ? ? ? ? ? ? name= sc.next();
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入你的密碼:");
? ? ? ? ? ? ? ? ? ? ? ? psw= sc.next();
? ? ? ? ? ? ? ? ? ? ? ? //JDBCUtils.login(name,psw) 這個(gè)方法的返回值是Boolean類(lèi)型 可以當(dāng)if的條件判斷
? ? ? ? ? ? ? ? ? ? ? ? if(JDBCUtils.login(name,psw)){
? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("恭喜您登錄成功");
? ? ? ? ? ? ? ? ? ? ? ? ? ? //登錄成功 a的值變?yōu)閠urn ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? a=true;
? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("不好意思登錄失敗,請(qǐng)重新操作?。。?);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? b=false;
? ? ? ? ? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("您已經(jīng)登錄?。?!");
? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入您要注冊(cè)的賬號(hào):");
? ? ? ? ? ? ? ? ? ? ? ? name = sc.next();
? ? ? ? ? ? ? ? ? ? ? ? conn = JDBCUtils.getConnection();
? ? ? ? ? ? ? ? ? ? ? ? //開(kāi)啟事務(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("用戶名已存在,請(qǐng)重新輸入:");
? ? ? ? ? ? ? ? ? ? ? ? ? ? name = sc.next();
? ? ? ? ? ? ? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入您的密碼:");
? ? ? ? ? ? ? ? ? ? ? ? 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("恭喜您注冊(cè)成功!??!");
? ? ? ? ? ? ? ? ? ? ? ? //提交事務(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時(shí)才可以查詢 否則返回操作頁(yè)面
? ? ? ? ? ? ? ? ? ? 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("請(qǐng)先登錄,在查詢?。?!");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之棧

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之棧

    棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱(chēng)為棧頂,相對(duì)地,把另一端稱(chēng)為棧底,棧是基礎(chǔ)中的基礎(chǔ),如果你還沒(méi)掌握透徹就來(lái)接著往下看吧
    2022-02-02
  • 深入解析@InitBinder注解的功能與應(yīng)用

    深入解析@InitBinder注解的功能與應(yīng)用

    這篇文章主要介紹了深入解析@InitBinder注解的功能與應(yīng)用,從字面意思可以看出這個(gè)的作用是給Binder做初始化的,被此注解的方法可以對(duì)WebDataBinder初始化,webDataBinder是用于表單到方法的數(shù)據(jù)綁定的,需要的朋友可以參考下
    2023-10-10
  • windows7配置java環(huán)境變量的圖文教程

    windows7配置java環(huán)境變量的圖文教程

    這篇文章主要介紹了windows7配置java環(huán)境變量的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例

    Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • springboot整合vue實(shí)現(xiàn)上傳下載文件

    springboot整合vue實(shí)現(xiàn)上傳下載文件

    這篇文章主要為大家詳細(xì)介紹了springboot整合vue實(shí)現(xiàn)上傳下載文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • JAVA實(shí)現(xiàn)caesar凱撒加密算法

    JAVA實(shí)現(xiàn)caesar凱撒加密算法

    Carsar加密算法是最簡(jiǎn)單的加密算法,原理是把一個(gè)字母在字母表中移動(dòng)相應(yīng)的位置,比如輸入a,將其移動(dòng)3位,經(jīng)過(guò)Caesar加密后輸出的d,位置可以循環(huán)移動(dòng),輸入x,則輸出a
    2014-01-01
  • Java ArrayDeque使用方法詳解

    Java ArrayDeque使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java ArrayDeque的使用方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • springboot整合httpClient代碼實(shí)例

    springboot整合httpClient代碼實(shí)例

    這篇文章主要介紹了springboot整合httpClient代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • intellij idea 2021.2 打包并上傳運(yùn)行spring boot項(xiàng)目的詳細(xì)過(guò)程(spring boot 2.5.4)

    intellij idea 2021.2 打包并上傳運(yùn)行spring boot項(xiàng)目的詳細(xì)過(guò)程(spring boot 2

    這篇文章主要介紹了intellij idea 2021.2 打包并上傳運(yùn)行一個(gè)spring boot項(xiàng)目(spring boot 2.5.4),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之AC自動(dòng)機(jī)算法的實(shí)現(xiàn)

    AC自動(dòng)機(jī)算法常被認(rèn)為是Trie樹(shù)+KMP算法的結(jié)合體,它是一個(gè)多模式匹配算法,在模式匹配領(lǐng)域被廣泛應(yīng)用。本文將詳細(xì)為大家介紹AC自動(dòng)機(jī)的原理與實(shí)現(xiàn)方法,感興趣的可以了解一下
    2022-12-12

最新評(píng)論

鸡泽县| 利辛县| 白沙| 和平区| 常州市| 洪泽县| 湖南省| 英山县| 集贤县| 泗洪县| 无锡市| 台中县| 墨玉县| 海原县| 鹤庆县| 英德市| 临海市| 彰化县| 齐河县| 霍州市| 岗巴县| 信阳市| 长宁区| 吐鲁番市| 甘孜县| 长兴县| 中山市| 芷江| 云阳县| 公安县| 子长县| 屏南县| 德令哈市| 邵东县| 彭水| 肥东县| 炎陵县| 巧家县| 霍林郭勒市| 东宁县| 徐闻县|