开发环境:
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); } }