JDBC全称为Java Data Base Connectivity,中文表示Java连接数据库技术!底层就是通过Java代码编写的,只不过连接数据库的源代码过于复杂,所以有一帮开发团队已经提前使用Java将连接数据库的源代码写好!我们使用JDBC更多的目的只是为了调用开发团队写好的方法来连接数据库实现数据的增删改查操作而已!
- 首先新建一个java项目。
- 右键项目名选中:new,选中:Directory,命名为lib。
- 将JDBC对应的JAR包复制到lib文件夹中。
- 右键jar包,Add as library 将 jar 包解析。
然后可以进行编写一个简单的案例,用于实现对数据库的添加(修改删除亦然)操作。
JDBC底层已经提供号相关的源代码,所以JDBC开发本质是调用系统提供的方法。它的核心思想就是通过java编写SQL语句,将java采集到的数据信息封装到SQL语句中,通过SQL操作来实现增删改查的操作。
准备环节:准备四个参数信息用于Java连接数据库(由于参数信息一般都是固定不变的,所以做成常量)
//JDBC驱动信息(类的全类名)
public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
//连接数据库的地址信息
public static final String URL = "jdbc:mysql://localhost:3306/demo?serverTimezone=UTC";
//连接数数据的账号信息
public static final String USER = "root";
//连接数数据的密码信息
public static final String PASSWORD = "root";
正式开发环节的思想,分六步。
- 加载驱动(创建JDBC相关对象,准备调用方法)
- 获取连接对象、建立连接(建立一个Java连接数据库的通道!)
- 准备SQL语句(以字符串形式声明SQL语句。以下所有的系统类都是java.sql包提供的类)
- 装载SQL语句(准备一个载体将SQL语句进行装载)
- 执行SQL语句
- 释放资源(销毁JDBC相关的所有对象,释放内存)
那么现在开始进行添加操作:先在数据库中新建一个dog表,然后向其中添加一条数据。
为方便操作,将表中的编号设置为自动递增的。
//1. 加载驱动:(驱动:一组程序,加载驱动就是创建JDBC相关的对象准备调用方法!)
Class.forName(DRIVER);
//2. 获取连接对象、建立连接(建立了一个Java连接数据库的通道!)
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//conn:表示获取到的连接对象
//3. 准备SQL语句(准备货物:以字符串的形式声明SQL语句)
String s = "insert into dog values(default, '贝贝', '哈士奇', 4);";
//4. 装载SQL语句(准备载体将SQL语句进行装载)
PreparedStatement ps = conn.prepareStatement(s);
//PreparedStatement:类名(载体对应的类型)
//ps:载体对象(容纳SQL语句)
//5. 执行SQL语句(发车:分两种形式)
//(1). ps.executeUpdate():用于执行DML操作,返回值类型为int(表示执行成功的条数)
//(2). ps.executeQuery():用于执行DQL操作,返回值类型为ResultSet(表示打包的查询结果)
int r = ps.executeUpdate();
//r:表示执行成功的条数(只要不为0就证明执行成功!)
if (r > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
//6. 释放资源(销毁JDBC相关的所有对象,释放内存!)
//建议:如果这段代码运行完之后。程序已经结束,那么程序结束后会自动销毁所有对象!
//但是如果这段运行结束之后,程序没有执行完毕,建议释放资源节约内存!
ps.close();
conn.close();
至此,就可以成功的向数据库中添加一条数据了,但是在实际应用中,我们需要从前台来接取信息放到SQL语句中,因此这种形式显然是无法满足正常的需求的。可以有两种方式来进行处理
方案一:通过字符串拼接的形式,将变量拼接到SQL语句中!
String s = "insert into dog values(default, '" +name+ "', '" +type+ "', " +age+ ");";
方案二:通过问号当做占位符进行占位处理!
String s = "insert into dog values(default, ?, ?, ?);";
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class demo {
//准备四个常量参数:作用就是为了连接数据库准备!
//JDBC驱动信息(类的全类名)
public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
//连接数据库的地址信息
public static final String URL = "jdbc:mysql://localhost:3306/demo?serverTimezone=UTC";
//连接数数据的账号信息
public static final String USER = "root";
//连接数数据的密码信息
public static final String PASSWORD = "root";
public static void main(String[] args) throws Exception {
//模拟场景:接受用户的数据,将采集到的用户输入的信息通过JDBC存储到数据库中!
Scanner sc = new Scanner(System.in);
System.out.print("请输入狗的昵称:");
String name = sc.next();
System.out.print("请输入狗的品种:");
String type = sc.next();
System.out.print("请输入狗的年龄:");
int age = sc.nextInt();
//1. 加载驱动
Class.forName(DRIVER);
//2. 获取连接对象
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3. 准备SQL语句(怎么将用户录入的数据放进SQL语句中)
String s = "insert into dog values(default, ?, ?, ?);";
//通过问号当做占位符进行占位处理!
//(问号在赋值时自动拼接单引号,所以声明时无需添加单引号!)
//4. 装载SQL语句(注意:装载完毕后如果SQL中出现问号,需要给问号赋值)
PreparedStatement ps = conn.prepareStatement(s);
//4.2 给占位符赋值
//第一个参数:表示问号的序号
//第二个参数:表示需要给问号赋值的数据
ps.setString(1, name);
ps.setString(2, type);
ps.setInt(3, age);
//5. 执行SQL语句、
int r = ps.executeUpdate();
if (r > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
//6. 释放资源
ps.close();
conn.close();
}
}
那么运行结果如下所示:
我们可以看到dog表中信息已经添加成功。
版权声明:本文为weixin_43536879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。