```java
//关于配置API的一些理解笔记
package com.shayiheng.api.statement;
import com.mysql.cj.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Scanner;
/**
* 2
* @Author Tom
* Description:模拟用户登陆
* TODO:
* 1.明确jdbc的使用流程
* 2.发现问题,引出preparedStatement
* TODO:
* 输入账号或者密码
* 进行数据库信息查询(t_user)
* 反馈成功还是登陆失败
* TODO:
* 1.键盘输入事件
* 2.注册驱动
* 3.获取连接
* 4.创建statement
* 5.发送SQL语句,返回结果
* 6.结果判断,显示登陆成功
* 7.关闭资源
*/
public class StatementUserLoginPart {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.获取用户输入信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入账号");
String account = scanner.nextLine();
System.out.println("请输入密码");
String password = scanner.nextLine();
//2.注册驱动
/*
* DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver())
* 注意驱动版本!!
* 8+ com.mysql.cj.jdbc.Driver
* 5+ com.mysql.jdbc.Driver
* 问题:注册两次驱动
* 1.DriverManager.registerDriver() 方法本身会注册一次!
* 2.Driver.static{ DriverManager.registerDriver()}靜态代码块,也会注册一次!
* 解决问题:只想注册一次驱动
* 只触发静态代码块即可! Driver
* 触发静态代码块:
* 类加载机制:类加载的时刻会触发静态代码块!
* 加载[class文件 ->jvm虚拟机的class对象]
* 连接[验证(检查文件类型) ->准备(静态变量默认值) -> 解析(触发静态代码块)]
* 初始化(静态属性赋真实值)
* 触发类加载:
* 1.new 关键字
* 2.调用静态方法
* 3.调用静态属性
* 4.接口 1.8 default默认实现
* 5.反射
* 6.子类触发夫类
* 7.程序的入口main
*/
//方案1:
//DriverManager.registerDriver(new Driver());
//方案2:固定的写法! mysql -mysql Driver ||切换了数据库 oracle driver | 还需要改代码
//new Driver() //111
//反射 字符串的Driver全限定符 可以引导外部的配置文件 -> xx.properties oracle ->配置文件修改
Class.forName("com.mysql.cj.jdbc.Driver");//222
//2.获取数据库连接
/**
*
* getConnection(1,2,3)方法,是一个重载方法!
* 允许开发者,用不同的形式传入数据库的核心参数
*
* 核心属性:
* 1.数据库软件所在的主机的立p地址:Localhost | 127.0.0.1
* 2.数据库软件所在的主机的端口号:3306
* 3.连接的具体库:shayiheng
* 4.连接的账号:root
* 5.连接的密码:12345678
* 6.可选的信息 没有
* 三个参数:
* String url 数据库软件所在的信息,连接的具体库,以及其他可遊信息!
* 語法:jdbc:数据库管理软件名称[mysql,oracle]://ip地址|主机名:port端口号/数据库名?key=value
* &key=value 可选信息!
* 具体:jdbc:mysql://127.0.0.1:3306/shayiheng
* jdbc:mysql://location:3306/shayiheng
* 本机的省略写法:如果你的数据库软件安装到本机,可以进行一些省略
* jdbc:mysql://127.0.0.1:3306/shayiheng = jdbc:mysql:///shayiheng
* 省略了[本机地址]和[3306默认端口号]!
* 强调:必须是本机,并且端口号是3306方可省略 使用///
* String user 数据库的账号:root
* String password 数据库的密码:12345678
* Connection connection1 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng",
* "root", "12345678");
*
* Connection connection2 = DriverManager.getConnection("jdbc:mysql:///shayiheng",
* "root", "12345678");
* 两个参数:
* String url:此url和三个参数的url的作用一样!数据库ip,端口号,具体的数据可和可选信息
* Properties info:存储账号和密码
* Properties 类似于Map只不过key=value都是字符串形式的!
* key user:账号信息
* key password:密码信息
* Properties info=new Properties();
* info.put("user","root");
* info.put("password","12345678");
* Connection connection3=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng",info);
* 一个参数:
* String url :数据库ip,端口号,具体的数据库 可选信息 可选信息(账号密码)
* jdbc:数据库软件名://ip:port/数据库?key=value&key=value&key=value
*
* jdbc:mysql://location:3306/shayiheng?user=root&password=12345678
* 携带固定的参数名 user password 传递账号和密码信息![规定]
*
* Connection connection4= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng?user=root&password=12345678");
*url路径属性可选的信息:
* url?user="账号"&password="密码"
*
* 8.0.27版本驱动,下面都是一些可选属性
* 8.0.25以后,自动识别时区! serverTimezone=Asia/Shanghai 不用添加! 8.0.25之前版本,下面一句话还是要添加的!
* 8版本以后,默认使用的就是utf-8格式,useUnicode=true&characterEncoding=utf8&useSSL=true都可以省略了!
* serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true
*/
Connection connection1 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng",
"root", "12345678");
Connection connection2 = DriverManager.getConnection("jdbc:mysql:///shayiheng",
"root", "12345678");
Properties info=new Properties();
info.put("user","root");
info.put("password","12345678");
Connection connection3=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng",info);
Connection connection4= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shayiheng?user=root&password=12345678");
}
}