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的数据,即可以操作图片,视频
还可以实现更高效地批量插入
======================