基础的工具类

JDBC进行CRUD操作会有很多重复的代码,我们把重复的代码汇总到一个类里就可以让程序变得简洁很多

package JDBCLearning;import javax.xml.transform.Result;
import java.sql.*;
import java.util.ArrayList;/*** Created by junk beat on 2019/2/22.*/
public class jdbcUtil {//连接数据库的基础信息private static final String connectionURL = "jdbc:mysql://localhost:3306/web01?useUnicode=true&characterEncoding=UTF-8";private static final String username = "root";  //登录数据库的账号private static final String password = "root";  //登录数据库的密码//建立连接public static Connection createConnection(){try{Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection(connectionURL, username, password);} catch (ClassNotFoundException e){e.printStackTrace();} catch (SQLException e){e.printStackTrace();}return null;    //建立连接失败返回空指针}//关闭连接操作public static void close(ResultSet rs, Statement stmt, Connection con){closeResult(rs);closeStatement(stmt);closeConnection(con);}//关闭结果集private static void closeResult(ResultSet rs){try {if (rs != null) rs.close();} catch (SQLException e){e.printStackTrace();}}//关闭语句执行声明private static void closeStatement(Statement stmt){try {if (stmt != null) stmt.close();} catch (SQLException e){e.printStackTrace();}}//关闭连接private static void closeConnection(Connection con){try {if (con != null) con.close();} catch (SQLException e){e.printStackTrace();}}
}

表的结构

我们创建一个简单的表进行测试

use web01;
/*创建表*/
drop table if exists test;
create table test (id int primary key auto_increment,username varchar(16) not null unique,password varchar(16) not null,account int default 5000
);/*插入数据*/
insert into test (username, password) values ("王大柱", "123456");
insert into test (username, password) values ("Ben", "123456");
insert into test (username, password) values ("White", "123456");
insert into test (username, password) values ("Jessis Pinkman", "123456");
insert into test (username, password) values ("Hank", "123456");
insert into test (username, password) values ("王兰花", "123456");
insert into test (username, password) values ("李铁蛋", "123456");

selectAll方法

查询表中所有数据的方法

    //查询所有结果方法public static void selectAll(String tableName){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();stmt = con.createStatement();rs = stmt.executeQuery("select * from " + tableName);//执行sql语句while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getInt(4));}} catch (SQLException e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}

登录效验

   //登录效验public static boolean selectByUsernamePassword(String username, String password){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();stmt = con.createStatement();String sql = "select * from test where username = '"+username+"' and password = '"+password+"'";rs = stmt.executeQuery(sql);if(rs.next()){System.out.println("登录成功");return true;} else {System.out.println("登录失败");return false;}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}System.out.println("登录失败");return false;}

防止SQL注入的登录效验

    //防止SQL注入的登录效验public static boolean selectByUP(String username, String password){Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "select * from test where username = ? and password = ?";pstmt = con.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);rs = pstmt.executeQuery();if(rs.next()){System.out.println("登录成功");return true;} else {System.out.println("登录失败");return false;}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, pstmt, con);}System.out.println("登录失败");return false;}

分页查询

查询的数据是从 (page - 1)*count 到 count

    //分页查询//参数分别是要查询的页数和每一页有多少行数据public static void PagingQuery(int page, int count){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "select * from test limit " + (page - 1) * count + ", " + count;stmt = con.createStatement();rs = stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getInt(4));}} catch (SQLException e){e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}

插入,删除和修改操作

    //插入,删除和修改操作public static void insert(String username, String password){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "insert into test (username, password) values (?, ?)";stmt = con.prepareStatement(sql);stmt.setString(1, username);stmt.setString(2, password);int result = stmt.executeUpdate();  //返回值代表受到影响的行数if(result != -1){System.out.println("插入成功");}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}public static void delete(String username){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = JDBCUtils.getConnection();String sql = "delete from test where username = ?";stmt = con.prepareStatement(sql);stmt.setString(1, username);int result = stmt.executeUpdate();if(result > 0){System.out.println("删除成功");}} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.closeP(rs, stmt, con);}}public static void update(String username, String newPassword){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "update test set password = ? where username = ?";stmt = con.prepareStatement(sql);stmt.setString(1,newPassword);stmt.setString(2, username);int result = stmt.executeUpdate();if(result > 0){System.out.println("修改成功");}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}

事务操作

    //事务操作public static void transferAccounts(String username1, String username2, int money){Connection con = null;PreparedStatement stmt1 = null;PreparedStatement stmt2 = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();//开启事务con.setAutoCommit(false);  //是否自动提交String sql = "update test set account = account - ? where username = ?";stmt1 = con.prepareStatement(sql);stmt1.setInt(1,money);stmt1.setString(2, username1);stmt1.executeUpdate();//String s = null;//s.charAt(2);sql = "update test set account = account + ? where username = ?";stmt2 = con.prepareStatement(sql);stmt2.setInt(1,money);stmt2.setString(2, username2);stmt2.executeUpdate();con.commit();   //提交事务} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt1, stmt2, con);}}

