Mysql数据库巩固

1.在驱动管理器中会装入两个mysql驱动.
解决方案:使用反射
Class.forName(“com.mysql.jdbc.Driver”);
分析:使用反射的方式来加载驱动有什么好处?
1.只加载一次,装入一个驱动对象.
2.降低耦合,不依赖于驱动.
2.DriverManager来获取连接对象
Connection con=DriverManager.getConnection(String url,String user,String password);
url作用:就是用于确定使用哪一个驱动.
mysql url: jdbc:mysql://localhsot:3306/数据库名.
oralce url: jdbc:oracle:thin:@localhost:1521:sid
总结:DriverManager作用:
1.注册驱动
2.获取连接Connection
关于url
url格式
主协议 子协议 主机 端口 数据库
jdbc : mysql ://localhost:3306/test
3.Connection作用:
1.可以通过Connection获取操作sql的Statement对象。
Statement createStatement() throws SQLException
示例:
Statement st=con.createStatement();
4.Statement详解
java.sql.Statement用于执行sql语句.
Statement作用:
1.执行sql
DML:insert update delete
int executeUpdate(String sql)

                    利用返回值判断非0来确定sql语句是否执行成功。

                DQL:select
                    ResultSet executeQuery(String sql)

                可以通过execute方法来执行任何sql语句.
                    execute(String sql):用于向数据库发送任意sql语句

            2.批处理操作
                addBatch(String sql); 将sql语句添加到批处理
                executeBatch();批量执行
                clearBatch();清空批处理.

5.ResultSet详解
java.sql.ResultSet它是用于封装select语句执行后查询的结果。

        常用API
            1.next()方法
                public boolean next();
                    用于判断是否有下一条记录。如果有返回true,并且让游标向下移动一行。
                    如果没有返回false.

            2.可以通过ResultSet提供的getXxx()方法来获取当前游标指向的这条记录中的列数据。
                常用:
                    getInt()
                    getString()
                    getDate()
                    getDouble()
                    参数有两种
                        1.getInt(int columnIndex);
                        2.getInt(String columnName);

                    如果列的类型不知道,可以通过下面的方法来操作
                        getObject(int columnIndex);
                        getObject(String columnName);

6.关闭资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。

        特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

        为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

sql注入
由于没有对用户输入进行充分检查,而SQL又是拼接而成,在用户输入参数时,在参数中添加一些SQL 关键字,
达到改变SQL运行结果的目的,也可以完成恶意攻击。

    示例:
        在输入用户名时  tom' or '1'='1
        这时就不会验证密码了。
    解决方案:
        PreparedStatement(重点)
        它是一个预处理的Statement,它是java.sql.Statement接口的一个子接口。

    总结PreparedStatement使用:
        1.在sql语句中,使用"?"占位
            String sql="select * from user where username=? and password=?";
        2.得到PreparedStatement对象
            PreparedStatement pst=con.prepareStatement(String sql);
        3.对占位符赋值
            pst.setXxx(int index,Xxx obj);
            例如:
                setInt()
                setString();
            参数index,代表的是"?"的序号.注意:从1开始。

        4.执行sql
            DML:  pst.executeUpdate();
            DQL:   pst.executeQuery();
            注意:这两方法无参数

    关于PreparedStatement优点:
        1.解决sql注入(具有预处理功能)
        2.不需要在拼sql语句。                               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值