JBDC[mysql][java]
目录
- 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]相关推荐
- mysql:java.lang.ClassCastException: java.base/java.math.BigInteger出现类型转换错误
一.错误信息 mysql:java.lang.ClassCastException: java.base/java.math.BigInteger cannot be 二.解决方法 这个就是因为你用的 ...
- eclipse启动mysql报错_Eclipse+mysql+java Eclipse中运行没有问题,但打包后运行不了,也不报错,求高手指点...
这几天用Eclipse+mysql+java编写了一个班级信息管理的软件.在Eclipse里运行没有问题所有功能都没有问题,但无论用Eclipse中自带的export生成可执行的jar包,还是用fat ...
- mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题
mysql/Java服务端对emoji(utf8mb4编码)的支持有关的问题 mysql中保存4字节长度的UTF-8字符(例如emoji表情),就需要使用 utf8mb4 字符集. 如果要写入emoj ...
- MySQL Java JDBC
文章目录 MySQL & Java & JDBC 1. JDBC本质 1.1 ".jar文件" -- 驱动包下载与配置 2. JDBC编程 2.1 构建数据源 2. ...
- 使用LINUX云服务器搭建web、小程序服务器MySql+Java+Tomcat
记小白第一次使用LINUX搭建web.小程序服务器 MySql+Java+Tomcat (很全的安装过程收集整合) 一.使用LINUX搭建服务器的原因 准备工具 二.下载配置 2.1 阿里云服务器的购 ...
- mysql java orm_ObjectiveSQL(Java ORM) 之 MySQL 实战
第一步,引用Maven依赖: com.github.braisdom objective-sql 1.3.4 第二步,使用Annotation 定义一个DomainModel : import com ...
- mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)
在Mysql数据库中日期跟时间有两种: 1.date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2.dateitme就是可以储存日期同时 ...
- java mysql jsp分页_JSP+MYSQL+Java类优化分页的实例
在JSP中经常要用到查询数据库中的数据,同常我们的做法是使用SQL语句"select * from tablename order by id desc",这样的做法有一个缺点,当 ...
- mysql , java length
2019独角兽企业重金招聘Python工程师标准>>> mysql length是mysql的一个用来来获取字符串长度的内置函数方法, 同样的获取字符串长度的还有char_lengt ...
最新文章
- 获取应用的当前版本号获取当前android系统的版本号
- 如何让hierarchyviewer调试查看商业版真机上的应用
- 一图解明Android Studio项目文件结构各部分作用
- 《SAP 传奇人物》系列人物故事:看透生死远没有操作0和1那么简单
- opencv 多边形近似物体形状
- 配置 SQL Server 2005 以允许远程连接(服务器端)
- linux mysql libc.so_Linux libc依赖包问题如何解决?
- 《Linux内核分析》第一周学习报告
- 苹果手机输入屏保后锁屏_苹果手机动态锁屏屏保怎么设置
- 在linux中安装搜狗输入法,如何在ubuntu下安装搜狗输入法
- HFSS周期结构超表面结构单元仿真
- H 幻方变换(puzzle)(NYIST 2019年校赛)
- 5-27 家谱处理 (30分)
- DockOne微信分享(六十六): Docker网络方案初探
- 凭借一句话获得图灵奖的Pascal之父——Nicklaus Wirth
- iOS 开发 解决UICollectionView的多组头部视图样式不一样复用时发生错乱问题
- 计算机作业攒机单,计算机攒机作业.docx
- 双十一来临,仓储物流快递安全保障解决方案
- python将日期分隔成单独的年月日时分列
- PHP导入(百万级)Excel表格数据