连接池

使用完后归还到ArrayList,不用关闭,这样就可以节省创建连接的时间

    private static ArrayList<Connection> conList = new ArrayList<Connection>();//静态代码块先于方法执行static {for(int i=0; i<5; i++){Connection con = createConnection();conList.add(con);}}public static Connection getConnection(){if(conList.isEmpty()==false){Connection con = conList.get(0);conList.remove(con);    //移除return con;} else {return createConnection(); //创建一个新链接}}

所有代码汇总

package JDBCLearning;import java.sql.*;/*** Created by junk beat on 2019/2/22.*/
public class JDBCop {public static void main(String[] args) throws SQLException{//selectAll("test");//selectByUsernamePassword("王兰花","123456");//selectByUP("王兰花","123456");//PagingQuery(1, 5);//insert("李大嘴", "1235480");//delete("李大嘴");//update("王兰花","5462145");transferAccounts("王兰花","White", 1000);}//查询所有结果方法public static void selectAll(String tableName){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();stmt = con.createStatement();rs = stmt.executeQuery("select * from " + tableName);//执行sql语句while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getInt(4));}} catch (SQLException e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}//登录效验public static boolean selectByUsernamePassword(String username, String password){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();stmt = con.createStatement();String sql = "select * from test where username = '"+username+"' and password = '"+password+"'";rs = stmt.executeQuery(sql);if(rs.next()){System.out.println("登录成功");return true;} else {System.out.println("登录失败");return false;}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}System.out.println("登录失败");return false;}//防止SQL注入的登录效验public static boolean selectByUP(String username, String password){Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "select * from test where username = ? and password = ?";pstmt = con.prepareStatement(sql);pstmt.setString(1, username);pstmt.setString(2, password);rs = pstmt.executeQuery();if(rs.next()){System.out.println("登录成功");return true;} else {System.out.println("登录失败");return false;}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, pstmt, con);}System.out.println("登录失败");return false;}//分页查询//参数分别是要查询的页数和每一页有多少行数据public static void PagingQuery(int page, int count){Connection con = null;Statement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "select * from test limit " + (page - 1) * count + ", " + count;stmt = con.createStatement();rs = stmt.executeQuery(sql);while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getInt(4));}} catch (SQLException e){e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}//插入,删除和修改操作public static void insert(String username, String password){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "insert into test (username, password) values (?, ?)";stmt = con.prepareStatement(sql);stmt.setString(1, username);stmt.setString(2, password);int result = stmt.executeUpdate();  //返回值代表受到影响的行数if(result != -1){System.out.println("插入成功");}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}public static void delete(String username){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = JDBCUtils.getConnection();String sql = "delete from test where username = ?";stmt = con.prepareStatement(sql);stmt.setString(1, username);int result = stmt.executeUpdate();if(result > 0){System.out.println("删除成功");}} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.closeP(rs, stmt, con);}}public static void update(String username, String newPassword){Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();String sql = "update test set password = ? where username = ?";stmt = con.prepareStatement(sql);stmt.setString(1,newPassword);stmt.setString(2, username);int result = stmt.executeUpdate();if(result > 0){System.out.println("修改成功");}} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt, con);}}//事务操作public static void transferAccounts(String username1, String username2, int money){Connection con = null;PreparedStatement stmt1 = null;PreparedStatement stmt2 = null;ResultSet rs = null;try {con = jdbcUtil.createConnection();//开启事务con.setAutoCommit(false);  //是否自动提交String sql = "update test set account = account - ? where username = ?";stmt1 = con.prepareStatement(sql);stmt1.setInt(1,money);stmt1.setString(2, username1);stmt1.executeUpdate();//String s = null;//s.charAt(2);sql = "update test set account = account + ? where username = ?";stmt2 = con.prepareStatement(sql);stmt2.setInt(1,money);stmt2.setString(2, username2);stmt2.executeUpdate();con.commit();   //提交事务} catch (Exception e) {e.printStackTrace();} finally {jdbcUtil.close(rs, stmt1, stmt2, con);}}
}

工具类

package JDBCLearning;import javax.xml.transform.Result;
import java.sql.*;
import java.util.ArrayList;/*** Created by junk beat on 2019/2/22.*/
public class jdbcUtil {//连接数据库的基础信息private static final String connectionURL = "jdbc:mysql://localhost:3306/web01?useUnicode=true&characterEncoding=UTF-8";private static final String username = "root";  //登录数据库的账号private static final String password = "root";  //登录数据库的密码private static ArrayList<Connection> conList = new ArrayList<Connection>();//静态代码块先于方法执行static {for(int i=0; i<5; i++){Connection con = createConnection();conList.add(con);}}public static Connection getConnection(){if(conList.isEmpty()==false){Connection con = conList.get(0);conList.remove(con);    //移除return con;} else {return createConnection(); //创建一个新链接}}//建立连接public static Connection createConnection(){try{Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection(connectionURL, username, password);} catch (ClassNotFoundException e){e.printStackTrace();} catch (SQLException e){e.printStackTrace();}return null;    //建立连接失败返回空指针}//关闭连接操作public static void close(ResultSet rs, Statement stmt, Connection con){closeResult(rs);closeStatement(stmt);closeConnection(con);}public static void close(ResultSet rs, PreparedStatement pstmt, Connection con){closeResult(rs);closePrepareStatement(pstmt);closeConnection(con);}public static void close(ResultSet rs, PreparedStatement pstmt1, PreparedStatement pstmt2, Connection con){closeResult(rs);closePrepareStatement(pstmt1);closePrepareStatement(pstmt2);closeConnection(con);}//关闭结果集private static void closeResult(ResultSet rs){try {if (rs != null) rs.close();} catch (SQLException e){e.printStackTrace();}}//关闭语句执行声明private static void closeStatement(Statement stmt){try {if (stmt != null) stmt.close();} catch (SQLException e){e.printStackTrace();}}//关闭pstmtprivate static void closePrepareStatement(PreparedStatement pstmt){try {if (pstmt != null) pstmt.close();} catch (SQLException e){e.printStackTrace();}}//关闭连接private static void closeConnection(Connection con){try {if (con != null) con.close();} catch (SQLException e){e.printStackTrace();}}
}

JDBC基础操作汇总相关推荐

