JDBC
不是正经鱼 人气:1*概念:
Java Database Connectivity Java数据库连接 Java语言操作数据库
*JDBC本质:
其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口编程,真正实行的代码是驱动jar包中的实现类。
*JDBC中的对象:
1.DriverManager:
*加载驱动
*获取数据库连接:
Connection con = DriverManager.getConnection(String url,String user ,String password);
url:jdbc:mysql://ip地址(域名):端口号/数据库名称
2.Connection:
*获取执行sql对象
Statement st = con.createStatement()
PreparedStatement = con.preparedStatement(String sql)
*管理事务:
*开启事务: setAutoCommit(boolean autoCommit)
*提交事务:commit()
*回滚事务:rollback()
3.Statement:
*执行sql的对象
st.excuteUpdate(String sql):执行DML(增删改)语句、DDL语句(create、alter、drop)
返回值:影响的行数,可以通过影响的行数判断DML语句是否执行成功。
ResultSet st.excuteQuery(String sql):执行DQL(select)语句
4.ResultSet:结果集对象,封装查询结果,判断当前行是否有数据,如果有数据返回true,否则返回false
*next():游标向下移动一行
*getXxx():获取数据
Xxx代表数据类型
*参数:
int--->列的编号,从1开始 例如 getInt(1);
String --->列的名称 例如 getInt(id);
*注意:
*使用步骤:
1.游标向下移动一行
2.判断是否有数据
3.获取数据
5.PreparedStatement:执行sql的对象(推荐使用该方法)
sql注入问题:在拼接sql时,有一些sql 的特殊关键字参与字符串的拼接。会造成安全性问题
用户随便输入,输入密码:a' or 'a' = 'a
解决sql注入问题:使用PrepareStatement对象
预编译的sql:参数使用?作为占位符
使用setXxx()方法赋值。
*抽取JDBC工具类:JDBCUtils
*目的:
简化书写
*分析:
1.注册驱动
2.抽取一个方法获取连接对象
*需求:不想传参(麻烦),还得保证工具类的通用性
*解决:配置文件
3.抽取一个方法释放资源
*JDBC控制事务
1.事务:参照Mysql基础与进阶篇事务内容
2.操作:
开启
提交
回滚
3.使用Connection对象来管理对象
*开启事务:setAutoCommit(boolean autoCommit):调用改方法设置参数为false,即为开启事务
*在执行sql之前开启事务
*提交事务:commit()
*当所有事务都执行完提交事务
*回滚事务:rollback()
*在Catch中回滚事务
加载全部内容