黑马程序员技术交流社区

标题: [石家庄校区] [打印本页]

作者: 飛鸟瞰    时间: 2019-7-14 14:48
标题: [石家庄校区]
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来解决, 他的参数用?来占位, 将来赋值的时候, 即使有关键字也不会识别!!!!!!
       




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2