微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

猪猪的IT之路---Java成长之路JDBC基本操作

mysql-connector-java-5.1.38百度云下载链接https://pan.baidu.com/s/1bOEd6_mecjPxtSZMZgVyNA
提取码:hg63
JDBC(Java DataBase Connection):是一种用于执行sql语句的JavaAPI(标准规范)

Java提供的访问数据库规范就是JDBC
使用前提:需要连接驱动jar(驱动jar是由生产厂商开发)

在这里插入图片描述

开发者通过Java代码实现与数据库进行通信,是因为有数据库连接驱动来规定通信的数据格式

数据库生产厂商提供数据库规范的实现类就是驱动

使用JDBC开发的步骤:

1.(注册)加载驱动:通过反射加载

2.获取连接:通过驱动管理器获取

3.获取sql语句执行平台:通过连接获取

4.执行语句:通过平台发送执行

5.处理结果:执行语句返回值,更新(增,删,改)操作返回int值表示受影响行数,查询操作返回ResultSet(结果集,类似数据库表)

6.释放资源:通过close方法

开发准备:

1.下载驱动jar

2.将jar添加到java项目中

在项目上鼠标右键:Build Path->configure build path

在这里插入图片描述

开发代码-查询

String url ="jdbc:MysqL://localhost:3306/mydb";

                   String username = "root";

                   String password = "MysqLpass";

                   //加载驱动

                   /*

                    *
                       java.lang.classNotFoundException:表示驱动类没有找到

                    */

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

                   //获取连接

                   /*

                    * 需要三个参数:

                   数据库连接地址:jdbc:MysqL://ip或者hostname:端口号/数据库名

                   *--String url ="jdbc:MysqL://localhost:3306/mydb";

                    * 地址三部分组成:

                    * 第一部分jdbc,固定的

                    * 第二部分:数据库厂商名称

                    * 第三部分:由数据库厂商规定,由数据库IP地址、端口号、数据库名组成

                      String username = "root";数据库用户名

                    *String password = "MysqLpass";数据库密码

                    */

                   Connection con = DriverManager.getConnection(url, username, password);

                   //获取执行平台

                   /*

                    * 常用方法:

                    * int executeUpdate(String sql):执行inset,update,delete语句

                    * ResultSet executeQuery(String sql):执行select语句

                    */

                   Statement sta = con.createStatement();

                   //执行语句

//               sta.executeUpdate(sql)//执行更新

                   String sql = "select * from tb_user";

                   ResultSet rs = sta.executeQuery(sql);//执行查询

                   //处理结果

                   /*

                    * 处理结果集:

                    * 结果集实际就是一张二维表,通过next()方式向下移动指针指向一行数据

                    * 然后通过调用getXXX(列序号或列名),XXX表示数据库中当前列的数据类型,列序号从1开始的整数,列名是字符串

                    * 注意:操作结果集之前指针在表上,没有执行第一行数据,只有调用了一次next后指针才指向的第一行

                    */

                   while(rs.next()) {

                            //通过getXXX返回获取每一列数据

                            int id = rs.getInt(1);

                            String name = rs.getString("name");

                            int age = rs.getInt(3);

                            System.out.println(id+" "+name + " " + age);

                   }

                   //释放资源

                   /*

                    * 和IO流一样,使用后的对象都需要关闭关闭顺序是:先创建获取的后关闭,后创建获取的先关闭

                    */

                   rs.close();

                   sta.close();

                   con.close();


sql注入攻击:字符串语句中需要添加变量参数(字符串值拼接问题)

在这里插入图片描述

String uname = "任意字符 or 1=1
– ";

String sql = “select * from tb_user
where username=’”+uname+"’ and password=‘zs123’"

在通过执行平台执行sql语句时,可以随便输入用户名和密码都能登录成功

解决办法:使用预处理对象PrepareStatement

PrepareStatement:使用方式:

  1. 获取执行平台:获取对象时指定的sql语句中在需要添加数据的位置通过占位符“?”代替,注意语句中的代替的部分是整个值(包含’’部分),而不是单引号中间的值,只有拼接才是代替单引号中间的

错误写法:select * from tb_user where username=’?’ and password=’?’

正确写法:

在这里插入图片描述

  1. 设置实际参数:需要放入语句中的值,不是通过拼接,而是通过调用装配方法添加方法是setXXX(占位符序号,值),XXX表示数据类型,序号从1开始,值是放入语句中的值

    在这里插入图片描述

3.调用执行sql语句:

     常用方法:

     intexecuteUpdate();----执行insert,update,delete语句

     ResultSet ececuteQuery();----执行select语句

使用预处理对象执行语句步骤:

1.(注册)加载驱动

2.获取连接

3.获取预处理对象:获取时需要指明sql语句,在其中通过?进行占位。

4.给sql语句中的占位符设置实际参数:通过set方法设置

5.执行语句

6.处理结果:执行语句返回值,更新(增,删,改)操作返回int值表示受影响行数,查询操作返回ResultSet(结果集,类似数据库表)

7.释放资源:通过close方法

Statement和PreparedStatement的区别:

  1. 都是执行平台,都可以进行增,删,查,改

  2. 在Statement平台的sql设置语句参数时只能通过字符串拼接(会引起sql语句注入攻击),而PreparedStatement平台可以通过占位符来避免注入攻击

  3. 使用Statement执行语句效率比PreparedStatement高

实际开发中一般都直接使用PreparedStatement对象

更新操作:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