JDBC操作数据库 CREATE操作
0x01 JDBC是什么
JDBC是Java Database Connectivity(Java数据库连接)的缩写,JDBC定义了用户如何通过Java语言去连接数据库。它是来自Oracle公司的Java标准版平台的一部分。它提供查询和更新数据库中的数据的方法,并面向关系数据库。
– 来源于《维基百科》
0x02 什么是CRUD操作
CRUD是CREATE(增加)、READ(查询)、UPDATE(修改)、DELETE(删除)的简写,即JDBC的增、删、查、改四个操作。
0X03 实现流程
语言/环境
- 实现语言:Java
- 环境要求:
- 开发平台:eclipse
- 数据库:Oracle
- 中间件:odbc6 (密码:p8h2)
JDBC操作数据库基本步骤
- 注册数据库驱动程序到Java虚拟机(JVM)
- 建立数据库连接;
- 创建数据库操作对象;
- 定义操作的SQL语句;
- 执行数据库操作;
- 获取并操作结果集;
- 关闭对象,对数据库操作的资源进行回收(关闭结果集ResultSet->关闭操作PreparedStatement->关闭连接对象Connection)
需求分析
- 表结构
-- 班级信息表 CREATE TABLE classInformation ( classId INT NOT NULL PRIMARY KEY, -- 班级编号 className VARCHAR(40) NOT NULL, -- 班级名称 classDate DATE DEFAULT SYSDATE NOT NULL, -- 班级创建时间 classNote VARCHAR(200) -- 班级备注 );
- 新增步骤:
- 创建数据库连接类
- 创建班级信息表实体类对象类
- 创建新增记录的方法,使用prepareStatement设置参数,返回布尔值(true:成功/false:失败)
0x04 Coding
班级实体类
import java.util.Date; /* * 班级信息表实体类 */ public class ClassInformationEntity { private Integer classId; // 班级编号 private String className; // 班级名称 private Date classDate; // 班级创建时间 private String classNote; // 班级备注 public Integer getClassId() { return classId; } public void setClassId(Integer classId) { this.classId = classId; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public Date getClassDate() { return classDate; } public void setClassDate(Date classDate) { this.classDate = classDate; } public String getClassNote() { return classNote; } public void setClassNote(String classNote) { this.classNote = classNote; } }
数据库连接类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; /* * 数据库连接类 */ public class DBHelper { // 定义连接对象 private Connection conn = null; // 定义操作对象 private PreparedStatement pstm = null; // 定义结果集对象 private ResultSet rs = null; /** * 获取数据库连接的方法 * @return Connection连接对象 */ public Connection getConnection() { // 定义驱动信息 final String DRIVER = "oracle.jdbc.driver.OracleDriver"; /* * jdbc:表示采用jdbc方式连接数据库 * oracle:表示连接的是Oracle数据库 * thin:表示连接时采用thin模式 * @192.168.1.19表示目标数据库服务所在的网络位置 * 1521:端口号,Oracle服务默认端口1521 * orcl:数据库实例名称 */ final String URL = "jdbc:oracle:thin:@192.168.1.19:1521:orcl"; final String USER = "scott"; // 数据库登录用户名 final String PASSWORD = "tiger"; // 数据库登录密码 try { // 注册驱动 Class.forName(DRIVER); conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (Exception e) { } return conn; } /** * 关闭数据库资源 * @param conn 数据库连接对象 * @param pstm 数据库操作对象 * @param rs 结果集对象 */ public void closeConnection(Connection conn,PreparedStatement pstm,ResultSet rs) { try { if(rs!=null) { rs.close(); } if(pstm!=null) { pstm.close(); } if(conn!=null) { conn.close(); } } catch (Exception e) { } } /** * 测试数据库连接是否成功 * @param args */ public static void main(String[] args) { DBHelper db = new DBHelper(); Connection connection = db.getConnection(); if(connection!=null) System.out.println("数据库连接成功!"); else System.out.println("数据库连接失败!"); } }
Insert类
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; import java.sql.ResultSet; public class Insert { // 声明数据库连接对象 private Connection conn = null; // 声明数据库操作对象 private PreparedStatement pstm = null; // 声明结果集对象 private ResultSet rs = null; /** * @param classInfo 班级信息对象 * @return flag为true表示添加成功,提交事务 * flag为false表示添加失败,回滚事务; */ public boolean insertClassInformaion(ClassInformationEntity classInfo) throws SQLException { Boolean flag = false; try { // 获取连接对象 conn = DBHelper.getConnection(); // 定义SQL语句 final String INSERT = "INSERT INTO classInfo(classId,className,classDate,classNote) VALUES(?,?,?,?)"; // 获取操作对象 pstm = conn.prepareStatement(INSERT); // 通过PrepareStatement设置参数 pstm.setInt(1, 135); // 设置班级编号 pstm.setString(2, classInfo.getClassName()); // 设置班级名称 pstm.setDate(3, new java.sql.Date(classInfo.getClassDate().getTime())); // 设置创建日期 pstm.setString(4, classInfo.getClassNote()); // 设置班级备注 // 执行SQL语句 pstm.executeUpdate(); // 提交事务,将数据写入到数据库中,永久保存(如果不提交,则数据在内存中保存) conn.commit(); flag = true; } catch(SQLException e) { // 数据添加失败,回滚事务 conn.rollback(); } finally { // 回收数据库资源 DBHelper.closeConnection(conn, pstm, rs); } return flag; } public static void main(String[] args) throws Exception { // 声明并实例化Insert对象 Insert insert = new Insert(); // 声明并实例化班级信息实体类(ClassInformationEntity) ClassInformationEntity classEntity = new ClassInformationEntity(); // 把参数封装到实体对象 classEntity.setClassId(135); classEntity.setClassName("包拯"); classEntity.setClassDate(new Date()); classEntity.setClassNote("包青天"); boolean insertClassInformaion = insert.insertClassInformaion(classEntity); if(insertClassInformaion) { System.out.println("班级信息插入成功!"); }else { System.out.println("班级信息插入失败!"); } } }
效果截图
- 控制台输出结果
- 数据库查询结果