java基础-IDEA连接mysql+jdbc+DbUtils方式2020.3


开发环境:

windows10+IEDA2019.3+mysql 8.019


 参考网址https://blog.csdn.net/kingsirvince/article/details/90291602

一、 安装mysql

 下载地址https://dev.mysql.com/downloads/mysql/

 

下载出来,解压到C盘

 

 

 

 

 新建txt文件,输入以下代码,重命名为my.ini

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\\mysql\\mysql-8.0.19 
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\mysql\\mysql-8.0.19 \\mysqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

 

 

增加环境变量路径 ,方便终端调用

 

初始化数据库:

mysqld --initialize --console 
最后输出 root@localhost:后面是默认的密码Y9vPwoj=Rlys

输入以下安装命令:

mysqld install

启动输入以下命令即可:

net start mysql

 

 


输入密码mysql -u root -p

用默认密码登陆后,果断改密码为root

SET PASSWORD = '123456';

 


 

NAVICAT 链接MYSQL 显示 CLINET DOSE NOT SUPPORT AUTHENTICATION PROTOCOL REQUEST BY SERVER ;CONSIDER UPGRADING MYSQL CLIENT

 1  在命令窗口 输入mysql -uroot -p 首先通过cmd进入mysql 

2 更改加密方式 

mysql>  ALTER  USER  'root' @ 'localhost'  IDENTIFIED  BY  'password'  PASSWORD  EXPIRE NEVER;
Query OK, 0  rows  affected (0.10 sec)
 
3 更改密码
mysql>  ALTER  USER  'root' @ 'localhost'  IDENTIFIED  WITH  mysql_native_password  BY  'root' ;
Query OK, 0  rows  affected (0.35 sec)
 这个密码是navicat链接mysql 的密码
 
4刷新
 
mysql> FLUSH  PRIVILEGES ;
Query OK, 0  rows  affected (0.28 sec)
 

二、在IDEA中链接mysql (使用JDBC方式)
1.用navicat登陆mysql,新建数据库user,新建数据表t_user

 

 

2.IDEA载入JDBC驱动包,下载地址https://dev.mysql.com/downloads/connector/j/

 

 

2、解压zip,放到任意位置。其中的mysql-connector-java.jar文件就是驱动。

3、打开你的idea工程,File->Project Structure->Modules ,点击右侧的+号,选第一个JARs or directories,找到文件mysql-connector-java-版本号-bin.jar,确定。

查看你的External Libraries

 

 

 3.工程配置

新建数据库连接文件db.properties,内容如下

driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useSSL=false
username=root
password=123456

 

新建User实体类

package com.king;
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 +
                '}';
    }
}

新建Login类,模拟用户登录

package com.king;
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();
        String name = "root";
        String password = "root";

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

新建LoginService类,模拟服务器响应

package com.king;

import com.king.User;
import util.DBUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import util.DBUtil;

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;
    }
}

 

 数据库CRUD_Test类

package com.king;
import util.DBUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class CRUD_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<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

什么是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','tiger@163.com','1989-12-02')");
        if(flag>0){
            System.out.println("insert succeeded");
        }
 

 


连接mysql之DbUtils方式

参考网址:https://www.cnblogs.com/meiliguo/p/9097026.html

上面学习了JDBC对数据库的增删改查。其实在实际开发中,一般都是使用第三方工具类,但是只有将之前的基础学习好了,在使用开源工具的时才能得心应手。

DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。

1.下载地址 http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
 

 

 

 2.解压导入jar包

 

 

 

 

 再导入mysql连接jar包

工程目录如下

 

创建数据库user,并且创建表user,执行sql如下:

CREATE TABLE `user` (  
   `id` int(11) NOT NULL auto_increment,  
   `name` varchar(50) NOT NULL,  
   `age` tinyint(10) NOT NULL,  
    PRIMARY KEY  (`id`)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

编写数据库连接类ConnectDb 

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectDb {
    private static String driveClassName = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useSSL=false";

    private static String user = "root";
    private static String password = "123456";

    public static Connection Connect(){
        Connection conn = null;

        //load driver  
        try {
            Class.forName(driveClassName);
        } catch (ClassNotFoundException  e) {
            System.out.println("load driver failed!");
            e.printStackTrace();
        }

        //connect db  
        try {
            conn = DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            System.out.println("connect failed!");
            e.printStackTrace();
        }

        return conn;
    }
}

编写实体类UserBean 

package Beans;

public class UserBean {
    private int id;
    private String name;
    private int age;

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

编写测试类main

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import Beans.UserBean;

public class main {

    public static void main(String[] args) throws SQLException {
        insert_test();
        del_test();
    }

    static void insert_test() throws SQLException{
        Connection conn = ConnectDb.Connect();

        //创建SQL执行工具   
        QueryRunner qRunner = new QueryRunner();

        //执行SQL插入   
        int n = qRunner.update(conn, "insert into user(name,age) values('xxx',22)");
        System.out.println("成功插入" + n + "条数据!");

        //关闭数据库连接   
        DbUtils.closeQuietly(conn);
    }

    static void select_test() throws SQLException{
        Connection conn = ConnectDb.Connect();

        //创建SQL执行工具   
        QueryRunner qRunner = new QueryRunner();

        @SuppressWarnings("unchecked")
        List<UserBean> list = (List<UserBean>) qRunner.query(conn, "select id,name,age from user", new BeanListHandler(UserBean.class));
        //输出查询结果   
        for (UserBean user : list) {
            System.out.println(user.getAge());
        }

        //关闭数据库连接   
        DbUtils.closeQuietly(conn);
    }

    static void update_test() throws SQLException{
        Connection conn = ConnectDb.Connect();

        //创建SQL执行工具   
        QueryRunner qRunner = new QueryRunner();
        //执行SQL插入   
        int n = qRunner.update(conn, "update user set name = 'xxx',age=28");
        System.out.println("成功更新" + n + "条数据!");

        //关闭数据库连接   
        DbUtils.closeQuietly(conn);
    }

    static void del_test() throws SQLException{
        Connection conn = ConnectDb.Connect();

        //创建SQL执行工具   
        QueryRunner qRunner = new QueryRunner();
        //执行SQL插入   
        int n = qRunner.update(conn, "DELETE from user WHERE name='xxx';");
        System.out.println("删除成功" + n + "条数据!");

        //关闭数据库连接   
        DbUtils.closeQuietly(conn);
    }
}

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM