JDBC:java database connectivity
数据的持久化:把内存中的数据存储到硬盘上。


================================
获取数据库连接
要先导入jar包,就是数据库的驱动。
获取方式1:

方式2:

方式三

方式4:

可以省略是因为在加载Driver类时,加载了一个静态代码块,已经new了Driver对象了,并且做了注册操作。
方式5:把数据库连接的四个基本信息声明到配置文件中,通过读配置文件实现连接。
配置文件:

InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); //下面第一行代码的补充。
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); //这个方法也可以(建议改成这样)

这是最终方式,优点在于可移植性好,实现了数据与代码的分离,实现了解耦;如果需要修改配置文件信息,就可以避免程序重新打包。
==============================================
用statement需要拼接sql语句,而且存在SQL注入的问题。
所以要用Preparedstatement代替statement。
用Preparedstatement对数据库进行增删改查有5个步骤:
1,获取数据库连接
2,预编译sql语句,返回preparedstatement实例
3,填充占位符
4,执行sql
5,关闭资源
获取数据库连接可以写成一个工具类:

关闭资源也写一个工具类(这样就只要写中间操作的代码就可以了):
补充,下面应该写成一个静态方法

通过工具类完成一个数据库改数据的操作:
补充,下面要不上try/catch
ps.set都是去补充占位符的

补充一个增加数据的操作:

完成一个通用的增删改工具类:
补充,下面要不上try/catch

补上try/catch后就是如下:

测试通用方法:


补充:如果表名跟关键字冲突了,要前后加上数字1旁边那个点。
========================================================

===================================================
查询数据的操作因为会返回结果集,所以要复杂一点(针对一张表下一个方法):
这里获取连接,写sql语句都一样

这里要补上填充占位符:ps.setObject(1,1);
然后返回的是结果集:

之后显示结果集,要去写一个javabean,就是把结果都放到对象里:

最后要关闭资源,这里还多了一个结果集的关闭:
要再写一个关闭资源的工具类:

=================================
写一个针对某一张表的通用方法:
写的方法可以直接返回一个已经有数据的对象:

中间的操作更复杂,还需要用到反射:

最后关闭资源,如果没查找数据,就直接返回null:

测试这个方法:

补充:

整个过程的大致脑图:

==============================================================
写一个可以查询所有表的通用方法:
在上面的基础上要修改的地方:
现在要变成泛型方法:

然后在new对象的时候要修改:

然后在用反射时赋值也要修改:

然后测试这个方法:

==================================================
要查询多条记录时,做以下修改:
首先就是方法要返回一个集合了:

然后创建集合对象,把结果集查询的if改成while,把查询出来的对象添加到集合中,最后返回一个集合:

测试这个方法:

补充:
Preparedstatement解决了sql注入问题
Preparedstatement可以操作blob的数据,即可以操作图片,视频
还可以实现更高效地批量插入
======================
原文:https://www.cnblogs.com/jmfy/p/14593170.html