1:要想通过java端来获取数据库的信息首先要先正确创建包
2:需要先加载一个驱动包,这边需要注意的是得因正确的包到Driver;
Class.forName("com.mysql.cj.jdbc.Driver");
3:然后需要正确连接数据库创建一个数据库对象,代码比较长直接复制
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?userSSL=false&serverTimezone=Asia/Shanghai", "root", "123456");
4:获取来执行syq语句的对象
stmt = connection.createStatement();
5:用stmt对象来存储syq查询语句
rs = stmt.executeQuery("select * from student");
这时候的rs对象相当于一个集合查询到的信息先暂时都存放在那里需要获取查询信息得使用一个循环来遍历出数据
6:while(rs.next()){
在这里有两种查询方式第一种是根据字段列的顺序来查询
rs.getInt(1)
第二种是根据字段的名称来进行一波查询
rs.getInt("name")
}
7:为了更好地观看信息可以封装一个学生集合将每次的信息封装成一个对象然后在输出
二:syq注入
syq注入就像是一个bug,当你使用statement查询语句,来模拟登入操作时,只要在密码那里输入恒等式("' or '1' = '1"),就会显示登入成功,所以不太安全,这边需要使用的就是statement的升级版prepardStatement,这个方法的好处就是在于在执行数据库查询语句时会先进行一波预编译,且会用占位符来进行操作,这波预编译会将带有特殊符号的字符串转换成普通的字符串,而statement查询时则是直接字符串查询;
做法就是先在外头设置一个空的PrepardStatement 对象,便于最后关闭这个对象;
PreparedStatement preparedStatement =null;
第二步是使用connection.preparedStatement()方法并在括号里放入要查询的syq语句;
preparedStatement= connection.prepareStatement("SELECT * FROM student WHERE name = ? AND password=?");
这边选择使用两个?来进行一个占位符操作
第三步是使用先前创建的preparedStatement.setString()方法(你数据选择的是什么类型,就选对应的什么)第一个放的是占位符(?)的序号从1开始,然后逗号右边存放的就是变量名称了
preparedStatement.setString(1,name); preparedStatement.setString(2,password);
最后一步就是使用
resultSet = preparedStatement.executeQuery();
并且使用resultSet.next()方法来判断是不是有值最后反馈客户
三.事务
这边可以通过举例来说明事务是什么意思,比如转账我在数据库里同学1原本有100同学二原本有200,现在为了做到公平起见同学2需要给50给同学1当我们使用syq语句模拟时两条语句同时运行恰好能模拟这种情况,但是现在模拟宕机的情况在同学2转了50以后出现宕机状况,同学一没有收到50,而同学2又失去了50,这时候就需要开启事务了
首先第一步开启事务,并且默认值设置为false这样就能取消自动提交
connection.setAutoCommit(false);
第二步就是提交事务,这个放在最后,只有这样在所有语句逻辑全部都正常运行的情况下才会进行一波提交事务;
connection.commit();
最后就是事务回滚,当发现上面语句有逻辑问题以后那就得进行一波事务回滚所以这个得放在catch语句中才能被执行到
connection.rollback();
四:连接池
连接池就是给数据库建立一个缓冲池,当数据库需要连接时,就从连接池中拿一个出来连接,在使用完.close方法将用过的连接归还到连接池中,这边.close方法的作用不是关闭连接池,而是将使用完的连接归还到连接池中,方便其他需要连接时使用;
连接池有两个一个是c3p0,还有一个是druid,前一个源于国外开源连接池,扩展性不是很高,所以只需理解,重点学会使用第二个druid连接池;
1:在使用druid连接池时,必须先配置一个druid.jar文件
# xxx.properties
driverClassName=com.mysql.cj.jdbc.Driver
//这边需要注意的是?后面跟着的是你要连接的数据库名称
url=jdbc:mysql://localhost:3306/test?userSSL=false&serverTimezone=Asia/Shanghai
username=root
password=123456
initialSize=3
maxActive=5
maxWait=1000
2:连接druid连接池的方法
一般在使用druid连接池时我们都会选择将其封装成一个工具类方便使用;且注意每次在使用完连接池以后都需要进行归还连接池,避免连接池被占用,而报错;