Mysql数据库巩固

来源:互联网 发布:ps调色插件 知乎 编辑:程序博客网 时间:2024/05/16 08:57

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语句。                               
0 0