JDBC
是一套sun公司提供的接口, 这个接口由数据库厂商编写实现类, 这个厂商编写实现类称为数据库的驱动
jdbc作用:平复数据库数据的差异
1.操作的步骤
1.导入驱动jar包
2.注册驱动
3.获取连接
4.通过连接得到执行者对象
5.使用执行者对象执行sql语句
6.得到结果,并处理
7.释放资源
2.jdbc相关的api
DriverManager
1.注册驱动
registerDriver的方法,但是我们不用,我们使用Class.forName("com.mysql.jdbc.Driver");
原因是因为在Driver这个类中有静态方法,这个方法随之类的字节码加载而加载,只加载一次,
静态代码块中里面帮我们注册了驱动
2.获取连接
Connection getConnection(url,用户名,密码);
url的编写: "jdbc:mysql://ip地址:端口/数据库的名字"
注意: 如果我们连接本机, 可以省略: "jdbc:mysql:///数据库的名字"
Connection
1.获取执行者对象
Statement createStatement();
PreparedStatement preparedStatement(String sql);//100%都是用的这个!!!!!!!!
2.管理事务
1.开始事务: setAutoCommitted("false"); --->将自动提交关闭
注意:这里关闭自动提供, 只针对这一次操作
2.回滚: rollback()
3.提交: commit()
Statement(以后不会用!!!!会出现sql注入的问题)
1.执行DML
int excuteUpdate(String sql);淘汰了!!!!!
返回值: int 代表影响的行数, 我们通过这个行数判断是否执行成功
2.执行DQL
ResultSet excuteQuery(String sql);淘汰了!!!!!
返回值:ResultSet这个对象封装了所有的结果!!!!
3.可以执行任何sql
boolean excute(); ----> 如果 true代表是"查询语句", 如果false代表是"增删改"
PreparedStatement(以后都用这个, 不仅效率高,还可以解决sql注入问题)
1.执行DML
int excuteUpdate();//这里不能传入sql语句了
2.执行DQL
ResultSet excuteQuery();//这里不能传入sql语句了
注意事项: 所有的需要拼接的参数都用"?"来占位, 千万不要对?进行赋值, ?从1开始编号
ResultSet
1.next(); 可以是指针向下移动一行
2.getXxx(参数)的方法得到其对应的数据
参数: 1.int(没人用!!!!!)2.String(建议使用!!!!)
3.sql注入问题:
为什么会出现? 因为在sql拼接,会将关键识别
通过PreparedStatement来解决, 他的参数用?来占位, 将来赋值的时候, 即使有关键字也不会识别!!!!!!
|
|