目录

  • 1:JBDC介绍
  • 2:JDBC编程六步
    • 准备工作
    • JBDC六步
    • 类加载的方式/读取资源文件的方式
    • JDBC第五步处理结果集
  • 3:PreparedStatement的使用
  • 4:JDBC事务机制
  • 5:悲观锁和乐观锁

1:JBDC介绍

JDBC:Java DataBase Connectivty(java语言连接数据库)

JDBC的本质是一个接口,功能是java用来连接数据库的接口
每一个数据库的实现原理不同,而jdbc提供了每个数据库的连接方式
jdbc接口让java语言连接数据库的灵活性增高

2:JDBC编程六步

准备工作

准备JDBC的jar包(在C:\Program Files (x86)\MySQL\Connector J 8.0\)目录下的mysql-connector-java-8.0.26.jar


在高级系统设置中的环境变量中的CLASSPATH中添加mysql-connector-java-8.0.26.jar的目录:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\mysql-connector-java-8.0.26.jar;%JAVA_HOME%
找到mysql-connector-java-8.0.26.jar就可以

IDEA配置方法:


选择模块导入jar包

JBDC六步

package com.jdbc;import java.sql.*;public class JdbcTest {public static void main(String[] args) {Connection connection = null;Statement statement = null;try {//第一步:注册驱动//有受检异常需要try或者抛出/*代码:java.sql.Driver driver = new com.mysql.cj.jdbc.Driver();用父类型的引用(java.sql.Driver)指向子类型的对象(com.mysql.cj.jdbc.Driver())*/Driver driver = new com.mysql.cj.jdbc.Driver();DriverManager.registerDriver(driver);//第二步:获取连接/*Connection获取连接,使用DriverManager的静态方法getConnection();需要穿三个参数:url是连接的 数据库类型mysql 连接地址localhost 数据库名ccxgusername是数据库的登陆名password是数据库的登陆密码*/String url = "jdbc:mysql://localhost/ccxg";String username = "root";String password = "123456";connection = DriverManager.getConnection(url,username,password);//第三步:获取数据库操作对象statement = connection.createStatement();//第四步:执行sql语句String sql = "insert into tbl_user(id,name,sex) values(3,'张三','男')";/*int count是返回结果,如果插入成功则返回1 加入插入3条 成功的话则会返回3*/int count = statement.executeUpdate(sql);} catch (SQLException e) {e.printStackTrace();}finally {//第六步:关闭资源/*关闭资源需要从小打到关先关闭statement再关闭Connection注:不能一起try catch 要分开try*/if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

结果:

类加载的方式/读取资源文件的方式

类加载的方式:

package com.jdbc;import java.sql.*;public class JdbcTest {public static void main(String[] args) {Connection connection = null;Statement statement = null;try {//用类加载的方式注册驱动:Class.forName();Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://localhost/ccxg";String username = "root";String password = "123456";connection = DriverManager.getConnection(url,username,password);statement = connection.createStatement();String sql = "insert into tbl_user(id,name,sex) values(3,'张三','男')";int count = statement.executeUpdate(sql);} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}finally {if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

读取资源文件的方式:

创建资源文件:jdbc.properties
内容如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/web-crm
jdbc.name=root
jdbc.password=123456
package com.jdbc;import java.sql.*;
import java.util.ResourceBundle;public class JdbcTest {public static void main(String[] args) {Connection connection = null;Statement statement = null;ResourceBundle bundle = ResourceBundle.getBundle("jdbc");try {Class.forName(bundle.getString("jdbc.Driver"));String url = bundle.getString("jdbc.url");String username = bundle.getString("jdbc.name");String password = bundle.getString("jdbc.password");connection = DriverManager.getConnection(url,username,password);statement = connection.createStatement();String sql = "insert into tbl_user(id,name,sex) values(3,'张三','男')";int count = statement.executeUpdate(sql);} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}finally {if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

JDBC第五步处理结果集

package com.jdbc;import java.sql.*;
import java.util.ResourceBundle;public class JdbcTest {public static void main(String[] args) {Connection connection = null;Statement statement = null;ResourceBundle bundle = ResourceBundle.getBundle("com/jdbc/jdbc");/*创建结果集的对象*/ResultSet resultSet = null;try {Class.forName(bundle.getString("jdbc.driver"));String url = bundle.getString("jdbc.url");String username = bundle.getString("jdbc.name");String password = bundle.getString("jdbc.password");connection = DriverManager.getConnection(url,username,password);statement = connection.createStatement();String sql = "select * from tbl_user";resultSet = statement.executeQuery(sql);//专门执行DQL语句的方法//处理结果集//循环遍历结果集/*resultSet.next()这个方法如果有数据则返回true没有返回falseresultSet.getString("字段名");获取一行的数据*/while(resultSet.next()){Integer id = resultSet.getInt("id");String name = resultSet.getString("name");String sex = resultSet.getString("sex");System.out.println(id+"  "+name+"  "+sex);}} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}finally {if(resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(statement != null){try {statement.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

结果:

3:PreparedStatement的使用

PreparedStatement使用方法(可以解决sql注入等问题):

package com.jdbc;import java.sql.*;
import java.util.ResourceBundle;
import java.util.Scanner;public class JdbcTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Connection connection = null;/*创建PreparedStatement对象预编译的数据操作对象*/PreparedStatement ps = null;ResourceBundle bundle = ResourceBundle.getBundle("com/jdbc/jdbc");ResultSet resultSet = null;try {Class.forName(bundle.getString("jdbc.driver"));String url = bundle.getString("jdbc.url");String username = bundle.getString("jdbc.name");String password = bundle.getString("jdbc.password");connection = DriverManager.getConnection(url,username,password);/*将条件写成?一个?表示一个占位符*/String sql = "select * from tbl_user where name = ?";ps = connection.prepareStatement(sql);//给?占位符传值,按照?个数以1递增 第一个?下标是1//ps.setString参数第一个是?的下标第二个是值ps.setString(1,"zs");//获取结果集不用传参数了resultSet = ps.executeQuery();if(resultSet.next()){Integer id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id+name);}} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}finally {if(resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(ps != null){try {ps.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

4:JDBC事务机制

package com.jdbc;import java.sql.*;
import java.util.ResourceBundle;
import java.util.Scanner;public class JdbcTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Connection connection = null;PreparedStatement ps = null;ResourceBundle bundle = ResourceBundle.getBundle("com/jdbc/jdbc");ResultSet resultSet = null;try {Class.forName(bundle.getString("jdbc.driver"));String url = bundle.getString("jdbc.url");String username = bundle.getString("jdbc.name");String password = bundle.getString("jdbc.password");connection = DriverManager.getConnection(url,username,password);/*关闭自动提交,开启事务机制connection.setAutoCommit(false);*/connection.setAutoCommit(false);String sql = "insert into tbl_user(id,name,sex) values(5,'ww','男')";ps = connection.prepareStatement(sql);int count = ps.executeUpdate();if(count != 1){throw new Exception();}/*如果程序执行到这没有异常的话提交事务connection.commit();*/connection.commit();if(resultSet.next()){Integer id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id+name);}} catch (Exception e) {/*设置回滚事务当程序出现异常时,会执行事务回滚*/if(connection != null){try {connection.rollback();} catch (SQLException ex) {ex.printStackTrace();}}e.printStackTrace();}finally {if(resultSet != null){try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}if(ps != null){try {ps.close();} catch (SQLException e) {e.printStackTrace();}}if(connection != null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

5:悲观锁和乐观锁

悲观行级锁:for update
例子:select ename,sal from emp where sal = 3000 for update;
作用:sal = 3000的数据在事务内被锁住了,其他事务无法对这些数据进行操作

悲观锁特点:事务必须排队,数据锁住了,不能并发
乐观锁特点:支持并发,事务不需要排队,但需要版本号

JBDC[mysql][java]相关推荐

  1. mysql:java.lang.ClassCastException: java.base/java.math.BigInteger出现类型转换错误

    一.错误信息 mysql:java.lang.ClassCastException: java.base/java.math.BigInteger cannot be 二.解决方法 这个就是因为你用的 ...

  2. eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...

    这几天用Eclipse+mysql+java编写了一个班级信息管理的软件.在Eclipse里运行没有问题所有功能都没有问题,但无论用Eclipse中自带的export生成可执行的jar包,还是用fat ...

  3. mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题

    mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 mysql中保存4字节长度的UTF-8字符(例如emoji表情),就需要使用 utf8mb4 字符集. 如果要写入emoj ...

  4. MySQL Java JDBC

    文章目录 MySQL & Java & JDBC 1. JDBC本质 1.1 ".jar文件" -- 驱动包下载与配置 2. JDBC编程 2.1 构建数据源 2. ...

  5. 使用LINUX云服务器搭建web、小程序服务器MySql+Java+Tomcat

    记小白第一次使用LINUX搭建web.小程序服务器 MySql+Java+Tomcat (很全的安装过程收集整合) 一.使用LINUX搭建服务器的原因 准备工具 二.下载配置 2.1 阿里云服务器的购 ...

  6. mysql java orm_ObjectiveSQL(Java ORM) 之 MySQL 实战

    第一步,引用Maven依赖: com.github.braisdom objective-sql 1.3.4 第二步,使用Annotation 定义一个DomainModel : import com ...

  7. mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)

    在Mysql数据库中日期跟时间有两种: 1.date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2.dateitme就是可以储存日期同时 ...

  8. java mysql jsp分页_JSP+MYSQL+Java类优化分页的实例

    在JSP中经常要用到查询数据库中的数据,同常我们的做法是使用SQL语句"select * from tablename order by id desc",这样的做法有一个缺点,当 ...

  9. mysql , java length

    2019独角兽企业重金招聘Python工程师标准>>> mysql length是mysql的一个用来来获取字符串长度的内置函数方法, 同样的获取字符串长度的还有char_lengt ...

最新文章

  1. 获取应用的当前版本号获取当前android系统的版本号
  2. 如何让hierarchyviewer调试查看商业版真机上的应用
  3. 一图解明Android Studio项目文件结构各部分作用
  4. 《SAP 传奇人物》系列人物故事:看透生死远没有操作0和1那么简单
  5. opencv 多边形近似物体形状
  6. 配置 SQL Server 2005 以允许远程连接(服务器端)
  7. linux mysql libc.so_Linux libc依赖包问题如何解决?
  8. 《Linux内核分析》第一周学习报告
  9. 苹果手机输入屏保后锁屏_苹果手机动态锁屏屏保怎么设置
  10. 在linux中安装搜狗输入法,如何在ubuntu下安装搜狗输入法
  11. HFSS周期结构超表面结构单元仿真
  12. H 幻方变换(puzzle)(NYIST 2019年校赛)
  13. 5-27 家谱处理 (30分)
  14. DockOne微信分享(六十六): Docker网络方案初探
  15. 凭借一句话获得图灵奖的Pascal之父——Nicklaus Wirth
  16. iOS 开发 解决UICollectionView的多组头部视图样式不一样复用时发生错乱问题
  17. 计算机作业攒机单,计算机攒机作业.docx
  18. 双十一来临,仓储物流快递安全保障解决方案
  19. python将日期分隔成单独的年月日时分列
  20. PHP导入(百万级)Excel表格数据

热门文章

  1. 11 个最佳免费安全网站
  2. Java中String转为Long
  3. CentOS 7.6 下载和安装
  4. PHP实现图片上传功能
  5. CRUD(增删改查)
  6. BetterGeo Mod 中文
  7. 一拍是多少秒 计算机制音乐,E哥谈如何计算音乐的拍数及每拍时值是多少数学好学音乐有帮助吗...
  8. 上半年亏损之下,卫龙第三次冲刺港股IPO
  9. (二)编译PVE内核5.10.6-1-pve及安装内核补丁fullconeNat
  10. Galaxy Tab3 10.1如何开启被隐藏的开发者选项?