JDBC:IDEA实现用户登录和MySQL数据库的连接

注意,不同的版本的jar包,在连接时可能存在差异

第一步创建数据库

注意:该表u在数据库db6中

CREATE TABLE u(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
PASSWORD VARCHAR(20) )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO u VALUES(1,'wzm','111111');
INSERT INTO u VALUES(NULL,'zcc','222222');
INSERT INTO u VALUES(NULL,'张三','333333');

在这里插入图片描述

第二步创建项目

在这里插入图片描述

在这里插入图片描述

第三部

在所生成的项目模块创建一个目录,放jar包
在这里插入图片描述
这里设置名称为libs
创建

复制jar包,注意这里使用的jar版本。不同版本在后续连接可能存在差异
在这里插入图片描述
在这里插入图片描述
点击确定后创建成功,在右击libs,点击添加为库,点击确认在这里插入图片描述
注意,添加的模块
在这里插入图片描述

第四步,写代码,这里小编写了3个类和一个配置文件

在这里插入图片描述

例题:登录程序要求:

  1. 打印所有数据库成员信息
  2. 查询是否存在

user类

/*
 *@Student 张策
 */
public class user {//创建user类储存从数据库中提取的数据,将来
    private int id;//存入集合打印遍历集合即可完成要求一
    private String name;
    private String password;

    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;
    }
    @Override
    public String toString() {
        return "u{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password=" + password +
                '}';
    }
}

主程序:Text1

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
 *@Student 张策
 */
public class Text1 {
    public static void main(String[] args) {
        List<user> findall = new Text1().findall();//创建对象,调用方法,返回集合。
        System.out.println(findall);//打印集合
        Scanner scanner = new Scanner(System.in);//输入
        System.out.println("请输入用户名");
        String name = scanner.nextLine();//输入
        System.out.println("请输入密码");
        String password = scanner.nextLine();
        if(login(name, password)){//下方创建将login方法,bollean类型
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }
    }

public static boolean login(String name,String password){
    if(name==null||password==null){//判断输入是否合理
        return false;
    }
    Connection conn=null;//定义了一个Connection对象,名为conn,初始值为null。Connection对象代表数据库连接。
    PreparedStatement pre=null;//定义了一个PreparedStatement对象,名为pre,初始值为null。PreparedStatement对象用于执行预编译的SQL语句。
    ResultSet resultSet=null;//定义了一个ResultSet对象,名为resultSet,初始值为null。ResultSet对象存储了从数据库查询返回的结果集。
    try {
        conn = JDBCUtils.getConnection();//调取下方创建的JDBCUtils类中的方法,返回
        String sql="SELECT * FROM u WHERE NAME=? AND PASSWORD=?";//编写SQL语句
        pre= conn.prepareStatement(sql);//使用Connection对象conn的prepareStatement方法创建一个PreparedStatement对象,并将SQL查询语句作为参数传入。
        pre.setString(1,name);//调用PreparedStatement对象的setString方法设置第参数的值,这里的1表示参数的位置,name是要设置的值。
        pre.setString(2,password);//同上
        resultSet = pre.executeQuery();//调用PreparedStatement对象的executeQuery方法执行查询,并将返回的结果集赋值给ResultSet对象resultSet。
        return resultSet.next();//调用ResultSet对象的next方法判断结果集中是否有下一条记录,如果有则返回true,否则返回false。
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        JDBCUtils.close(resultSet,pre,conn);//调用下方的的JDBCUtils类关闭空间
    }
    return false;
}
    public static List<user> findall(){//将数据库的数据存入集合中并且返回集合
        List<user> list = new ArrayList<>();
        Statement statement=null;//定义了一个Statement对象,名为statement,初始值为null。Statement对象用于执行SQL语句。和PreparedStatement 类似
                                 //这里仅仅演示Statement ,建议使用上方的PreparedStatement 
        ResultSet re=null;
        Connection connection=null;
        try {
            //2.获取数据库连接对象
            connection = JDBCUtils.getConnection();
            //3.定义sql语言
            String mysql="select*from u";
            //获取执行sql的对象 statement
            statement = connection.createStatement();
            //执行sql
            re = statement.executeQuery(mysql);
            user acc=null;
            while (re.next()){        //如果存在就返回true并且指针指向数据库的下一个数据
                int anInt = re.getInt("id");//依次提取数据库中的id,name,password列
                String string = re.getString("name");
                String anInt1 = re.getString("password");
                acc = new user();//创建一个对象储存每一个用户
                acc.setId(anInt);//依次将提取的数据,设置为上面刚建立的对象的属性
                acc.setName(string);
                acc.setPassword(anInt1);
                list.add(acc);//将对象存入集合
            }
        }  catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(re,statement,connection);//关闭
        }
        return list;
    }
}

工具类JDBCUtils :写有,关闭数资源,连接数据库的操作

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/*
 *@Student 张策
 */
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    static {//静态代码块,用于读取下方配置文件的数据
        try {
            Properties properties=new Properties();
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL resource = classLoader.getResource("jdbc.properties");
            String path = resource.getPath();
            properties.load(new FileReader(path));
            url=properties.getProperty("url");
            user=properties.getProperty("user");
            password=properties.getProperty("password");
            driver=properties.getProperty("driver");
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    public static Connection getConnection() throws SQLException {//连接数据库,调用了静态代码块读取的属性
        return DriverManager.getConnection(url,user,password);
    }
    public static void close(Statement statement,Connection connection){//第一个关闭资源的方法,下方还有一个重载的
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //关闭资源方法
    public static void close(ResultSet resultSet,Statement statement, Connection connection){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

配置文件jdbc.properties

url=jdbc:mysql:///db6?useSSL=false&characterEncoding=utf8        
//db6表示数据库的名字.
//useSSL=false这部分是用来指定是否使用SSL(Secure Socket Layer)加密连接到MySQL数据库的。
//将useSSL=false包含在连接URL中表示不使用SSL加密连接。
//characterEncoding=utf8  保证在数据库和Java代码中,需要保证字符编码方式一致
//如果你确信你的MySQL数据库不需要通过SSL加密连接,那么useSSL=false是一个合适的设置。这可以帮助简化连接配置,并且在某些情况下(例如本地开发环境)可能更方便。
user=root
//MySQL数据库名称
password=
//MySQL的密码
driver=com.mysql.jdbc.Driver
//驱动

随后运行Text1

在这里插入图片描述

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值