Java ----JDBC を使用して登録およびログイン関数を開発する

目次

1. 開発要件

2. 環境構築

2.1、jarパッケージを構成する

2.2、jdbc.properties ファイルを構成する

2.3. MVC 3 層パッケージの作成

2.4、JDBCUtil クラスの保存

2.5、mysqlを作成する

3. コード開発

3.1、Web レイヤーの開発

3.2、サービス層の開発

3.3、dao層の開発

3.4. ログイン機能のテスト

3.5. 登録機能テスト


 

1. 開発要件

1. ログイン機能を完了します。
2. 登録機能を完了します。
3. 登録完了と同時に同じユーザー名を登録することはできません。

2. 環境構築

2.1、jarパッケージを構成する

まず、Web プロジェクトのプロジェクトを作成し、Web パッケージの WEB-INF 配下に lib パッケージを作成し、その中に mysql 接続 jar パッケージを配置します。mysql5 バージョンと mysql8 バージョンの jar パッケージはここで提供されます。 mysql のバージョンに対応し、mysql5 シリーズのバージョンの場合は 5.16 jar パッケージを使用し、mysql8 シリーズのバージョンの場合は 8.0.16 バージョンの jar パッケージを使用します。

リンク: https://pan.baidu.com/s/1loxaN41BXlfdePT_8DDBDw 
抽出コード: 388i

以下のように設定します 

注: 必ず入れた後にインポートしてください。jar パッケージを右クリックし、[ライブラリの追加] をクリックしてインポートします。

2.2、jdbc.properties ファイルを構成する

src ディレクトリに新しい jdbc.properties ファイルを作成し、次の内容を追加します。

jdbc.className=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test5
jdbc.username=root
jdbc.password=xxx

2.3. MVC 3 層パッケージの作成

開発では MVC 3 層アーキテクチャを使用する必要があるため、図に示すように、対応するパッケージを作成する必要があります。

3層とはdao層、サービス層、Web層で、Bean層はJavaBeanというエンティティクラスを格納する層、utilはツールクラスを格納するパッケージです。

2.4、JDBCUtil クラスの保存

 次のコードを util パッケージの JDBCUtil クラスに追加します。

public class JDBCUtil {
    public JDBCUtil() {
    }

    private static String className;
    private static String url;
    private static String username;
    private static String password;
    private static Connection conn = null;

