MySQL的JDBC操作、pymysql操作

JDBC

        JDBC (Java DataBase Connectivityjava数 据库连接)是一种用于执行SQL语句的Java API。 JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问, 它由一组用Java语言编写的接口和类组成。

        JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

JDBC核心类和接口

        DriverManager:用于注册驱动

        Connection:表示与数据库创建的连接

        Statement/PrepareStatement:操作数据库sql语句的对象

        ResultSet:结果集或一张虚拟表

        需要先下载导入架构包

执行流程

1:注册驱动

        DriverManager.registerDriver (驱动);

2:建立与数据库服务器的连接

        DriverManager.getConnection(ip ,端口 ,数据库 ,用户名 ,密码);

3:将sql指令发送给服务器执行

        Statement / Preparedstatement executeUpdate () / executeQuery ()

        Statement是初级的,Preparedstatement是较为高级的。executeUpdate () 执行增删该,executeQuery ()执行查询。

4:处理服务器返回的结果

        1:返回行数rows

        2:返回一张表(结果集) ResultSet

5:释放资源

        close();

public class JdbcDemo {public static void main (String[] args) throws Exception {//使用JDBC规范,采用都是java.sql包下的内容//1 注册驱动DriverManager.registerDriver(new com.mysql.jabc.Drive());//可以省略,因为内部已经设置好了。//2 获得连接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase","root","123456");//3 执行SQL语句Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("select name ,id from table");//查询数据int rows = statement.executeLargeUpdate("insert into table values(3, Name3)'");//添加数据,返回值是影响了几行数据。引号中的SQL语句还可以是增删改的语句。//4 处理结果while (resultSet.next()){int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id + " " + name);//列名也可以换成数字,从1开始。}//5 关闭连接resultSet.close();statement.close();connection.close();}
}

结果集优化

获取表的列数

ResultSetMetaData resultSetMetaData = resultSet.getMetaData();int coLumnCount = resultSetMetaData.getCoLumnCount();

处理结果便可用下列方式

while (resultSet.next()){for(int i = 1; i >= coLumnCount; i++){System.out.print(resultSet.getObject(i) + "\t");}System.out.println();Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase","root","123456");
}

SQL注入

        用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义。

