JDBC IDEA 连接使用MySQL+用户登录demo

JDBC IDEA 连接使用

JDBC IDEA 连接使用MySQL

背景知识jdbc

JDBC简介

@小猴子monkey1024,JDBC简介源自小猴子的博客,感谢
什么是JDBC
JDBC是java database connectivity的缩写,是SUN公司提供的一套操作数据库的标准规范。JDBC提供一些操作数据的API,开发者可以在java中使用这些API操作数据库,实现对表中数据的增删改查操作,JDBC相当于java和数据库之间的一座桥梁。
SUN公司制定了JDBC标准,各大数据库厂商会提供数据库驱动现这个标准,这样java才可以通过JDBC来操作实现了这个标准的数据库。如果将JDBC看做是接口的话,数据库厂商提供的数据库驱动就是这个接口的实现类。各个数据库厂商会将各自的数据库驱动打成jar包对外发布,开发者在使用时需要下载与当前数据库匹配的数据库驱动jar包。
JDBC规范让Java程序和数据库驱动实现了松耦合,使切换不同的数据库变得更加简单。

JDBC规范

JDBC的四个核心接口
DriverManager:用于注册驱动并创建符合该驱动的数据库的连接。
Connection: 表示与数据库创建的连接对象,即一个connection对应着一个会话,相当于在mysql workbench中打开了一个连接。
Statement: 操作数据库sql语句的对象,有个两个实现类:Statement和PreparedStatement(常用)。
ResultSet: 从数据库中查询的结果集。
基本上通过使用上面4个接口就能使用java实现对数据库的增删改查了。

JDBC四个核心对象

IDEA 实现 jdbc 连接mysql
在setting --plugins–加载 junit generator,
在需要使用junit测试的 方法,加上 @Test ,或者右键,go to --test ;

1.注册驱动 Class.forName(“com.mysql.jdbc.Driver”);
2.建立连接 Connection conn = DriverManager.getConnection(url,user,password);
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/testcopy”, “root”, “root”);
3. 建立操作对象 Statement stmt = conn. createStatement();
4.对象执行sql语句 stmt.update(" sql")
结果接收 ResultSet rs = stmt.executeQuery(“查询语句”);

ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");

int flag = stmt.executeUpdate("update t_user set name='cat1' where id=1;");
if(flag>0){
    System.out.println("update succeeded");
}

int flag = stmt.executeUpdate("delete from t_user where id=4;");
if(flag>0){
    System.out.println("delete succeeded");
}

int flag = stmt.executeUpdate("insert into t_user(name,password,email,birthday) values\n" +
                "('long','1234222','[email protected]','1989-12-02')");
        if(flag>0){
            System.out.println("insert succeeded");
        }

关闭资源优化

