今天的内容
JDBC
Java DataBase Connectivity java 数据库连接
使用小黑屏或者可视化工具sqlyog去连接数据库,创建数据库,使用数据库。
然后对数据库里面的数据进行增删改查。这种开发的时候可以吗?不行。咱们今天要用java代码去连接咱们的数据库。去数据里面的数据进行增删改查。
JDBC是干嘛的?咱们得知道。
1.JDBC概述
规范!!!
Sun公司制定一套规则。通过java代码连接咱们数据库(mysql,oracle,SQLServer,DB2)的规范。而且要求数据库的厂商去解决连接和操作问题!!!
如果把sun公司比作一台电脑,然后电脑给你预留接口。这些数据库厂商就好比u盘。
如果电脑想要用鼠标功能,买个鼠标通过接口插到电脑上面,让电脑具有鼠标的功能。
sun公司制定的java代码,要符合市面上所有的数据库厂商。厂商不一样。sun公司说了。你想使用java代码去连接SQLServer(微软),sun公司和微软,哥们,你得给我封装一些类库,让我直接调用。如果你不封装,我就不用你的了!!!
JDK:
java.sql
javax.sql
如果想要连接数据库,必须要下载第三方的jar包。
sun公司给咱们封装一写类库,但是厂商需要自己封装一些类库,那这些类库是厂商的,被称为第三方的类库,不是java自己带的!!!
真正用的时候,需要导入第三方的jar包,在开发中。
要连接mysql数据库,需要下载一个jar包,mysql-connector-java-5.1.47.jar
如何下载第三方的jar:
最标准的模式就是去mysql官网去下载。
1.百度输入maven
2.打开网站https://mvnrepository.com/
3.输入mysql进入查询
4.选择要的版本进行下载
2.mysql连接数据库的参数
回顾小黑屏里面:
cmd> mysql -hlocalhost -uroot -p123456
1. mysql 需要确定连接哪一款数据库 mysql
2.hlocalhost 确定连接数据库在哪个服务器上面 本机
3.数据库的用户名
4.数据库的密码
java代码连接数据库的时候也是需要这几个参数的!!!
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
---------------------------SQL Server(微软)------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname>
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2 (IBM)--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
-------------------------------------------------------
3.借助JDBC连接mysql数据库的入门案例
在项目中如何导包
1.在src的文件夹下面新建一个lib文件夹
2.将jar包复制到lib文件夹中
3.点击上jar包右键,add as library
package com.qfedu.a_mysql;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.准备url
//useSSL 要么是true要么是false
//你自己电脑的系统我不知有这个ssl协议的!!!
//如果报一个错: javax.net.ssl.SSLHandshakeException:
//true和false看自己情况来定的!!!!
String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
//3.准备用户名和密码
String user = "root";
String password = "123456";
//4.借助于一个java里面的类DriverManager 获取数据库连接对象
Connection connection = DriverManager.getConnection(url, user, password);
//
System.out.println(connection);
connection.close();
}
}
4.JDBC核心的API
java.sql.DriverManager
用来管理驱动的一个类
static getConnection(String url, String user,String password);
获取数据库连接对象 Connection
java.sql.Connection 接口
Statement createStatement();
获取statement对象,将sql语句发送到数据库进行执行。
java.sql.Statement 接口
用于执行静态SQL语句并返回其生成的结果的对象。
int executeUpdate(String sql)
执行给定的SQL语句,这可能是 INSERT , UPDATE ,或 DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。只能增删改
4.1向数据表增加一条数据
1.连上数据库
2.写sql语句
3.执行sql语句
package com.qfedu.b_statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 向数据表中插入一条数据
*/
public class InertTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//添加一条数据到数据表中
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.准备url user password
String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
String user = "root";
String passwrod = "123456";
//3.使用驱动管理器类DriverManager 去获取connection对象
Connection connection = DriverManager.getConnection(url, user, passwrod);
//4.通过connection对象获取statement对象,将sql语句放到咱们这个数据库上执行
//statement 对象 sql语句搬运工,将sql语句搬运工到数据库中进行执行
Statement statement = connection.createStatement();
//5.准备sql语句
//现在数据库中 java2109这个库有没有work表?没有需要自己手动建一个
//sql 静态的sql语句
String sql = "insert into work(name, age, info) values('老邢', 67, '大家见过老邢没,下阶段老邢带大家,长的是真丑')";
//6.执行sql语句
//executeUpdate() 只能增删改 这些sql语句
int i = statement.executeUpdate(sql);
System.out.println(i);//受影响的行数 打印1
//7.关闭资源
statement.close();
connection.close();
}
}
4.2数据表中删除一条数据
package com.qfedu.b_statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DeleteTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.准备url user password
String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
String user = "root";
//安装数据库mysql软件的时候,自己设置密码,在代码里面写你自己的
String password = "123456";
//3.获取connection对象
Connection connection = DriverManager.getConnection(url, user, password);
//4.通过connection对象获取搬运工对象
Statement statement = connection.createStatement();
//5.准备一个sql语句
String sql = "delete from work where id = 1";
//6.执行sql语句
int i = statement.executeUpdate(sql);
System.out.println(i);
//7.关闭资源
statement.close();
connection.close();
}
}
4.3数据表中修改一条数据
package com.qfedu.b_statement;
import javax.print.DocFlavor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class UpdateTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
String sql = "update work set name = '小邢',age=3,info='刚断奶'";
int i = statement.executeUpdate(sql);
System.out.println(i);
statement.close();
connection.close();
}
}
4.4数据的查询【偏难,重要!!!】
package com.qfedu.b_statement;
import java.sql.*;
import java.util.ArrayList;
public class QueryTest1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/java2109?useSSL=false";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, user, password);
//1.获取搬运工对象
Statement statement = connection.createStatement();
//2.准备sql语句
String sql = "select * from work";
//3.使用搬运工对象(statement)调用方法执行sql语句
//result就是包含了咱们数据表的里面的额数据,字段等所有的
ResultSet resultSet = statement.executeQuery(sql);
//声明一个集合,这个集合存放的是work对象
ArrayList<Work> works = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String info = resultSet.getString("info");
//每一次的循环都会出来四个数据,把这四个数据赋值给你一个对象
//循环几次添加几次的work对象,每次添加的work对象的值都是不一样的!!!
works.add(new Work(id, name, age, info));
}
//works这个集合里面有值了
//能不能瞜一眼? iter
for (Work work : works) {
System.out.println(work);
}
}
}
我发现一个问题,发现获取connection对象还有close方法都是一样的!!!
被逼无奈的封装。
4.4被逼无奈的封装
1.写一个类,类下面有方法,封装一个获取connection对象方法。
封装一个close方法(增删改关闭两个,查关闭三个)