  1. 第一章 JDBC基础操作 ② 代码

    第一章 JDBC基础操作 ② 代码 1.jar包的安装与异常处理 1.1安装jar包 1.2 异常报错 3.异常处理 2.连接数据库 3.调用数据库 3.1 异常处理 4.数据库操作:增删改查 5.定 ...

  2. 深入浅出学习Hibernate框架(二):JDBC基础操作

    上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...

  3. OpenCV图像处理基础操作汇总

    1.使用opencv读写图像 OpenCV支持jpg.png.tif等格式图像读取. import cv2import matplotlib.pyplot as pltpath = 'lena.jpg ...

  4. MySQL基础操作汇总二

    单表查询: SELECT * FROM 数据名; 简单的获取表中的所有数据 SELECT 字段1,字段2.. FROM 表名; 简单的从表中查询指定的字段 SELECT * FROM 表名 ORDER ...

  5. Shapely——基础操作汇总

    参考文章: Shapely 用户手册 The Shapely User Manual 矢量数据的空间分析:使用Shapely 基本类型 所有的类型都可以通过list点集的形式,定义得到: from s ...

  6. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作

    什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...

  7. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  8. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  9. python基础知识资料-学习Python列表的基础知识汇总

    千里之行,始于足下.要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好.今天,本喵带大家仔细温习一下Python的列表.温故而知新,不亦说乎. 当然,温习的同时也要发散思考,因为有些看似无关紧要 ...

最新文章

  1. 13.2.6 会话跟踪技术
  2. python学习——把计算GC含量的代码封装成函数
  3. tail实时监控日志qps
  4. Android Studio 之 NDK篇
  5. leetcode914. 卡牌分组
  6. 数组对象的slice和splice方法
  7. 智能会议系统(2)---Android 2.3 APIs SIP-based VoIP
  8. 大工20秋《计算机原理》在线作业2答案,奥鹏大工15秋《计算机组成原理》在线作业2满分答案...
  9. 关于JS访问文件服务器的HTTP文件地址实现文件下载
  10. rot移位密码c++实现
  11. Multisim彻底卸载干净方法
  12. Cortex-M0芯片GPIO详解
  13. URL 长链地址转短链 URL地址
  14. 北京2008年奥运会体育图标
  15. ‘EagerTensor‘ object has no attribute ‘reshape‘处理图像数据
  16. java反射 枚举_Java反射应用之获取枚举类的枚举
  17. 计算机1101与0100逻辑加,算术加和逻辑加分别什么意思
  18. 变分模态分解 python_浅谈VMD(变分模态分解)
  19. 来自不同行业领域的50多个对象检测数据集
  20. 我的高德地图之定位,Marker,位置信息。

热门文章

  1. 罗克韦尔(AB)PLC与MySQL/SQLServer/PostgreSQL数据库对接
  2. windows 用户的完美“瘦身”攻略
  3. 表白公式计算机,表白公式数学公式简单的方式
  4. fasttext文本分类python实现_一个使用fasttext训练的新闻文本分类器/模型
  5. 2022起重机械指挥判断题及答案
  6. 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立大会召开...
  7. 解决(CRON) info (No MTA installed, discarding output)
  8. matlab 坐标不用科学计数法,matlab不用科学计数法
  9. ​相亲APP开发软件为广大单身男女牵线搭桥​
  10. 2018 Arab Collegiate Programming Contest (ACPC 2018) H - Hawawshi Decryption 数学 + BSGS