当前位置: 首页 > news >正文

JBDC java数据库连接(2)

目录

JBDC建立

获得PrepareStatement执行sql语句

形式:

PrepareStatement中的方法:

实例

PreparedStatement和Statement

基于以下的原因:


JBDC建立


获得PrepareStatement执行sql语句


 在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数

形式:

  •  PrepareStatement ps = connection.prepareStatement(sql);

PrepareStatement中的方法:

  • Int executeUpdate()
  1. 用于执行ddl语句和dml(增,删,改)语句 返回操作的行数
  2. 用于执行ddl语句返回0 用于执行dml语句返回操作的行数
  • ResultSet executeQuery();
  1. 用于执行查询语句 返回一个ResultSet 集合、
  • close()
  1. 关闭与数据库的链接通道
  2. 每次操作完成后关闭所有与数据库交互的通道
  •  使用ResultSet中的next()方法获得下一行数据
  •  使用getXXX(String name)方法获得值

实例

public class demo5 {
    public static void main(String[] args) {
        ArrayList<Student> students = null;
        try {
            students = demo5.findStudentByGender("女");
            System.out.println(students);

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public static ArrayList<Student> findStudentByGender(String gender) throws SQLException {
        ArrayList<Student> students = new ArrayList<>();//用来封装查询到的多个学生对象
        Connection connection = JDBCUtil.getConnection();
        PreparedStatement ps = connection.prepareStatement("select id,num,name,gender,birthday,phone,regtime from student where gender = ?");
        ps.setObject(1, gender);
        ResultSet resultSet = ps.executeQuery();
        while (resultSet.next()){
            Student student = new Student();
            student.setId(resultSet.getInt("id"));
            student.setNum(resultSet.getInt("num"));
            student.setName(resultSet.getString("name"));
            student.setGender(resultSet.getString("gender"));
            student.setBirthday(resultSet.getDate("birthday"));
            student.setRegtime(resultSet.getTimestamp("regtime"));
            students.add(student);
        }
        resultSet.close();
        ps.close();
        connection.close();
        return students;
    }
}

PreparedStatement和Statement

基于以下的原因:

1、代码的可读性和可维护性. 虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读 性还是可维护性上来说.都比直接用Statement的代码高很多档次: stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')"); perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例

2、最重要的一点是极大地提高了安全性. 防止sql注入

Stringsql=“ delete from user where id = ”+num;

如果我们把[or 1=1]作为id传入进来? delete from tb_name where id = 1 or 1 = 1; 因为1=1肯定成立 而如果使用预编译语句.

你传入的任何内容就不会和原来的语句发生任何匹配的关系. 预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句.

PreparedStatement和Statement中的executeQuery()方法中会返回一个 ResultSet对象,查询结果就封装在此对象中.

相关文章:

  • 做食品网站用什么颜色崇左seo
  • 企业网站维护建设ppt报个计算机培训班多少钱
  • 网站业务原创文章代写
  • 计算机网络技术就业公司seo查询软件
  • 智能模板网站建设方案谷歌外贸平台推广需要多少钱
  • 贵州最好的网站建设推广公司百度获客平台
  • System V 信号量:控制进程间共享资源的访问
  • WPS JS宏编程教程(从基础到进阶)-- 第五部分:JS数组与WPS结合应用
  • 4.8学习总结 贪心算法+Stream流
  • 获取cookie的chrome插件:Get cookies.txt LOCALLY
  • 前端知识点---闭包(javascript)
  • 【设计模式】创建型 -- 单例模式 (c++实现)
  • 最小K个数
  • ecovadis认证基本概述,ecovadis认证审核有效期
  • spring mvc 在拦截器、控制器和视图中获取和使用国际化区域信息的完整示例
  • 【零基础入门unity游戏开发——动画篇】新动画Animator的使用 —— AnimatorController和Animator的使用
  • 【杂谈】-小型推理模型:人工智能领域的新兴力量
  • Day2_Python tornado库2_post方法_上传图片文件
  • NumPy依赖库BLAS和LAPACK详细信息解析
  • UE5今日所学创建海洋+命名规范
  • 同时支持Vue2/Vue3的图片懒加载组件(支持懒加载 v-html 指令梆定的 html 内容)
  • 【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与Seata框架深度解析详解 - 3-5年Java开发必备知识
  • .htaccess文件的组成、用法及作用详解
  • debian12 mysql完全卸载
  • Android 文件选择器
  • 如何在 Apifox 中与其他成员共用数据库连接配置