如果前面发生异常,就不会执行到关闭资源语句,所以要保证关闭,用try,catch,finally

 /**
     * 新特性,自动关闭,将需要关闭的 放入try()中,后面就不用关闭了
     * @throws SQLException
     */
    @Test
    public void testSelect() throws SQLException {
        //注册驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
//将需要关闭的 放入try()中,后面就不用关闭了
       try(
               //获取连接Connection
               Connection conn = DriverManager.getConnection(

                       "jdbc:mysql://localhost:3306/testcopy", "root", "root");
               //得到 执行sql语句的对象statement
               Statement stmt = conn.createStatement();

               //执行sql语句,并得到返回结果 (update,返回一个flag)
               ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");
               ){


           //处理结果
           List<User> userList = new ArrayList<>();
           while (rs.next()){
               User u = new User();
               //创建User对象的语句,一定要写在里面,否则出现问题,所有返回值都写到一个数组的元素里了
               u.setId(rs.getInt("id"));
               u.setName(rs.getString("name"));
               u.setPassword(rs.getString("password"));
               u.setEmail(rs.getString("email"));
               u.setBirthday(rs.getDate("birthday"));
               userList.add(u);
           }
           System.out.println(userList);
       }

封装jdbc注册驱动

1.创建配置文件 db.properties

把参数配置,记录到db.properties中,文件放在classpath,src/main/resources下面

//配置文件不能有多余空格
driverClass=com.mysql.jdbc.Driver  
//错误:driverClass,必须和调用的地方名字写对,写错了找了半天bug
url=jdbc:mysql://localhost:3306/testcopy
username=root
password=root

JDBC IDEA 连接使用MySQL+用户登录demo_第1张图片

2. 创建工具类 DBUtil

建个包util——java类DBUtil——封装驱动
1.静态块,统一定好参数,通过 ResourceBundle调取 配置文件db.properties内参数属性
2.ResourceBundle.getBundle(“db”),要求在classpath中找到db.properties,要移动到main/resources目录
3.注册驱动 参数写入
4.获得连接方法 参数写入

package com.king.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

public class DBUtil {
   //统一定好参数,通过 ResourceBundle调取 配置文件db.properties内参数属性
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;
//ResourceBundle.getBundle("db"),要求在classpath中找到db.properties,要移动到main/resources目录
    static{
        ResourceBundle rb = ResourceBundle.getBundle("db");
        driverClass = rb.getString("driverClass");
        url = rb.getString("url");
        username = rb.getString("username");
        password = rb.getString("password");

        //1.注册驱动   参数写入
        try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    //2.获得连接   参数写入
    public static Connection getConnection() throws SQLException {

        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

}

    }

jdbc调用方法,参数,

package com.king;


import com.king.util.DBUtil;
import org.junit.Test;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 使用配置参数,优化重构
 */

public class CRUD_Test03 {


    @Test
    public void testSelect() throws SQLException {

       try(
               //获取连接Connection
               Connection conn = DBUtil.getConnection();

               //得到 执行sql语句的对象statement
               Statement stmt = conn.createStatement();

               //执行sql语句,并得到返回结果 (update,返回一个flag)
               ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from t_user");
               ){


           //处理结果
           List userList = new ArrayList<>();
           while (rs.next()){
               User u = new User();
               //创建User对象的语句,一定要写在里面,否则出现问题,所有返回值都写到一个数组的元素里了
               u.setId(rs.getInt("id"));
               u.setName(rs.getString("name"));
               u.setPassword(rs.getString("password"));
               u.setEmail(rs.getString("email"));
               u.setBirthday(rs.getDate("birthday"));
               userList.add(u);
           }
           System.out.println(userList);
       }



    }

用户登录

框架:
JDBC IDEA 连接使用MySQL+用户登录demo_第2张图片

  1. db.properties 数据库参数配置文件,包括MySQL建好表了
  2. DBUtil 建立jdbc连接的辅助工具,统一注册驱动,getConnection方法供调用
  3. User 用户属性表 get set toString
  4. service-LoginService 登录功能方法,供调用
  5. controller-Login 登录功能实现,调用 LoginService中方法,得到用户名密码,检验正确

1. db.properties 数据库参数配置文件,包括MySQL建好表了

//配置文件不能有多余空格
driverClass=com.mysql.jdbc.Driver  
//错误:driverClass,必须和调用的地方名字写对,写错了找了半天bug
url=jdbc:mysql://localhost:3306/testcopy
username=root
password=root

2. DBUtil 建立jdbc连接的辅助工具,统一注册驱动,getConnection方法供调用

package com.king.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

public class DBUtil {
   //统一定好参数,通过 ResourceBundle调取 配置文件db.properties内参数属性
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;
//ResourceBundle.getBundle("db"),要求在classpath中找到db.properties,要移动到main/resources目录
    static{
        ResourceBundle rb = ResourceBundle.getBundle("db");
        driverClass = rb.getString("driverClass");
        url = rb.getString("url");
        username = rb.getString("username");
        password = rb.getString("password");

        //1.注册驱动   参数写入
        try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    //2.获得连接   参数写入
    public static Connection getConnection() throws SQLException {

        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

}

3. User 用户属性表 get set toString

有这个用户属性表,就在创建User对象的时候,可以调用set,get方法来,写入User对象。

package com.king;
/**
 * 用户表
 * 属性,getset,tostring方法
 */

import java.util.Date;

public class User {
    private int id;
    private String name;
    private String password;
    private String email;
    private Date birthday;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}

4. service——LoginService 提供登录方法调用,返回User 对象

/**
* sql语句单独用变量保存,顺便打印出来,可以调试看到,自己sql语句对不对,
* select id,name,password,email,birthday from t_user where name=tiger and password=123456
* 可以看到 name和password 的值没有加单引号
*/
//sql语句进行拼接查询, 通过+号,可以连起来
String sql =“select id,name,password,email,birthday from t_user where name=’”
+ name +"’ and password=’" + password+ “’”;

package com.king.service;

import com.king.User;
import com.king.util.DBUtil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class LoginService {

    public User findUserByUsernameAndPsaaword(String name,String password) throws SQLException {
        User u = null;

        Connection conn = DBUtil.getConnection();
        Statement stmt = conn.createStatement();

        /**
         *  sql语句单独用变量保存,顺便打印出来,可以调试看到,自己sql语句对不对,
         *         select id,name,password,email,birthday from t_user where name=tiger and password=123456
         *         可以看到 name和password 的值没有加单引号
         */

        String sql ="select id,name,password,email,birthday from t_user where name='"
                + name +"' and password='" + password+ "'";
        System.out.println(sql);
        ResultSet rs = stmt.executeQuery(sql);
        //sql语句进行拼接查询

        while (rs.next()){
           //这while里面的 user新对象,必不可少
            u = new User();
            u.setId(rs.getInt("id"));
            u.setName(rs.getString("name"));
            u.setEmail(rs.getString("email"));
            u.setPassword(rs.getString("password"));
            u.setBirthday(rs.getDate("birthday"));
        }


        return u;
    }
}

5. controller-----Login

具体实现的地方:
控制台输入:Scanner input = new Scanner(System.in);
System.out.println(“请输入用户名:”);
String name = input.nextLine();
System.out.println(“请输入密码:”);
String password = input.nextLine();
新建 LoginService对象,调用方法,将返回值赋给, 新建User对象,
if判断,空,则数据库没查询到匹配的记录,无返回;
非空,则数据库中有这个记录,返回了

package com.king.controller;

import com.king.User;
import com.king.service.LoginService;

import java.sql.SQLException;
import java.util.Scanner;

/**
* 实现用户登录功能
*/
public class Login {
   public static void main(String[] args) throws SQLException {
       Scanner input = new Scanner(System.in);
       System.out.println("请输入用户名:");
       String name = input.nextLine();
       System.out.println("请输入密码:");
       String password = input.nextLine();

       LoginService ls=new LoginService();
      User u = ls.findUserByUsernameAndPsaaword(name,password);
      if(u == null){
          System.out.println("用户名或密码错误");
      }else{
          System.out.println("登陆成功");
      }
   }
}

你可能感兴趣的:(java,jdbc,mysql,登录)