JDBC基础总结 (超详细)

#内容包含了JDBC的连接以及基本DML和DQL操作,容易被忽略掉的元数据也会讲到

 注:此篇示例代码均为示范, 具体的异常或错误同学们自己去处理。

数据库的连接有几种方式,类型分为连接池和普通连接
普通连接:
1:此种方式最常用
Class.forName(“com.mysql.jdbc.Driver”);
Connection con = DriverManager.getConnection(url,user,password)

2:Driver driver=new com.mysql.jdbc.Driver();
String url = url; //一般来说为"jdbc:mysql://Localhost:3306/数据库名?"
Properties info = new Properties();
info.put(“user”, 你的用户名); //一般来说为 root
info.put(“password”, 你的密码)
Connection connection = dirver.connect(url, info);

3:Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(url,user,password);
数据库连接池是根据连接池的不同类型而定的,有几种连接池,分享下我的资源:
https://blog.csdn.net/qq_42394457/article/details/85849144 ,这是jar包的配置,
至于详细的代码大家参考一下这个 吧,我就不给予详细的说明了,这个对于初学者来说不是重点,资源才是重点

=======================================
以下Connection 对象直接用 con 代替

#连接之后,就可以用SQL语句操作数据库了
1;Statement
Statement 由con 创建 Statement sta = con.createStatement();再由sta执行Sql语句
但是用Statement可能会出现一些安全问题如注入,详情由大家自己查阅
执行代码: sta.execute(sql语句),一个小提示,因为这里不是预编译语句所以如果需要插入自己的字符串对象的话可以采用这样的方式拼接如:
sta.execute("SELECT * FROM db1 WHERE name = ‘小明’ ")

2 预编译 PreparedStatement
对于Statement来说 ,PreparedStatement 有很多好处,从名字可以看出,PreparedStatement是预编译的,所以它会事先预编译语句,然后再读取传入的参数,这样一来,效率会大大提高。预编译语句还可以防止注入危险,不用拼接字符串麻烦操作,一般来说主要使用这个
执行代码:PreparedStatement ps = con.prepareStatement(“INSERT Person(name,age) VALUES(?,?)”)
这里的问号是通配符的作用,你想传入什么参数就传入什么参数如:ps.setString(1,"小明’);ps.setInt(2,“19”); 这里第一个参数代表的是参数的位置,详细实例可以参考我的github https://github.com/NewYangguagng/JDBC/blob/PreparedStatement/PreparedStatementTest.java

3:CallableStatement 用来处理存储过程,这里需要对数据库知识有一定储备,所以我不细讲,如果有基础的同学可以看看我的练习:https://github.com/NewYangguagng/JDBC/blob/存储过程/CallableStatementTest1.java

========================================
简单说一下元数据,MetaData,它主要用来查看数据库的信息,也可以查看你创建数据库的信息,我也是看了别人的博文才知道这个看似不重要,很偏僻的知识,但是如果详细深入会有很大作用可以和反射联系起来使用,但是也需要许多基础知识,这里我贴一下我参考的那片的博文的地址
http://www.voidcn.com/article/p-fourvsth-bqq.html
这篇博文的知识非常丰富,不止是将元数据,而且学到最后如果你能理解这种DAO思想,那么可以说非常强了。其实我也是今天才理解,哈哈,吹波牛皮。

===============================================
接着说 结果集 ResultSet ,它专门被用来处理DQL语句返回的结果如:

ParedStatement ps = con.prepareStatement(“SELECT * FROM person WHERE id = 1”);
ResultSet set = ps.executeQuery();

这2行代码里面,ps 负责执行sql语句,而此sql 语句 是 DQL(查询语言),所以可以用ResultSet对象来接收,返回的是 符合条件的那行数据,至于取出数据的话按照你数据库详细的变量和类型来,而且可以执行列数或列名来取出,我只介绍用列名遍历的
while(set.next()){
String name = set.getString(“name”);
Integer age = set.getInt(’‘age’’);
System.out.println(name + " : " + age);
}

===================================
基本的知识就讲到这里,有一些其他无关紧要的我就不说了如其他基本的数据库类型,接下来我说一下其他重要的知识点

事务

2019/3/19 改 : 下面这段话划掉,脏读,幻读我懂了,这段时间学习了spring,所以重新对事务有了很深的了解,我做了一些笔记,大家可以参考:https://blog.csdn.net/qq_42394457/article/details/88639274

事务的话我说一些很浅的东西,至于什么脏读,幻读,我给资源,大家自己去看吧,我都没理解,狗头.jpg
https://www.jutuilian.com/article-88312-1.html

事务:事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
下面是我学事务时的练习,大家可以参考一下,

https://github.com/NewYangguagng/JDBC/blob/Transaction/TransactionTest.java

==============================最后分割线
关于ORM和数据库连接池,这部分我不细讲,只给资源和我的代码,前提是大家对ORM有很深的理解,需要自己理解,
这是我的ORM,大家看不懂不要紧,先去看下面的视频,我的ORM就是模仿的视频的设计来的,只不过改了一些,如果大家觉得视频看懂了,我的ORM肯定能看懂
https://github.com/NewYangguagng/DAO 大家仔细参考README
视频:
https://study.163.com/course/courseMain.htm?courseId=1005977005
关于这个视频的作用,我上面所说的,大家有不懂的,完全可以直接看视频去学,所以没必要纠结,只要学到知识就是好的

然后我提供Druid和DBCP数据库连接池 的下载地址,这个部分比较基础,所以大家看一下
https://blog.csdn.net/qq_42394457/article/details/85849144
主要还是理解我说的ORM吧,真的重要

=====================真的最后一条线
舍友睡觉,码字实属不易,而且键盘的几个符号键有问题,所以写错或写的不好的地方请大家原谅,我的qq;2196927727 如果有一起修仙的同学,可以加我,一起探讨问题,最后祝大家2019年头发一根不少,对象天天都是new的!

去睡觉了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值