连接数据库和简单操作数据库
- JDBC程序编写步骤
- 创建一个演员表
- 数据库表的连接
- 前置工作
- 五种连接方式
- 方式五的配置文件
- 配置文件里面的内容
- 通过JDBC进行对actor表操作。
- ideal执行后的结果
- 数据库actor表结果
JDBC程序编写步骤
1.注册驱动-加载Driver类
2.获取连接-得到Connection
3.执行增删改查-发送SQL给mysql执行
4.释放资源-关闭相关连接
创建一个演员表
首先在数据库(我的数据库是yjg_db03)里面创建一个actor表。通过JDBC进行添加,删除和修改操作。
-- 创建测试表,演员表
CREATE TABLE actor (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (32) NOT NULL DEFAULT '',
sex CHAR(1) NOT NULL DEFAULT '女',
borndate DATETIME,
phone VARCHAR(12)
);
数据库下的演员表
数据库表的连接
前置工作
在项目下创建一个文件夹 libs
将 mysql.jar 拷贝到该目录下,点击 add to project …加入到项目中
五种连接方式
import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author yjg
* @version 1.0
* java 连接mysql的5中方式
*/
public class JdbcConn {
//方式1
@Test
public void connect01() throws SQLException {
//创建driver对象
Driver driver = new Driver();
String url = "jdbc:mysql://localhost:3306/yjg_db03";
//将用户名和密码放入到Properties 对象
Properties properties = new Properties();
//说明 user 和 password 是规定好,后面的值根据实际情况写
properties.setProperty("user", "root");// 用户
properties.setProperty("password", "yjg"); //密码
Connection connect = driver.connect(url, properties);
System.out.println(connect);
}
//方式2
@Test
public void connect02() throws Exception {
//使用反射加载Driver类 , 动态加载,更加的灵活,减少依赖性
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
//newInstance():创建一个实列,只能调用默认的构造器
//x.getClass.newInstance(),创建了一个同x一样类型的新实例。
// newinstance()方法调用默认构造器(无参数构造器)初始化新建对象。
Driver driver = (Driver)aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/yjg_db03";
//将 用户名和密码放入到Properties 对象
Properties properties = new Properties();
//说明 user 和 password 是规定好,后面的值根据实际情况写
properties.setProperty("user", "root");// 用户
properties.setProperty("password", "yjg"); //密码
Connection connect = driver.connect(url, properties);
System.out.println("方式2=" + connect);
}
//方式3 使用DriverManager 替代 driver 进行统一管理
@Test
public void connect03() throws Exception {
//使用反射加载Driver
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
//创建url 和 user 和 password
String url = "jdbc:mysql://localhost:3306/yjg_db03";
String user = "root";
String password = "yjg";
//向 DriverManager 注册给定驱动程序。新加载的驱动程序类应该调用 registerDriver 方法让 DriverManager 知道自己。
//注册Driver驱动
DriverManager.registerDriver(driver);
//试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("第三种方式=" + connection);
}
//方式4: 使用Class.forName 自动完成注册驱动,简化代码
//这种方式是使用的最多
@Test
public void connect04() throws ClassNotFoundException, SQLException {
//使用反射加载了 Driver类
//在加载 Driver类时,完成注册
/*在源码中:
1. 静态代码块,在类加载时,会执行一次.
2. DriverManager.registerDriver(new Driver());
3. 因此注册driver的工作已经完成
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
*/
Class.forName("com.mysql.jdbc.Driver");
//创建url 和 user 和 password
String url = "jdbc:mysql://localhost:3306/yjg_db03";
String user = "root";
String password = "yjg";
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("第4种方式~ " + connection);
}
//方式5 , 在方式4的基础上改进,增加配置文件,让连接mysql更加灵活
@Test
public void connect05() throws IOException, ClassNotFoundException, SQLException {
//通过Properties对象获取配置文件的信息
Properties properties = new Properties();
//从输入流中读取属性列表(键和元素对)。
properties.load(new FileInputStream("src\\mysql.properties"));
//获取相关的值
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("方式5 "+ connection);
}
}
方式五的配置文件
在src目录下创建一个文件,文件名是mysql.properties
配置文件里面的内容
1.得到与那个数据库的连接url
2.数据库的用户名user
3.数据库的密码password
4.需要的驱动driver
通过JDBC进行对actor表操作。
package com.h_edu.jdbc;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
// 这是Jdbc 程序,完成简单的操作
public class Jdbc01 {
public static void main(String[] args) throws SQLException {
//1. 注册驱动
//创建driver对象
Driver driver = new Driver();
//2. 得到连接
//(1) jdbc:mysql:// 规定好表示协议,通过jdbc的方式连接mysql
//(2) localhost 主机,也可以是ip地址
//(3) 3306 表示mysql监听的端口
//(4)yjg_db03 连接到mysql dbms 的哪个数据库
//(5) mysql的连接本质就是socket连接
String url = "jdbc:mysql://localhost:3306/yjg_db03";
//将用户名和密码放入到Properties 对象
Properties properties = new Properties();
//user 和 password 是规定好,后面的值根据实际情况写
//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。
//返回值是 Hashtable 调用 put 的结果。
properties.setProperty("user", "root");// 用户
properties.setProperty("password", "yjg"); //密码
//试图创建一个到给定 URL 的数据库连接。
Connection connect = driver.connect(url, properties);
//3. 执行sql
String sql = "insert into actor values(null, '王大牛', '男', '1970-11-11', '110')";
//String sql = "update actor set name='周星驰' where id = 1";
//String sql = "delete from actor where id = 1";
//statement 用于执行静态SQL语句并返回其生成的结果的对象
//创建一个 Statement 对象来将 SQL 语句发送到数据库。不带参数的 SQL 语句通常使用 Statement 对象执行。
// 如果多次执行相同的 SQL 语句,使用PreparedStatement更有效。
Statement statement = connect.createStatement();
//执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
int rows = statement.executeUpdate(sql); // 如果是 dml语句,返回的就是影响行数
System.out.println(rows > 0 ? "成功" : "失败");
//4. 关闭连接资源
//立即释放此 Statement 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时发生此操作。
statement.close();
//立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
connect.close();
}
}
ideal执行后的结果
数据库actor表结果
操作数据库成功,数据库的演员表中插入了王大牛这条记录。