JDBC

JDBC

JDBC注册驱动:

Class.forName("com.mysql.jdbc.Driver");

获取连接对象:

获取连接需要方法 DriverManager.getConnection(url,username,password),三个参数分别表示,url 需要连接数据库的位置(网址) user用户名  password 密码

String url="jdbc:mysql://localhost:3306/库名?useUnicode=true

&characterEncoding=UTF-8";

String username="root";

String password="123456";

注入问题:

当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账号为XXX 密码为:XXX’  OR ‘a’=’a时,则真正执行的代码变为:

SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’  OR ’a’=’a’;

此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。

为此,我们使用PreparedStatement来解决对应的问题。

PreparedStatement 预处理对象:

每条sql语句所有的实际参数,都使用逗号分隔。

? :占位符  明确传值

String sql="select count(*) from user where uname=? and pwd=?";

PreparedStatement pst=conn.prepareStatement(sql);

getString(第几个占位符(数字),传的值);给占位符赋值

:String为值的类型

 

执行:

executeUpdate();增删改

       格式:int row=sta.executeUpdate();

executeQuery();查询

                  格式:ResultSet  rs=sta. executeQuery();

处理结果集:

ResultSet实际上就是一张二维的表格

我们可以调用其next()方法指向某行记录,返回一个boolean值,当第一次调用next()方法时,便指向第一行记录的位置

getXXX(int col)方法获取指定列的数据:

rs.next();//指向第一行

rs.getInt(1第几列);//获取第一行第一列的数据

    rs.getString(2); //获取第一行第二列的数据

 

格式:

       int count=0;

       while(rs.next()){

           count=rs.getInt(1);

       }

 

 

释放资源:

    调用一堆close()方法

    先开的后关

rs.close();//查询时才有

pst.close();

    conn.close();

原文地址:https://www.cnblogs.com/hhthtt/p/10488243.html