工具
①mysql-connector-java-8.0.11.jar 驱动包
②eclipse 开发工具
③mysql-8.0.11 数据库
步骤
一、 mysql-connector-java-8.0.11.jar 下载
下载网址:https://dev.mysql.com/downloads/connector/j/
二、eclipse加载jdbc的驱动包
方法一:
1、直接将下载好的jar包复制粘贴到 java项目目录下
2、选中jar包,点击右键–>Buile Path–>Add to Build Path
3、这时java项目下的 Reference Librarial 目录下自动新增了一个图标是牛奶瓶的mysql-connector-java-8.0.11.jar包
方法二、
点击Java项目右键,【构建路径Build Path】 —> 【添加库Add Library】—> 【用户库User Library】—> 【用户库(u)…】—> 【新建一个用户库(名字随便就叫mysqllib吧)】—> 选中新建的用户库,点击【添加外部JAR(x)…】,选择解压文件中的【mysql-connector-java-8.0.11.jar】—> 【确定—>完成】。
三、 java连接数据库
连接原理是这样的,分为下面两步:
(1)加载驱动
(2)获取连接
首先:我们不妨打开jar包看看 com.mysql.cj.jdbc.Driver这个路径里面是什么东西吧,如下图:
这个就是我们所需要的驱动程序,用来驱动MySql和Java的连接,等会加载驱动程序的路径就写这个啦!
// 加载数据库驱动 (5.0版本是这样的: com.mysql.jdbc.Driver)
String driver = "com.mysql.cj.jdbc.Driver";
其次,连接数据库需要URL参数,URL:Uniform Resource Locator
其格式规则是这样的:主协议:子协议://服务器地址:端口号/数据库&字符集…
例如:
//下面是连接一个数据库名为test的URL
String url = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
根据前面说的两步:(1)加载驱动(2)获取连接
写出代码:
//驱动路径,为什么是这样的,参考上面讲的
String driver = "com.mysql.cj.jdbc.Driver";
//mysql连接地址
String url = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
// 数据库名称
String username = "root";
// 数据库密码
String password = "1025";
// 声明一个数据库的连接对象
Connection conn = null;
//加载驱动
Class.forName(driver);
//DriverManager.getConnection()方法得到数据库连接对象,连接MySQL数据库!
conn=DriverManager.getConnection(url,username,password);
现在已经完成了数据库的连接啦!
三、MySql数据库连接成功后,用SQL语句对数据库进行增删检查操作
原理是这样的,有两种写法,都分为三步:
第一种:
(1)书写SQL语句
(2)对SQL进行预编译声明
(3)执行SQL语句,用ResultSet类存放获取的结果集
代码如下:
String sql="select * from users";//书写SQL语句
PreparedStatement pStmt = conn.prepareStatement(sql);//prepareStatement 对SQL进行预编译声明
ResultSet rs=pStmt.executeQuery( );//executeQuery( )执行SQL语句,并用ResultSet类存放获取的结果集!
第二种
(1)书写SQL语句
(2)创建statement类对象
(3)执行SQL语句,用ResultSet类存放获取的结果集
代码如下:
//要执行的SQL语句
String sql="select * from grade" ;
//创建statement类对象,用来执行SQL语句!
Statement Statement=conn.createStatement();
//ResultSet类,用来存放获取的结果集!
ResultSet rs=Statement.executeQuery(sql);
【注意】一般最好都写第一种,第一种都不会出错。
那这两种方式有什么区别呢?
当SQL语句中含有 占位符 “?” 时,就必须要用到第一种写法,要对SQL语句先进行预编译。例如:
String sql="select * from users where username=? and password=?";//?为占位符
//由于有占位符,所以需要对占位符进行预编译,然后在后面进行赋值
pStmt.setString(1,username);//给占位符赋值(序号从1开始)
pStmt.setString(2,password);
//注:set***有多种方法,如setInt()、setDouble()、setDate()等
java连接数据库完整代码:
public class connect {
public static void main(String[] args){
// 加载数据库驱动
String driver = "com.mysql.cj.jdbc.Driver";//路径为什么是这样的,参考上面讲的
// 获取mysql连接地址
String url = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
// 数据库名称
String username = "root";
// 数据库密码
String password = "1025";
// 获取一个数据库的连接
Connection conn = null;
// 获取连接的一个状态
try{
Class.forName(driver);
//DriverManager.getConnection()方法,连接MySQL数据库!
conn=DriverManager.getConnection(url,username,password);
if(!conn.isClosed())
System.out.println("数据库连接成功!");
//创建statement类对象,用来执行SQL语句!
Statement Statement=conn.createStatement();
//要执行的SQL语句
String sql="select * from grade" ;
//ResultSet类,用来存放获取的结果集!
ResultSet rs=Statement.executeQuery(sql);
System.out.println("-------------------------------");
System.out.println("执行结果如下所示:");
System.out.println("-------------------------------");
System.out.println("学号" + "\t" + "姓名"+"\t"+"数学成绩"+"\t"+"语文成绩");
System.out.println("-------------------------------");
String id=null;
String name=null;
String math=null;
String chinese=null;
while(rs.next()){
//获取‘学号’这列数据
id=rs.getString("学号");
//获取‘姓名’这列数据
name=rs.getString("姓名");
//获取‘数学成绩’这列数据
math=rs.getString("数学成绩");
//获取‘语文成绩’这列数据
chinese=rs.getString("语文成绩");
//输出结果
System.out.println(id+"\t"+name+"\t"+math+"\t"+chinese);
}
rs.close();
conn.close();
}
catch(ClassNotFoundException e){
//数据库驱动类异常处理
System.out.println("数据库驱动加载失败!");
e.printStackTrace();
}
catch(SQLException e1){
//数据库连接失败异常处理
e1.printStackTrace();
}
catch(Exception e2){
e2.printStackTrace();
}
finally{
System.out.println("-------------------------------");
System.out.println("数据库数据获取成功!");
}
}
}
后注:
若连接MySQL数据库中出现:Public Key Retrieval is not allowed(不允许解锁公钥)
解决方法:
源代码:
String url = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
改为:
String url = "jdbc:mysql://localhost:3306/test&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
也就是在其后添加:
allowPublicKeyRetrieval=true
转载自:https://blog.csdn.net/yangdan1025/article/details/80591012