最近在从头看一些基础东西,重新看了下JDBC,详细复习整理了一下关于的知识
首先JDBC是什么
JDBC是java定义的一系列接口,然后由各厂商去实现,java是主导者定制标准,各大厂商去实现 独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。
怎么使用
网上比较流行的口诀 贾琏欲执事
具体步骤例子如下:
step1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
step2.创建链接
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.0:3306/index?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai", "index", "@index");
step3.创建Statement对象,用于执行静态sql语句并返回其生成的结果的对象
String sql="update dmsfull_day set create_stime='2022-01-27 02:21:49' where id=1100326";
Statement statement=connection.createStatement();
step4.执行sql
int count = statement.executeUpdate(sql);
step5.释放资源
statement.close();
connection.close();
组建详解:
DriverManager详解:
1.注册驱动
2.创建数据库连接
注册驱动详解:
语句:Class.forName("com.mysql.cj.jdbc.Driver");
因为从jdk1.5以后使用了jdbc4,不在需要显示调用Class.forName()注册驱动而是自动调用驱动jar包下META-INF\services\java.sql.Driver文本中的类名称去注册
点开mysql-connector-java包->meta-inf->services->java.sql.Driver,会有加载的驱动名称om.mysql.cj.jdbc.Driver
点开代码Class.forName("com.mysql.cj.jdbc.Driver");的Driver,会发现静态代码中使用了DriverManager.registerDriver(new Driver());注册驱动
创建数据库连接详解:
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.0.0:3306/ndex4?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai", "index", "@index");
DriverManager.getConnection(连接,用户名,密码)
连接:
jdbc:数据库类型://ip或者域名:端口号/数据库名称?参数1=值1,参数2=值2 本机可以省略ip/域名
Connection详解:
1.创建statement
2.管理事务
创建statement
statement 普通执行sql
prepareStatement(sql) 防止sql注入 prepareStatement.setString(参数顺序,参数值)
callableStatement(sql) 执行存储过程
管理事物
开启事物 conneciton.setAutoCommit(true) true自动提交,false手动提交,默认自动提交
提交事物 connection.commit()
回滚事物 connection.rollback()
Statement详解:
执行sql
exexuteUpdate
执行DDL,DML等语句,DML返回影响条数,比如更新,DDL返回成功后也可能返回0
executeQuery
执行DQL语句,返回ResultSet结果集
ResultSet详解:
封装了DQL语句的结果
while(resultSet.next()) 是否有下一行,并读取下一行
getXXX() 取得字段,根据不同类型,getString,getIn
参数是列编号或者列名 getStirng(1),getString("name")
PrepareStatement详解:
预编译sql并执行,防止sql注入
在创建prepareStatement的时候就要传入sql
String sql="update dmsday set create_stime='2022-01-27 02:21:49' where id=?";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1,"1100326"); 设置参数,下标从1开始
preparedStatement.executeUpdate();