我们使用基本JDBC操作方式,感受一下代码带来的寒夜吧…(滑稽)
先创建一下用于测试的表结构
一、通过Java代码操作数据库需要几个步骤?
在揭晓答案之前,我们先思考一下,如果是你编写这个代码,你会分为几步?
1.连接到数据库
2.定义sql语句
3.执行sql
差不多了吧?那么再看一下我划分的步骤
//1.定义数据库url
//2.通过驱动管理器匹配url,创建连接
//3.定义sql语句
//4.预编译sql语句
//5.参数赋值
//6.执行sql
连接数据库:步骤1、2
定义sql语句:步骤3、4、5
执行sql:步骤6
稍微解释一下“定义sql语句”这个任务:
在实际操作中,为了提高代码的可复用性,我们书写完一个方法后习惯性的会把它封装起来,比如删除某行数据DELETE FROM 表名 WHERE 条件
中,表名和条件可以设置为一个变量,当我们之后删除的时候,只需要提供(表名,条件)这两个参数就可以了,这样有利于提高工作效率。
因此,在步骤3中,将这些参数全部改为 “?” 符,并在步骤5赋值。由于步骤3定义的sql语句包含 “?” 符,并不是完整的sql语句,所以在步骤4中仅仅是预编译了sql语句
不理解?没关系,一会看看下面的代码就清楚了
下边开始介绍相关操作
二、数据添加
以添加学生数据为例,我们想通过Java运行下面这一段sql语句
INSERT INTO STUDENT(STUID,SNAME,SDATE,SCORE,MEMO)
VALUES(S_STU.NEXTVAL,'张三',TO_DATE('1997-05-06','YYYY-MM-DD'),600,'211有望');
StudentServices.class
package com.whm.services;
//连接数据库
import java.sql.Connection;
//驱动管理器
import java.sql.DriverManager;
//预编译sql
import java.sql.PreparedStatement;
public class StudentServices
{
public void addStudent()throws Exception
{
//1.定义数据库url
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
//2.通过驱动管理器匹配url,创建连接
Connection conn = DriverManager.getConnection(url, "admin", "admin1234");
//3.定义sql语句...........为了将sql定义在多行方便查看,使用了StringBuilder
StringBuilder sql = new StringBuilder()
.append("INSERT INTO STUDENT(STUID,SNAME,SDATE,SCORE,MEMO)")
.append("VALUES(S_STU.NEXTVAL,?,TO_DATE(?,'YYYY-MM-DD'),?,?)");
//4.预编译sql语句..........sql是StringBuilder类型,需要转成String类型
PreparedStatement pstm = conn.prepareStatement(sql.toString());
//5.参数赋值...............setObject方法中,第一个参数是选择步骤三中第几个?,第二个参数是填补?的数据
pstm.setObject(1, "张三");
pstm.setObject(2, "1997-05-06");
pstm.setObject(3, "600");
pstm.setObject(4, "211有望");
//6.执行sql语句..............定义了一个变量tag,代表执行的结果。
//executeUpdate方法的返回值即 影响了数据库中多少行数据
int tag = pstm.executeUpdate();
System.out.println(tag);
}
}
步骤6中,打印输出tag的值,我们可以通过这个来得知sql语句是否执行成功。再书写一个测试类来测试呗
StudentServicesTest.class
public class StudentServicesTest
{
public static void main(String[] args)
{
try
{
StudentServices services = new StudentServices();
services.addStudent();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
可以得到tag数据:1,证明我们修改了一行数据。为了保险起见,再到Oracle中select看看
那么,添加操作完成!
数据库常见操作“增删改查”,其中"增删改"的操作方式基本相同,我们在这里再实现一个删除操作吧!
三、数据删除
删除方法delStudent和添加方法addStudent同属于StudentServices类下,因此下文仅粘出方法体而非完整类文件
//删除学生
public void delStudent()throws Exception
{
//1.定义数据库url
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
//2.通过驱动管理器匹配url,创建连接
Connection conn = DriverManager.getConnection(url, "admin", "admin1234");
//3.定义sql语句.....在这里只有一行数据,因此直接使用了String
String sql = "DELETE FROM STUDENT WHERE SNAME=?";
//4.预编译sql
PreparedStatement pstm = conn.prepareStatement(sql);
//5.参数赋值
pstm.setObject(1, "张三");
//6.执行sql
int tag = pstm.executeUpdate();
System.out.println(tag);
}
我们可以select得到Oracle的结果,删除了名为“张三”的小伙子!
通过上面的操作,我们可以完成JDBC的基本增删改,但存在缺陷:
如果需要添加的数据或需要修改的数据量很多时,通过pstm.setObject(, );
方法这样一个个输入显然是不现实的,效率太低了!那么,我们是不是可以采用其他方式呢?
同时,如同我们使用Scanner类后需要关闭一样,在使用完JDBC资源后,如果不关闭,可能会造成内存泄露的问题