 示例

public static void main(String[] args) throws SQLException {//用户输入用户名和密码,判断是否能够登录Scanner scanner = new Scanner(System.in);System.out.printLn("请输入用户名:");String username = scanner.nextLine();System.out.print1n("请输入密码:");String password = scanner.nextLine();Statement statement = connection.createStatement();String sql = "select * from user where username = '" + username + "' and password = ' " + password + "'";ResultSet resultSet = statement.executeQuery(sql);if(resultSet.next()){System.out.println("登录成功!");}else{System.out.println("登录失败!");}//当用户收益输入账号或密码时有可能会造成SQL注入。

不用createStatement可以解决上列问题,用connection.prepareStatement()进行预处理即可。

public static void main(String[] args) throws SQLException {Scanner scanner = new Scanner(System.in);System.out.printLn("请输入用户名:");String username = scanner.nextLine();System.out.print1n("请输入密码:");String password = scanner.nextLine();String sql = "select * from user where username = ? and password = ?";PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setObject(1, username);//设置第一个问号是usernamepreparedStatement.setObject(2, password);//设置第一个问号是passwordResuLtSet resultSet = preparedStatement.executeQuery();if(resultSet.next()){System.out.println("登录成功!");}else{System.out.println("登录失败!");}

 

pymysql

        PyMySQL是一个纯Python实现的MySQL客户端库,支持兼容Python3,用于代替MySQLdb。

        以管理员身份打开命令行窗口,输入pip install PyMySQL可以下载qymysql

查询操作

# 导入模块
import pymysql#获取MySQL连接
conn = pymysql.connect(host = 'localhost', port = 3306; user= 'root', password= '123456', database= 'myDatabase', charset='utf8')# 获取游标
cursor = conn.cursor()# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sqL = "select * from student;"
row_count = cursor.execute (sql)
print("SQL语句执行影响的行数%d" %row_count)# 取出结果集中一行 返回的结果是一行
# print(cursor.fetchone())# 取出结果集中的所有数据 返回一行数据
for line in cursor.fetchall():print(line)# 关闭游标
cursor.close()# 关闭连接
conn.close()

增删改操作

import pymysql
conn = pymysql.connect(host = 'localhost', port = 3306; user= 'root', password= '123456', database= 'myDatabase', charset='utf8')
cursor = conn. cursor()# 插入数据
# sql = "insert into student values(%s, %S, %S)"
# data = (4, '晁盖', 34)
# cursor.execute(sql, data) #sql和data之间以","隔开# 修改数据
# sql = "update student set sname = %s where sid = %s"
# data = ('李道',4)
# cursor.execute(sql, data)# 删除数据
# sql = "delete from student where sid = %s"
# data = (4)
# cursor.execute(sql, data)conn.commit() # 提交,不然无法保存插入或者修改的数据!!!cursor.close()
conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习天机02

1.注入bean的写法 构造函数的注入 2.回答和评论 在做这个功能的时候需要理解一些概念,张三提出问题就是提问者,李四去回答张三的问题,李四就是回答者,王五去回答李四的评论,王五就是评论者。 在提供的InteractionRep…

reprod_log复现精度对比小工具

reprod_log复现精度对比小工具 主要用于对比和记录模型复现过程中的各个步骤精度对齐情况 pip 安装 pip3 install reprod_log --force-reinstall 提供的类和方法 论文复现赛 在论文复现赛中,主要用到的类如下所示。 ReprodLogger 功能:记录和保存…

MySQL免安装版安装教程

官网下载安装包 MySQL :: Download MySQL Community Server (Archived Versions) 选择mysql版本下载 安装配置MySQL 将下载完的Mysql安装包解压到指定目录 打开windos系统的cmd,以管理员身份运行 进入mysql文件夹中的bin目录 安装MySQL的服务mysqld --install 初…

代码随想录刷题第33天

第一题是k次取反后求数组最大和https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/,使用了两次贪心策略:第一次是优先将绝对值大的负数进行取反,若负数取完后,取反次数仍有剩余,则将…

幻兽帕鲁游戏联机的时候,显示“网络连接超时”怎么解决?

如果你在游戏联机的时候,显示“网络连接超时”,可以检查下: 1、前提是你已经按照教程部署成功 2、检查防火墙有没有忘记设置,协议是UDP(只有TCP不行,一定要有UDP),端口是否填了8211&…

AI:128-基于机器学习的建筑物能源消耗预测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

02 c++入门

目录 c关键字命名空间c输入&输出缺省参数函数重载引用内联函数auto关键字(c11)基于范围的for循环(c11)指针空值—nullptr(c11) 0. 本节知识点安排目的 c是在c的基础上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等…

【论文精读】DINO

摘要 基于对ViT在监督学习领域的表现质疑,探究自监督方法下的ViT是否具有更好的特征提取能力,进而发现: 自监督ViT特征包含场景布局、对象边界。这些信息可以在最后一自注意力模块中直接访问。自监督ViT特征结合最近邻分类器(k-NN)分类头中表…

java-8组合式异步编程

11.1 Future 接口 Future接口在Java5中被引人,设计初衷是对将来某个时刻会发生的结果进行建模。它建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作把调用…

【VSCode】使用笔记

目录 快捷键系列 相关插件 相关文档链接 快捷键系列 调出终端 ctrl 或者是ctrlJ 结束进程 ctrlc 注释 ctrlkc 取消注释 ctrlku 上下移动代码 alt方向键 多行光标ctrlalt方向键 快速跳过某个单词 ctrl方向键 相关插件 1.每次修改后,自动保存启动项目 相…

【AIGC】Stable Diffusion介绍

Stable Diffusion 是一个基于 OpenAI 的 Diffusion 模型的扩展版本,它采用了稳定扩散(Stable Diffusion)的技术,旨在提高图像生成和处理的质量。下面是 Stable Diffusion 的详细介绍: 基于 Diffusion 的图像生成&…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)

效果演示 文章目录 效果演示系列目录前言存储加载物品信息源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快…

基于stm32的水产养殖环境监测系统设计

基于STM32的水产养殖环境监测系统设计 一、引言 随着水产养殖业的快速发展,水质管理成为影响养殖效益的关键因素。因此,开发一种基于STM32的水产养殖环境监测系统,用于实时监测水质参数并提供报警机制,对于提高养殖效率、减少损失具有重要意义。 二、系统架构 整个系统…

黄金交易策略(Nerve Nnife.mql4):移动止盈的设计

完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 相较mt4的止盈止损,在ea上实现移动止盈,可以尽最大可能去获得更高收益。移动止盈的大体逻辑是:到达止盈点就开始追踪止盈,直到在最高盈利点回撤指定点数即平…

内网渗透Searchall敏感凭证信息搜索工具

一、开发背景 在实战中进入内网的时候,大家需要搜集一些敏感信息例如账号,密码甚至浏览器的账号密码。searchall完美解决了这个问题。所以我就结合自身的经验写了一款搜索敏感信息的利用工具。它可以搜索敏感信息,更快为你获取到有价值的信息…

【机器学习】数据清洗之识别重复点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

武器级工具包 Immunity Canvas 7.26安装使用体验

介绍: Immunity Canvas工具包有集成化、自动化、简单化的特点,大幅降低了攻击门槛。该工具是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具工具本来并不开源,但是在2021年Immu…

函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数

1. 什么是递归&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 下面是一个最简单的C语言递归代码&#xff1a; #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main函数…

基于Java (spring-boot)的房屋租赁管理系统

一、项目介绍 基于Java (spring-boot)的房屋租赁管理系统功能&#xff1a;登录、管理员、租客、公告信息管理、房屋信息管理、用户信息管理、租金信息管理、故障信息管理、房屋出租信息详情、个人信息、修改密码、等等等。 适用人群&#xff1a;适合小白、大学生、毕业设计、课…

java远程连接Linux执行命令的三种方式

java远程连接Linux执行命令的三种方式 1. 使用JDK自带的RunTime类和Process类实现2. ganymed-ssh2 实现3. jsch实现4. 完整代码&#xff1a;执行shell命令下载和上传文件 1. 使用JDK自带的RunTime类和Process类实现 public static void main(String[] args){Process proc Run…