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