開發環境:
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)
mysql>
ALTER
USER
'root'
@
'localhost'
IDENTIFIED
WITH
mysql_native_password
BY
'root'
;
Query OK, 0
rows
affected (0.35 sec)
mysql> FLUSH
PRIVILEGES
;
Query OK, 0
rows
affected (0.28 sec)
二、在IDEA中鏈接mysql (使用JDBC方式)


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