1、加载驱动

这是1.8版本包里面的,如果是1.5的话可以把cj除去

//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");

2、获得连接

 //2、打开连接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "123456");

3、编写sql

  //3. 预处理sql语句PreparedStatement preparedStatement = connection.prepareStatement("insert into hero(username,sex,age,type,price,aag) values(?,?,?,?,?,?)");

4、获得执行sql语句的对象

//4. 获得执行sql语句的对象preparedStatement.setString(1,"金蝉");preparedStatement.setString(2,"男");preparedStatement.setString(3,"11");preparedStatement.setString(4,"法师");preparedStatement.setString(5,"18888");preparedStatement.setString(6,"100");

5、执行sql语句,并返回结果

//5. 执行sql语句,并返回结果preparedStatement.execute();
//基于查询语句
ResultSet resultSet = preparedStatement.executeQuery();

6、处理结果

(这个是基于第五步的查询语句)

//6. 处理结果while (resultSet.next()){System.out.println(resultSet.getString(1));}

7、释放资源

   //7. 释放资源preparedStatement.close();connection.close();

jdbc事务

1.只要中途出现错乱都两边都要回滚回去,不会执行下一步

 /*** 模拟转账* @param args*/public static void main(String[] args)  {Connection connection=null;try {//1、加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//2、打开连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/game", "root", "123456");//启动手动提交connection.setAutoCommit(false);//3、预处理mysqlPreparedStatement preparedStatement = connection.prepareStatement("update a set  money = money - ? where id = ?");preparedStatement.setDouble(1,500);preparedStatement.setInt(2,1);int num = preparedStatement.executeUpdate();System.out.println(num);System.out.println(1/0);preparedStatement.setDouble(1,-500);preparedStatement.setInt(2,2);num = preparedStatement.executeUpdate();System.out.println(num);//提交事务connection.commit();} catch (Exception e) {try {//事务回滚connection.rollback();} catch (SQLException ex) {ex.printStackTrace();}}}

1.数据库操作失败数据

1.数据库操作成功后的数据

JDBC示例:

要创建DBUtils工具类

package com.blb.day01;import java.sql.*;public class DBUtils {static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 获取连接* @return* @throws ClassNotFoundException* @throws SQLException*/public static Connection getConnection() throws ClassNotFoundException, SQLException {return DriverManager.getConnection("jdbc:mysql://localhost:3306/game","root","123456");}/*** 执行增删改查* @param connection* @param sql* @param params* @return* @throws SQLException*/public static int executeUpdate(Connection connection, String sql, Object... params) throws SQLException {return setParams(connection,sql,params).executeUpdate();}/*** 设置参数* @param connection* @param sql* @param params* @return*/private static PreparedStatement setParams(Connection connection, String sql, Object[] params) throws SQLException {PreparedStatement preparedStatement = connection.prepareStatement(sql);for (int i = 0; i <params.length ; i++) {preparedStatement.setObject(i+1,params[i]);}return preparedStatement;}/*** 执行查询* @param connection* @param sql* @param params* @return* @throws SQLException*/public static ResultSet executeQuery(Connection connection, String sql, Object... params) throws SQLException {return setParams(connection,sql,params).executeQuery();}
}

测试类:

package com.blb.day01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;public class Demo1 {
static Scanner scanner = new Scanner(System.in);public static void main(String[] args) throws SQLException, ClassNotFoundException {while (true){String[] strings ="录入员工信息,删除员工信息,修改员工信息,员工打卡,查看全部员工打卡信息,查看指定员工全部打卡信息,查看指定员工指定日期打卡信息,退出".split(",");for (int i = 0; i <strings.length ; i++) {System.out.println(i+","+strings[i]);}System.out.println("请输入:");int num = scanner.nextInt();switch (num) {case 0:addEmp();break;case 1:delEmp();break;case 2:updateEmp();break;case 3:getSignInfo();break;case 4:System.exit(0);break;default:System.out.println("输入有误请重新输入");break;}}}/*** 修改*/private static void updateEmp() throws SQLException, ClassNotFoundException {System.out.println("请输入要打卡的员工编号:");int no = scanner.nextInt();System.out.println("请输入新的姓名:");String name = scanner.next();int i = DBUtils.executeUpdate(DBUtils.getConnection(), "update emp set ename=? where empno = ?", name, no);if (i>0){System.out.println("修改成功!");}else {System.out.println("修改失败!");}}/*** 员工打卡*/private static void getSignInfo() throws SQLException, ClassNotFoundException {while (true){System.out.println("请输入要打卡的员工编号:");int num = scanner.nextInt();ResultSet resultSet = DBUtils.executeQuery(DBUtils.getConnection(), "select * from emp where empno=?", num);if (resultSet.next()){String date = LocalDate.now().toString();ResultSet resultSet1 = DBUtils.executeQuery(DBUtils.getConnection(), "select * from signinfo where empno=? and signdate = ?", num, date);String datetime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());if (resultSet1.next()){DBUtils.executeUpdate(DBUtils.getConnection(),"update signinfo set signout = ? where empno = ?",datetime,num);System.out.println("下班打卡成功!");}else {DBUtils.executeUpdate(DBUtils.getConnection(),"insert into signinfo(empno, signdate, signin) values (?,?,?)",num,LocalDate.now(),datetime);System.out.println("上班打卡成功!");}break;}else {System.out.println("员工不存在!!");}}}/*** 删除*/private static void delEmp() throws SQLException, ClassNotFoundException {System.out.println("请输入要删除的员工编号:");int num = scanner.nextInt();int i = DBUtils.executeUpdate(DBUtils.getConnection(), "delete from emp where empno=?", num);if (i>0){System.out.println("删除失败");}else {System.out.println("删除成功!");}}/*** 新增*/private static void addEmp() throws SQLException, ClassNotFoundException {System.out.println("请输入要添加员工姓名:");String name = scanner.next();DBUtils.executeUpdate(DBUtils.getConnection(),"insert into emp(ename) values(?)",name);System.out.println("增加成功!");}
}

JDBC操作步骤和JDBC事务相关推荐

  1. JDBC操作步骤及数据库连接操作

    2019独角兽企业重金招聘Python工程师标准>>> 一.JDBC操作步骤 1.加载数据库驱动程序:各个数据库都会提供JDBC的驱动程序开发包,直接把JDBC操作所需要的开发包(一 ...

  2. java jdbc 操作_Java:JDBC操作

    内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如: DriverManager类 Connection接口 Statement接口 ResultSet接口 1.Clas ...

  3. jdbc操作步骤和preparedStatment相比Statment的好处

    java操纵数据库封装了一组API,通过这组API可以透明的操作各种数据库,一般来讲,操纵数据库的步骤是: 一. try{ 1.加载数据库驱动 Class.forName("数据库驱动类&q ...

  4. JDBC简单操作步骤总结

    JDBC 操作步骤 1:加载数据库驱动 2:建立与数据库之间的连接 3:发送SQL语句 4:获取查询结果 5:使用完之后,应进行断开连接,减少服务器负担. frist 提前下载相关jar包,添加相应依 ...

  5. JDBC操作1:实现对数据库crud操作

    目录 1. JDBC概念 1.1 什么是JDBC 1.2 JDBC实现形式 1.3 jdbc操作API介绍 1.4 jdbc操作步骤(固定) 2. JDBC实现对数据库crud操作 2.1 第一步 加 ...

  6. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表 - 解无邪

    本文目录: 1.自定义JDBC框架 --数据库元数据:DataBaseMetaData 2.自定义JDBC框架 --数据库元数据:DataBaseMetaData 3.自定义JDBC框架 --结果集元 ...

  7. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  8. 数据库MySQL基础---JDBC开发步骤--JDBC封装工具类--PreparedStatement实现CRUD操作

    JDBC简介 1.JDBC定义Java数据库连接(Java Database Connectivity,简称JDBC):是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询 ...

  9. oracle_jdbc新建实例,JDBC的操作步骤和实例

    创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...

最新文章

  1. java解数独_java解数独
  2. 农科院张西美组助研招聘(事业编、解决北京户口)
  3. tdk磁材手册_TDK的铁氧体磁铁(FB系列) - TDK Product Center.PDF
  4. Oracle 11g Release 2 (11.2) for Microsoft Windows (32-Bit)安装与卸除
  5. QT Creator使用matlab库文件读取.mat文件数据
  6. yunyang1994 tensorflow_yolov3训练报错:IndexError: index 68 is out of bounds for axis 1 with size 68 数据清洗
  7. 那些年,我还在学习actionscript
  8. php数组按时间排序,按日期时间在PHP中对数组中的数组进行排序
  9. protocol buffer相关
  10. linux uuid挂载磁盘_Linux磁盘设备磁盘设备的UUID标识代码(sda,sdb,sdc…)变化的解决办法...
  11. linux脚本设置字体颜色,xshell设置字体及背景颜色方法详细教程
  12. HTML中的元素分类
  13. iPhone微信聊天记录误删怎么办?怎么恢复微信删除的记录
  14. 【原创】赋值法写基础解系中解向量
  15. matlab 根式化简,薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算最新章节_薛定宇著_掌阅小说网...
  16. 如何用C#实现电子面单批量打印功能
  17. 回复整理 080307
  18. 陕西省建筑标准规范合集
  19. 网络安全之蜜罐是什么?有哪些不同的类型?
  20. 谷歌三篇大数据论文之mapreduce读后感

热门文章

  1. linux远程连接和上传文件
  2. LINUX查看已注册设备号
  3. openCV 隔帧读取视频帧的方式
  4. 【时序】应用于时间序列的 Transformer 综述论文笔记
  5. Pock 0.8.1 中文版 (在TouchBar中显示Dock栏图标)
  6. Nifty Gateway与区块链技术:探索数字艺术的革命
  7. 爬虫技术助力Nifty Gateway上的NFT市场研究
  8. 同一天发布新款手机,vivo与小米继续鏖战性价比手机市场
  9. Win10系统下如何更改磁盘盘符
  10. E480安装ubuntu18.04出现进入wifi没有无线适配器的处理方案