前面复习了一些基础知识以及如何抽取一些常用的代码,接下来就结合junit4做一个增删改查的小demo

重点是这么几个步骤:1.创建连接 2.编写sql语句 3.编写sql语句的载体 4.如果是PreparedStatement的话要设置占位符 5.执行sql语句 6.其他

在码代码过程中,发现自己规范引错了,正确的应该引java.sql下的,我引成了java.mysql.jdbc包下的

此外,发现自己在创建sql载体的时候不熟练,忘记了。对于Statement的话,创建载体是 stmt = conn.createStatement()

对于PreparedStatement的话,创建载体是 pst= conn.prepareStatement();  ***注意不要加了个d,这里是prepare

1.新建web项目,引入jar包

2.创建数据库,编写sql脚本

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;

3.编写工具类和测试类

package JDBC温习;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* 提供获取连接和释放资源的 方法
*/
public class JDBCUtils { /*
* 获取连接方法
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf-8", "root", "123456");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
/*
* 释放资源
*/
public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}
package JDBC温习;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.junit.Test; /*
* 测试类
*/
public class test {
/*
* 添加用户
*/
@Test
public void add() {
Connection conn = null;
PreparedStatement pst = null; try {
// 1.获取连接
conn = (Connection) JDBCUtils.getConnection();
// 2.编写sql语句(采用PreparedStatement)
String sql = "insert into student values(?,?,?) ";
// 3.获取执行sql语句的载体
pst = conn.prepareStatement(sql);
// 4.设置占位符
pst.setInt(1, 6);
pst.setString(2, "周东");
pst.setString(3, "男");
// 5.执行插入操作
int updateRow = pst.executeUpdate();
if (updateRow > 0) {
System.out.println("插入成功");
} else {
System.out.println("插入失败");
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtils.release(conn, pst, null);
}
} /*
* 删除用户
*/
@Test
public void deleteById() {
Connection conn = null;
Statement stmt = null;
try {
// 1. 获取连接
conn = JDBCUtils.getConnection();
// 2. 编写sql语句(采用Statement方式)
String sql = "delete from student where id=2 ";
// 3. 获取sql语句载体
stmt = conn.createStatement();
// 4. 执行sql语句
int updateRow = stmt.executeUpdate(sql);
if (updateRow > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
// 这里因为我工具类提供的是preparedStatement的关闭.
JDBCUtils.release(conn, null, null);
}
} /*
* 修改用户
*/
@Test
public void updateById() {
Connection conn = null;
PreparedStatement pst = null;
try {
// 1. 获取连接
conn = JDBCUtils.getConnection();
// 2. 编写sql语句(PreparedStatement方式)
String sql = "update student set name=? , sex=? where id=? ";
// 3. 创建sql载体
pst = conn.prepareStatement(sql);
// 4. 设置占位符
pst.setString(1, "小花");
pst.setString(2, "女");
pst.setInt(3, 4);
// 5. 执行sql语句
int updateRow = pst.executeUpdate();
if (updateRow > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
JDBCUtils.release(conn, pst, null);
}
} /*
* 查询用户 PS:简单查询,根据ID查某个学生
*/
@Test
public void findById() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 获取连接
conn = JDBCUtils.getConnection();
// 2.编写sql语句
String sql = "select * from student where id = 6 ";
// 3.编写sql载体
stmt = conn.createStatement();
//4.执行sql语句
rs = stmt.executeQuery(sql);
//5. 遍历
while(rs.next()) {
System.out.println(rs.getString(2)+"====="+rs.getString("sex"));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
JDBCUtils.release(conn, null, rs);
}
}
}

以上是JDBC方面知识点的简单回顾

JDBC复习2的更多相关文章

  1. JDBC复习

    -----------------------------------------JDBC复习----------------------------------------- 1.JDBC (Jav ...

  2. JDBC复习1

    1.什么是JDBC JDBC是java数据库连接技术的简称(Java DataBase Connectivity) jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库.jdbc的AP ...

  3. JDBC 复习

    概念 Java DataBase Connectivity java数据库连接 定义了操作所有关系型数据库的规则(接口),不同的数据库厂商编写类实现这些接口,这些类就叫数据库驱动,使得用户只需要使用统 ...

  4. JDBC 复习4 批量执行SQL

    1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...

  5. JDBC 复习3 存取Oracle大数据 clob blob

    1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...

  6. JDBC 复习2 存取mysql 大数据

    大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据 mysql的大数据分为2种 blob 和 text ,没有cl ...

  7. JDBC 复习1 DBUtil

    package dbex; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; impo ...

  8. JDBC 复习5 mysql 的自增长主键 auto_increment

    MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...

  9. JDBC(三)数据库连接池(DBCP、C3P0)

    前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...

随机推荐

  1. .net 数据类型转换int.Parse()与int.TryParse

    int.Parse()是一种类容转换:表示将数字内容的字符串转为int类型. 如果字符串为空,则抛出ArgumentNullException异常: 如果字符串内容不是数字,则抛出FormatExce ...

  2. ResourceOwnerPassword模式使用数据库.

    有时候, ResourceOwnerPassword模式有用的, 可以用来代替我们原来管理程序的开发方式. 因为管理程序本身拥有用户数据的权限嘛, 并不是第三方应用, 无需要授权 集成很简单. 1. ...

  3. 腾讯云图片鉴黄集成到C#

    官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: var urlList = new List& ...

  4. C-switch case之如何巧妙判断范围区域

    当判断整数时 示例: 判断整数范围 #include <stdio.h> int main() { unsigned ]={0x00,0x07,0x11,0x60,0x61,0x66}; ...

  5. (7)Jquery1.8.3快速入门_内容过滤选择器

    一.Jquery的内容过滤选择器: 内容过滤选择器: 1.:contains(text) 选取含有文本内容为text的元素 2. :empty 选取不包含子元素或者文本为空的元素 3.:has(sel ...

  6. Java学习笔记之——final关键字

    最终的,最后的 可以修饰:变量.方法.类 (1) 修饰变量 不可改变,即常量,只能赋值一次,赋值之后不可改变 a. 修饰属性:private final int num; 要求属性要显式赋值 通常在属 ...

  7. Eclipse中SVN插件的安装和配置(在线安装)

    公司项目中用到了svn来管理项目,然后需要在Eclipse中进行配置.网上参考了很多资料,离线安装的方式装上了,但是导入项目后报错,可能是离线安装包的问题.然后又采用了Eclipse在线安装的方式,总 ...

  8. String的坑

       想必大家在熟悉不过了,不错今天就遇到了这个万年坑,哪怕喜欢翻源码的人,也不屑一顾翻它的源码,良言相劝最好翻下源码. 1. String为啥被定义为final ? 2. String是线程安全的么 ...

  9. JavaScript机器学习之线性回归

    译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师. 原文: Machine Learning with JavaScript : Part 1 译者: Fundebug ...

  10. 有状态(Stateful)与无状态(Stateless)

    1.有状态(Stateful): 有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,类里面有成员变量,而且成员变量是可变的,是非线程安全的.在不同方法调用间 ...