jdbc基本操作

JDBC编程的六步(导入jar包)
1.注册驱动:通知Java程序我们即将要连接的是哪个品牌的数据库
      使用反射或者利用类
        功能:1.注册驱动:Class.forName("com.mysql.jdbc.Driver"); 
               或DriverManager.registerDriver(Driver.driver);注册驱动 java5以后可以省略这个包,所谓驱动就是导入不同的规范,这个规范时不同的数据库厂家为了使用JDBC而定义的标准
DriverManager
2.获取数据库连接对象(Connection不能直接执行sql):Java进程和MySQL进程两个进程之间的通道开启了
        使用DriverManager提供的getConnection(String url,String user,String password)获取
        各个参数代表的含义:
                url:指定连接的路径 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
                 例子:jdbc;mysql://localhost:3306/school 如果连接的是本机mysql服务器。并且mysql服务默认接口是3306,则url可以简写成jdbc;mysql:///school 
                user:用户名 
                password:密码
        
        Connection: 功能: 
                1.获取执行sql的对象: Statement createStatement(); 
                2.PrepareStatement prepareStatement(String sql) 
                2.管理事务: 开启事务:setAutoComit(boolean autoComit);调用方法设置参数为false,即开启事务 提交事务:comit() 回滚事务:rollback()
        
3.获取数据库操作对象(statement或prepareStatement):这个对象很重要,用这个对象执行SQL语句
        Statement:用于执行静态SQL语句并返回其生成的结果对象 
        PreparedStatement:用于执行动态SQL语句并返回其生成的结果对象
        1.通过connection的createStatement()方法获取statement对象,
        2.通过prepareStatement(String sql)可以执行动态sql,防止出现sql注入问题,安全性更高,该方法中传递的产生即为要执行的sql代码

4.执行SQL语句:执行crud操作
        因为statement(或prepareStatement)是执行sql语句的对象,所以调用相关方法即可成功执行
        statement对象提供的三个主要的方法:
                1.boolean execute(String sql):调用该方法设置参数为false,即开启事务 
                2.int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create,alter,drop)语句 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功,返回值>0的执行成功,反之,则失败 
                3.ResultSet executeQuery(String sql):执行DQL语句(select语句),返回一个ResultSet ResultSet:结果集对象
        理解(数据库我们需要掌握基本的增删改查,增删改我们执行完成以后只是对数据表的的数据进行了修改,不需要返回一个结果集合,如果我们需要要查看数据只需要查看表,或者执行select语句,当我们执行select语句的时候就需要返回一个结果集,这个结果集就是ResultSet,我们需要查看集合中的东西就需要用相关的方法对该集合进行遍历,理解了这个逻辑,我们就能理解,为什么执行增删改我们用的是executeUpdate方法,而执行查我们单独使用executeQuery方法)

5.处理查询结果:如果第四步是select语句,才有第五步
        当我们执行sql语句执行的是select时,我们如果想获得结果就一定要对结果集进行操作,ResultSet提供了两个方法对结果集合进行遍历
        1.next();游标向下移动一行,判断当前行是否是最后一行末尾
        2. get***(参数);获取一列的数据 
                参数:1.可以接受int类型的数据,代表列的编号,从1开始 
                     2.可以接受String类型的数据,代表列的名称,如getString("sNum"); 
        使用get方法时要注意的两个点“
                1.get后面所对应的类型一定要和字段的类型相对应
                2.使用第二种重载方式传入的参数一定要和字段名对应
        使用:1.游标向下移动一行 2.判断是否有数据 3.获取数据

6.释放资源:关闭所有的资源

学习完了上面的知识我们来看一个简单的代码test1

public class test1 {
    public static void main(String[] args)  throws Exception{
        //1.导入驱动jar包,复制对应的jar加入到文件夹,add as library
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","answerme1");
        //4.定义sql语句,该语句用于修改列的约束
        String sql=" alter table student change column sgrade sGrade int default '80'";
        //5.获取执行sql的对象statement
        Statement stmt = conn.createStatement();
        //6.执行sql
        stmt.executeUpdate(sql);//因为我们执行的是修改语句,并不需要返回一个结果集,所以省略了处理结果的步骤
        //7.释放资源
        stmt.close();
        conn.close();


    }

}

上述代码在加载驱动的时候调用getConnection(),方法的时候传入的参数太长,我们一般不会这样使用,我们一般会定义三个字符串,给字符串赋值以后传入该方法

关于prepareStatement对象的介绍
        我们来实现一下这样的场景——模拟登录

       

        //核心的代码如下
        
        //用户输入学号与姓名,然后利用sql语句经行查找,看看是否存在这样的人
        Scanner sc =new Scanner(System.in);
        Scanner sc1 =new Scanner(System.in);
        System.out.println("请输入你的学号");
        int snum=sc.nextInt();
        System.out.println("请输入你的姓名");
        String sname=sc1.nextLine();


        //sql语句
        String sql ="select * from student where sNum = '"+snum+"' and sName = '"+sname+"'";    //注意字符串的拼接,因为snum和sname都不是一个值,而是一个变量,所以我们需要使用字符串的拼接
        resultset rs=statement.executeQuery();
        if(rs.next())
            System.out.println("登录成功");
        else
            System.out.println("登录失败");
        
        //我们在登录的时候如果输入的用户名类似于xxx or a ==a时就会出现sql注入问题,这个情况会导致
        任何一个用户都可以登录成功,这样的现象被称为sql注入问题
        
        
        

为了解决上面的sql注入问题,我们引入prepareStatement来执行sql语句

步骤:
1.导入jar包
2.注册驱动
3.获取数据库连接对象
4.定义sql,sql的参数使用?作为占位符,如:select * from user where username = ? and passward = ?;
5.获取执行sql语句的对象preparedstatement
6.给?赋值,setXXX(),参数1:?的位置编号从1开始,参数2:?的值
7.执行sql
8.处理结果
9.资源释放
        
        //Sql语句使用占位符来占位,防止了因为与逻辑表达式冲突造成的错误,
        String sql ="select * from student where sNum = ? and sName = ?";
        pre = con.prepareStatement(sql);
        //通过相关的set方法,为占位符设置值,注意set方法中的参数第一个表示位置,从1开始,第二个表示要传入的值
        pre.setInt(1,snum);
        pre.setString(2,sname);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值