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对象

更新操作:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值