    static {
        Properties pro = null;
        InputStream is = null;
        try {
            is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            pro = new Properties();
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        className = pro.getProperty("jdbc.className");
        url = pro.getProperty("jdbc.url");
        username = pro.getProperty("jdbc.username");
        password = pro.getProperty("jdbc.password");
        //加载驱动
        try {
            Class.forName(className);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //获取连接
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        return conn;
    }

    public static void close(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) {
                conn.close();
                conn = null;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(Statement stmt, Connection conn) {
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.5、mysqlを作成する

 テーブル t_user を作成する

CREATE TABLE `t_user` (
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ご自身でデータを追加してください

3. コード開発

3.1、Web レイヤーの開発

フロントエンドから送信されるデータをシミュレートするために、ここではスキャナーを使用してデータを取得しますが、実際の開発ではWeb層でサーブレット技術を使用してフロントエンドのデータを取得します。

public class UserWeb {
    public static void main(String[] args) {
        //创建service对象
        UserService userService=new UserServiceImpl();
        System.out.println("请选择选项");
        System.out.println("1-----登录");
        System.out.println("2-----注册");
        Scanner sc =new Scanner(System.in);
        int i = sc.nextInt();
        switch (i){
            case 1:
                System.out.println("请输入账号");
                Scanner sc1=new Scanner(System.in);
                String username = sc1.nextLine();
                System.out.println("请输入密码");
                Scanner sc2=new Scanner(System.in);
                String password = sc2.nextLine();
                //创建user对象 把用户输入的账号密码封装对象
                User user=new User();
                user.setUsername(username);
                user.setPassword(password);
                boolean flag1 = userService.login(user);

                if(flag1==true){
                    System.out.println("登录成功");
                }else {
                    System.out.println("登录失败");
                }
                break;
            case 2:
                System.out.println("请输入注册账号");
                Scanner register1=new Scanner(System.in);
                String s1 = register1.nextLine();
                System.out.println("请输入注册密码");
                Scanner register2=new Scanner(System.in);
                String s2 = register2.nextLine();
                User user1=new User();
                user1.setUsername(s1);
                user1.setPassword(s2);
                boolean register = userService.register(user1);
                if(register){
                    System.out.println("注册成功");
                }else{
                    System.out.println("注册失败,用户已存在");
                }
                break;
            default:
                System.out.println("你输入的有误");
        }
    }

}

3.2、サービス層の開発

サービス層も、dao 層と同様、インターフェースおよび実装クラスです。

UserServiceインターフェース

public interface UserService {
    //登录功能
    public boolean login(User user);
    //注册功能
    public boolean register(User user);
}

UserServiceImpl実装クラス 

public class UserServiceImpl implements UserService {
    //登录功能
    @Override
    public boolean login(User user) {
        //创建userDao对象
        UserDao userDao=new UserDaoImpl();
        //调用login方法把参数user传递过去,得到一个返回值为user_data
        User user_data = userDao.login(user);
        //判断user_data是否为空
        if(user_data!=null){
            //不为空  证明查询出了用户 登录成功
            return true;
        }
        //否则登录失败
        return false;
    }

    //注册功能
    @Override
    public boolean register(User user) {
        UserDao userDao=new UserDaoImpl();
        //调用userDao中的queryByName方法里面传递一个用户名 得到返回值user1
        User user1 = userDao.queryByName(user.getUsername());
        //判断user1是否为空 
        if(user1!=null){
            //不为空 证明用户存在 不能注册
            return  false;
        }else{
            //为空 则可以注册 调用注册方法
            Boolean register = userDao.register(user);
            //判断返回值是否注册成功
            if(register){
                //成功则返回true
                return true;
            }else{
                //否则返回false
                return false;
            }
        }
    }
}

3.3、dao層の開発

UserDao インターフェースを作成する

public interface UserDao {
    //登录方法
    public User login(User user);
    //注册方法
    public Boolean register(User user);
    //查询用户方法
    public User queryByName(String username);
}

dao 層に impl パッケージを作成し、インターフェースの実装クラスを格納します。

クラスコードを実装する

public class UserDaoImpl implements UserDao {
    //登录功能
    @Override
    public User login(User user) {
        //调用工具类获取连接对象
        Connection conn = JDBCUtil.getConnection();
        //初始化对象
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            // Statement stmt = conn.createStatement();
            // String sql="select * from t_user where username='"+user.getUsername()+"' and password='"+user.getPassword()+"'";
            // ResultSet rs = stmt.executeQuery(sql);
            //解决sql注入问题
            String sql = "select * from t_user where username= ? and password = ?";
            //把sql语句传递给pstmt对象
            pstmt = conn.prepareStatement(sql);
            //给占位符赋值
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            //调用查询方法
            rs = pstmt.executeQuery();
            //对结果进行遍历
            while (rs.next()) {
                String username = rs.getString("username");
                String password = rs.getString("password");
                User user1 = new User();
                user1.setUsername(username);
                user1.setPassword(password);
                //返回结果
                return user1;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtil.close(rs, pstmt, conn);
        }
        return null;
    }

    //注册功能
    @Override
    public Boolean register(User user) {
        Connection conn = JDBCUtil.getConnection();
        // Statement stmt = null;
        PreparedStatement pstmt= null;
        // stmt = conn.createStatement();
        // String sql = "select * from t_user where username='" + user.getUsername() + "'";
        // rs = stmt.executeQuery(sql);
        try {
            // String sql = "insert into t_user value('" + user.getUsername() + "','" + user.getPassword() + "')";
            String sql2 = "insert into t_user value(?,?)";
            pstmt = conn.prepareStatement(sql2);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            int i;
            i = pstmt.executeUpdate();
            if (i == 1) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(pstmt, conn);
        }
        //以上try里面出现错误直接返回false
        return false;
    }

    @Override
    public User queryByName(String username) {
        Connection conn = JDBCUtil.getConnection();
        ResultSet rs;
        PreparedStatement pstmt;
        String sql1 = "select * from t_user where username=?";
        try {
            pstmt = conn.prepareStatement(sql1);
            pstmt.setString(1, username);
            rs = pstmt.executeQuery();
            while(rs.next()){
                String username1 = rs.getString("username");
                String password = rs.getString("password");
                User user=new User();
                user.setUsername(username1);
                user.setPassword(password);
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

3.4. ログイン機能のテスト

ユーザーウェブを実行する

 

3.5. 登録機能テスト

 

 

おすすめ

転載: blog.csdn.net/select_myname/article/details/126721984