2021年07月19日 随堂笔记 JDBC

课前准备

下载工具

image-20210720090747895

Maven仓库下载

搜索mysql

https://mvnrepository.com/search?q=mysql

选择对应的版本

https://mvnrepository.com/artifact/mysql/mysql-connector-java

例如选择5.x的最新版本的驱动

https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.49

image-20210720095949430

JDBC实例1:加载数据库驱动

mysql驱动下载

导入mysql驱动

JDBC 数据库连接步骤

1 加载驱动

1
Class.forName("com.mysql.jdbc.Driver");

2 获取数据库的连接

1
2
3
4
5
6
7
8
9
10
11
12
//通过driver管理器类的DriverManager的getConnection方法来获取数据库的连接
Connetcion con=null;
// 数据库服务器的网络地址
String dburl="jdbc:mysql://localhost:3306/jdbc_cpp";
// 权限 ,也就是用户名
String user="root";
String password="root";
con=DriverManager.getConnetion(dburl,user,password);
// 打印数据库连接对象,看是否成功获取连接
/**
*/
// System.out.println(con);

抛出ClassNotFound异常的情况:

  • 没有导入mysql的驱动到classPath
  • Class.forName(“驱动类全路径”),路径写错

数据库相关命令

显示有多少个数据库
1
show databases;
创建数据库命令
1
create database 数据库名;

例子

1
create database jdbc_cpp;
进入某一个数据库
1
use 数据库名;

例子

1
use jdbc_cpp;

java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class JDBCCon {
public static void main(String[] args) throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con = null;
String url="jdbc:mysql://localhost:3306/java_app";
String user = "root";
String password = "root";
con=DriverManager.getConnection(url,user,password);
System.out.println(con);
}
}

错误排查1

没有这个数据库

1
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'jdbc_app'

原因,创建数据库的时候,写错了名字,修改正确的名字即可。

错误排查2 找不到驱动

1
2
3
4
5
6
7
8
9
10
11
12
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at time20210720.jdbc.JDBCCon.main(JDBCCon.java:11)
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/java_app
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at time20210720.jdbc.JDBCCon.main(JDBCCon.java:20)
项目中找不到驱动的jar包

image-20210720094615128

添加jar包到项目下的lib目录,然后add to Build Path

image-20210720094804976

错误排查3

1
2
3
4
5
6
7
8
9
java.lang.ClassNotFoundException: com.mysql.jdbc.Dirver
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at time20210720.jdbc.JDBCCon.main(JDBCCon.java:12)
com.mysql.jdbc.JDBC4Connection@3d646c37

原因:

1
Class.forName("com.mysql.jdbc.Dirver");

驱动的名称写错了,改成正确的驱动名称即可:

1
Class.forName("com.mysql.jdbc.Driver");

DriverManager类

1
2
createStatement();
p

Statement

用来执行sql语句

1
2
3
execute(String sql);
executeQuery(String selectSQL);//执行select语句
executeUpdate(String sql);//执行insert,update,delete语句

JDBC实例2:执行SQL语句 创建表格

创建表

1
2
3
create table tb_user(

);

image-20210720100640563

查看有多少表

1
show tables;

查看表的结构

1
desc 表名;

最后打开的先关闭

执行单元测试

单元测试错误排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Test
private static void testConnetion() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
// Class.forName("com.mysql.jdbc.Dirver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con = null;
String url = "jdbc:mysql://localhost:3306/java_app";
String user = "root";
String password = "root";
con = DriverManager.getConnection(url, user, password);
System.out.println(con);
}

错误代码:

1
2
3
4
5
6
org.junit.runners.model.InvalidTestClassError: Invalid test class 'time20210720.jdbc.JDBCCon':
1. Method testConnetion() should not be static
2. Method testConnetion() should be public
at org.junit.runners.ParentRunner.validate(ParentRunner.java:525)
......

image-20210720104512452

原因Test方法不能使用static修饰,public修饰。修改测试方法如下即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Test
public void testConnetion() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
// Class.forName("com.mysql.jdbc.Dirver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con = null;
String url = "jdbc:mysql://localhost:3306/java_app";
String user = "root";
String password = "root";
con = DriverManager.getConnection(url, user, password);
System.out.println(con);
}

推荐

  • Java编程思想
  • Java web

一万以上,亚信8000
一年半的工作经验普通程序员一万二到一万五
两万五没问题
要是三万以上,就需要很深入了。

JDBC实例2 插入数据

PreparedStatement

是Statement的子接口用来执行预编译(动态的)的SQL,能够避免非法注入问题。
在正式开发里面,百分之90的情况都是使用PreparStatement接口。

JDBC实例3 查询数据

只用sql语句是select的才使用executeQuery,其他的都使用executeUpdate()

编程题

增删改查

传统的方法写一遍

使用工具类的写一遍

总结

对单表的操作,

项目的编写

作业,对ATM取款机的增删改查的操作