JDBC

JDBC:java database connectivity

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

JDBC

 

 

JDBC

 

 

================================

获取数据库连接

要先导入jar包,就是数据库的驱动。

获取方式1:

JDBC

 

方式2:

JDBC

 

 

方式三

JDBC

 

 

方式4:

JDBC

 

 可以省略是因为在加载Driver类时,加载了一个静态代码块,已经new了Driver对象了,并且做了注册操作。

 

方式5:把数据库连接的四个基本信息声明到配置文件中,通过读配置文件实现连接。

配置文件:

JDBC

 

 

 

 InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); //下面第一行代码的补充。

 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); //这个方法也可以(建议改成这样)

JDBC

 

 这是最终方式,优点在于可移植性好,实现了数据与代码的分离,实现了解耦;如果需要修改配置文件信息,就可以避免程序重新打包。

 

==============================================

用statement需要拼接sql语句,而且存在SQL注入的问题。

所以要用Preparedstatement代替statement。

用Preparedstatement对数据库进行增删改查有5个步骤:

1,获取数据库连接

2,预编译sql语句,返回preparedstatement实例

3,填充占位符

4,执行sql

5,关闭资源

获取数据库连接可以写成一个工具类:

JDBC

 

 

 关闭资源也写一个工具类(这样就只要写中间操作的代码就可以了):

补充,下面应该写成一个静态方法

JDBC

 

 通过工具类完成一个数据库改数据的操作:

补充,下面要不上try/catch

ps.set都是去补充占位符的

JDBC

 

 

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

JDBC

 

 

完成一个通用的增删改工具类:

补充,下面要不上try/catch

JDBC

 

补上try/catch后就是如下:

JDBC

 

 测试通用方法:

JDBC

 

 JDBC

 

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

========================================================

JDBC

 

===================================================

 查询数据的操作因为会返回结果集,所以要复杂一点(针对一张表下一个方法):

这里获取连接,写sql语句都一样

JDBC

 这里要补上填充占位符:ps.setObject(1,1);

 然后返回的是结果集:

JDBC

 

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

JDBC

 

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

要再写一个关闭资源的工具类:

JDBC

 =================================

写一个针对某一张表的通用方法:

写的方法可以直接返回一个已经有数据的对象:

JDBC

 

 

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

JDBC

 

 

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

JDBC

 

 

测试这个方法:

JDBC

 

 

补充:

JDBC

 

 

整个过程的大致脑图:

JDBC

 ==============================================================

写一个可以查询所有表的通用方法:

在上面的基础上要修改的地方:

现在要变成泛型方法:

JDBC

 

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

JDBC

 

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

JDBC

 

 然后测试这个方法:

JDBC

 

 ==================================================

要查询多条记录时,做以下修改:

首先就是方法要返回一个集合了:

JDBC

 

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

JDBC

 

 

 

测试这个方法:

JDBC

 

 补充:

Preparedstatement解决了sql注入问题

Preparedstatement可以操作blob的数据,即可以操作图片,视频

还可以实现更高效地批量插入

======================

 

JDBC

上一篇:mysql分组取前5,类似sql server的partition by


下一篇:MySQL高可用架构之MHA原理及其部署,三种切换方式以及vip的漂移