前往小程序,Get更优阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 >【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口

【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口

作者头像
繁依Fanyi
发布2023-10-12 17:27:34
1.1K0
发布2023-10-12 17:27:34
举报
文章被收录于专栏: 繁依Fanyi 的专栏 繁依Fanyi 的专栏
在这里插入图片描述
在这里插入图片描述

在Java应用程序中,与数据库进行交互是一项常见的任务。为了执行数据库操作,我们需要使用JDBC(Java Database Connectivity)来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口,它用于执行SQL语句并与数据库进行交互。本文将详细介绍Statement接口的使用,包括如何创建Statement对象、执行SQL语句、处理结果等内容。

什么是 JDBC Statement?

Statement接口是JDBC的一部分,它允许我们向数据库发送SQL查询和更新语句,并从数据库中获取结果。Statement接口有多个子接口和实现类,常用的有以下几种:

  • Statement:用于执行普通的SQL语句,不带有参数。
  • PreparedStatement:用于执行预编译的SQL语句,可以带有参数,防止SQL注入攻击。
  • CallableStatement:用于执行数据库存储过程。

在本文中,我们将主要关注Statement接口及其用法。

创建 JDBC Statement 对象

在执行SQL语句之前,首先需要创建Statement对象。Statement对象通常与Connection对象关联,通过Connection对象的createStatement()方法创建。下面是创建Statement对象的示例代码:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class StatementExample {
    public static void main(String[] args) {
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        // 创建Connection对象
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 在此处执行SQL语句
            
            // 关闭Statement
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们首先创建了一个Connection对象,然后使用createStatement()方法创建了一个Statement对象。需要注意的是,我们在try-with-resources块中创建了ConnectionStatement对象,这样在退出块时会自动关闭这些资源,无需手动关闭。

执行 SQL 查询语句

一旦创建了Statement对象,我们可以使用它来执行SQL查询语句。以下是一个简单的示例,演示如何执行SELECT查询并处理查询结果:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectExample {
    public static void main(String[] args) {
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 执行SQL查询语句
            String sql = "SELECT * FROM employees";
            ResultSet resultSet = statement.executeQuery(sql);
            
            // 处理查询结果
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                double salary = resultSet.getDouble("salary");
                System.out.println("ID: " + id + ", Name: " + name + ", Salary: " + salary);
            }
            
            // 关闭ResultSet和Statement
            resultSet.close();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用executeQuery()方法执行SELECT查询语句,然后使用ResultSet对象遍历查询结果。最后,我们关闭了ResultSetStatement对象,释放资源。

执行 SQL 更新语句

除了查询,Statement对象还可以用于执行SQL更新语句,如INSERTUPDATEDELETE。以下是一个示例,演示如何执行INSERT语句来插入新数据:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class InsertExample {
    public static void main(String[] args) {
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 执行SQL更新语句
            String sql = "INSERT INTO employees (name, salary) VALUES ('John', 50000)";
            int rowsAffected = statement.executeUpdate(sql);
            
            if (rowsAffected > 0) {
                System.out.println("Insertion successful. Rows affected: " + rowsAffected);
            } else {
                System.out.println("Insertion failed.");
            }
            
            // 关闭Statement
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用executeUpdate()方法执行INSERT语句,并检查受影响的行数来确定是否插入成功。

防止 SQL 注入攻击

在使用Statement执行SQL语句时,要注意防止SQL注入攻击。SQL注入攻击是一种常见的网络安全威胁,它可以通过恶意构造的输入来破坏数据库操作。为了防止SQL注入攻击,应该使用PreparedStatement而不是Statement来执行带有参数的SQL语句。PreparedStatement允许将参数绑定到SQL语句中,从而避免直接拼接用户输入,如下所示:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class PreparedStatementExample {
    public static void main(String[] args) {
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            // 创建PreparedStatement对象
            String sql = "INSERT INTO employees (name, salary) VALUES (?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            
            // 设置参数
            preparedStatement.setString(1, "Alice");
            preparedStatement.setDouble(2, 60000);
            
            // 执行SQL更新语句
            int rowsAffected = preparedStatement.executeUpdate();
            
            if (rowsAffected > 0) {
                System.out.println("Insertion successful. Rows affected: " + rowsAffected);
            } else {
                System.out.println("Insertion failed.");
            }
            
            // 关闭PreparedStatement
            preparedStatement.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用PreparedStatement来执行INSERT语句,并使用setString()setDouble()方法设置参数值。这样可以确保用户输入不会被误解为SQL代码,提高了安全性。

总结

Statement接口是JDBC中执行SQL语句的关键接口之一。通过创建Statement对象,我们可以执行查询和更新等各种数据库操作。然而,为了提高安全性,建议在执行SQL语句时使用PreparedStatement,尤其是涉及用户输入的情况下。希望本文能够帮助您更好地理解JDBC中的Statement接口以及如何使用它来与数据库进行交互。

作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191

本文参与  腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与  腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
LV.
文章
0
获赞
0
目录
  • 什么是 JDBC Statement?
  • 创建 JDBC Statement 对象
  • 执行 SQL 查询语句
  • 执行 SQL 更新语句
  • 防止 SQL 注入攻击
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
产品介绍 产品文档
云数据库采购特惠,高性能、高可靠、高安全,超值优惠等你享!
领券
问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

哆哆女性网算命起名免费男孩起名梓源好吗末世小说排行榜猪的宝宝起名忌用的字百度seo教程网周易六十四卦卦名梦到有人怀孕周公解梦成都品牌推广营销丑石读后感300字0663餐饮连锁创始人2021姓李的女孩起名字大全周易培训哪家好周易生辰八字免费起名名称测起名海报百合花种球种植时间名字测试打分周易免费梦婷名子的解释和寓意手机表白网站制作方法个人站如何做seo广州seo排名xtdseo南昌微信营销推广公司起名网的英文名字seo网站推广起姓杨的女孩名字大全网站设计与建设承德网站排名优化水浒传读后感400字深圳外包设计网站长篇鬼故事大全超吓人鬼故事广播电台淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化