在群里看到一个人说自己的JDBC连接有问题 然后重装了MYSQL服务 也无济于事 自己闲来无事看了下 因为之前自己是用的MYSQL5.1版本学习的这节 想来轻松拿捏 结果出乎意料的是 竟然花费了自己三十分钟才解决 下面先看下自己常见问题、配置信息、测试代码、路人问题、JAR下载
一、常见问题
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
二、配置信息
2.1、jdbc.properties
一下信息是MYSQL8.0连接JDBC的配置信息
url=jdbc:mysql://localhost:3307/db_heima_db3?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
user=root
password=root
driver=com.mysql.cj.jdbc.Driver
再看下MYSQL5.0的连接配置信息
url=jdbc:mysql://localhost:3307/db_heima_db3
正常情况应该是这样的 然后如果是本机端口号是3306可以简写为下面的方式
url=jdbc:mysql:///heima_db3
user=root
password=root
driver=com.mysql.jdbc.Driver
2.2、JDBC工具类
package cn.itcast.util;
/**
* @author admin
* @version 1.0.0
* @ClassName JDBCUtils.java
* @Description TODO
* @createTime 2021年11月28日 20:23:00
*/
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取 只需要读取一次即可拿到这些值 使用静态代码快
*/
static {
// 读取资源文件 获取值
try {
//1. 创建properties集合类
Properties pro = new Properties();
//获取src路径下文件的方式 ---> Classloader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
// System.out.println(path);
//2. 加载文件
// pro.load(new FileReader("E:\\IDEA项目\\HeiMa\\day_04_JDBC\\itcast\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据、赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if (stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
/**
* 释放资源
* @param rs
* @param stmt
* @param conn
*/
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
三、测试代码
3.1、Test测试类
package cn.itcast.jdbc;
import cn.itcast.util.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
// 连接数据库判断是否登陆成功
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1.获取连接
conn = JDBCUtils.getConnection();
// 2.定义sql
String sql = "select * from user ";
/**
* 请输入用户名
* sadfasf
* 请输入密码
* a ' or ' a ' = ' a
* 登录成功
*
*/
// 3.获取执行sql对象
stmt = conn.createStatement();
// 4.执行查询
rs = stmt.executeQuery(sql);
System.out.println("rs = " + rs);
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally{
JDBCUtils.close(rs,stmt,conn);
}
}
}
3.2、实战操作
package cn.itcast.jdbc;
/**
* @author admin
* @version 1.0.0
* @ClassName jdbcDemo9.java
* @Description TODO
* @createTime 2021年11月28日 21:30:00
*/
import cn.itcast.util.JDBCUtils;
import java.sql.*;
import java.util.Scanner;
/**
* 练习:
* 需求:
* 1. 通过键盘录入用户名和密码
* 2. 判断用户是否登陆成功
*
*/
public class jdbcDemo9 {
public static void main(String[] args) {
//1. 键盘录入 接收用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//2. 调用方法
boolean flag = new jdbcDemo9().login(username, password);
//3. 判断结果 输出不同语句
if (flag){
//登陆成功
System.out.println("登录成功");
}else {
//失败
System.out.println("用户名或密码错误");
}
}
/**
* 登陆方法
* @param username
* @param password
* @return
*/
public boolean login(String username,String password){
if (username == null || password == null){
return false;
}
// 连接数据库判断是否登陆成功
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1.获取连接
conn = JDBCUtils.getConnection();
// 2.定义sql
String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
/**
* 请输入用户名
* sadfasf
* 请输入密码
* a ' or ' a ' = ' a
* 登录成功
*
*/
// 3.获取执行sql对象
stmt = conn.createStatement();
// 4.执行查询
rs = stmt.executeQuery(sql);
// 5.判断
/* if (rs.next()){ // 如果有下一行 则返回true
return true;
}else {
return false;
}*/
return rs.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally{
JDBCUtils.close(rs,stmt,conn);
}
return true;
/*return false;*/ //这行代码为true 为false没有影响
}
/**
* 登陆方法 使用preparedStatement实现
* @param username
* @param password
* @return
*/
public boolean login2(String username,String password){
if (username == null || password == null){
return false;
}
// 连接数据库判断是否登陆成功
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 1.获取连接
conn = JDBCUtils.getConnection();
// 2.定义sql
String sql = "select * from user where username = ? and password = ? ";
// 3.获取执行sql对象
pstmt = conn.prepareStatement(sql);
// 给?赋值
pstmt.setString(1,username);
pstmt.setString(2,password);
// 4.执行查询 不需要传递sql
rs = pstmt.executeQuery(); // java.sql.SQLException: No value specified for parameter 1
// 5.判断
return rs.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally{
JDBCUtils.close(rs,pstmt,conn);
}
return true; //这行代码为true 为false没有影响
}
}
四、路人问题
吐槽一下:"还是个女生 比我都粗心大意"
原:usrl=jdbc:mysql://db4
driver=com.mysql.cj.jdbc.Driver
bc
原:
jdbc.properties.properties
password = pro.getProperty(password)
原:
if(username != null || password != null){}.....
4.1、效果图
五、JAR下载
链接:https://pan.baidu.com/s/18y6d7Umm8-962uibeneOEw
提取码:1111
--来自百度网盘超级会员V2的分享
六、总结
1、但凡是JDBC连接不上的80%都是配置文件的问题
2、编程之路细心、细心、在细心
3、对待一件事情一个问题 需要有思路 及时不会也能慢慢的弄出来 忌讳无头苍蝇 一顿操作浪费时间 出力不讨好
4、祝屏幕前的你和我自己 沉下心 码够十万行代码!