MySQL的JDBC操作、pymysql操作

JDBC概述

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

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

JDBC入门案例

JDBC核心类和接口

DriverManager:注册驱动

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

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

ResultSet:结果集或一张虚拟表

执行流程

JDBC入门案例

代码编写

public class JdbcDemol {

public static void main(String[ ] args) throws Exception {

//注意:使用JDBC规范,采用都是java.sq1包下的内容

//1、注册驱动

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

//2、获得连接

String url = "jdbc:mysql://localhost:3306/mydb16_jdbc";

Connection conn = DriverManager.getConnection(url,"root","123456");

//3、获得执行sq1语句的对象

Statement stmt = conn.createStatement() ;

//4、执行SQL语句

ResultSet rs = stmt.executeQuery("select * from student");

while(resultSet.next()){//获取每一行数据

//获取每一列数据

// int sid = resultSet.getInt("sid");

int sid = resultSet.getInt(1);

// String sname = resultSet.getString("sname");

String sname = resultSet.getString(2);

// int age = resultSet.getInt("age");

int age = resultSet.getInt(3);

System.out.println(sid + "\t" + sname + "\t" + age);

}

public class JdbcDemo01 {

public static void main(String[] args) throws SQLException {

//1:注册驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

//2:获取连接

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb16_jdbc");

//3:执行sql

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery("select * from student");

//4:处理结果集

while(resultSet.next()){//获取每一行数据

/∥获取每一列数据

int sid = resultSet.getInt("sid");

String sname = resultSet.getString("sname");

int age = resultSet.getInt("age");

System.out.println(sid + "\t" + sname + "\t" + age);

}

另一种处理结果集方式如下:

while(resultSet.next()){//获取每一行数据

//取每一列数据

for (int i= 1;i

System.out.print(resultSet.getObject(i)+"\t");

System.out.println();

}

//3:执行sql

Statement statement = connection.createStatement();

//3.1增加数据

// int rows1=statement.executeUpdate("insert into student values(NULL,'鲁智深',40)");

//3.2修改数据

//int rows2= statement.executeUpdate("update student set age= 48 where sname='武松");

//3.3删除数据

int rows3= statement.executeUpdate("delete from student where sname ='鲁智深'");

System.out.println(rows3);

JDBC的SQL注入

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

使用预编译可以解决这一问题,他会将输入的东西都变成参数,将单引号双引号都进行转义

//2:获取连接

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb16_jdbc", "root')

//3:执行sql

Statement statement = connection.createStatement():

String sql = "select * from user where username = "+username+" and password = "+password+"";

ResultSet resultSet = statement.executeQuery(sql);

用户名密码随便输入,后面加上 'or' 1=1 就可以成功登录,sql就注入了

String sql = "select * from user where username = ? and password = ? ";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.set0bject(1,username);

preparedStatement.setObject(2,password);

ResultSet resultSet = preparedStatement.executeQuery();

采用预处理方式就不会存在sql注入,因为他会把输入的信息整体当成密码,不会影响sql的整体功能

select * from user where username = 'ddd' and password ='+owow''or''1=1'; --将整体当成密码

MySQL的pymysql操作

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

import pymysql

conn = pymysql.connect(host='localhost', port=3306, user='root',password='123456',database='mydb17_pymysql', charset='utf8')

#获取游标

cursor = conn.cursor()

执行S QL语句 返回值就是S QL语句在执行过程中影响的行数

sql = "select * from student;"

row_count = cursor.execute(sql)

print("S QL语句执行影响的行数%d"% row_count)

#取出结果集中一行返回的结果是一行

print(cursor.fetchone())

#取出结果集中的所有数据

返回一行数据

for line in cursor.fetchall():

print(line)

#关闭游标

cursor.close()

#关闭连接

conn.close()

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

#取出结果集中一行返回的结果是一行

#print(cursor.fetchone())

#取出结果集中的所有数据

返回一行数据

for line in cursor.fetchall():

print(line)

#关闭游标

cursor.close()

#关闭连接

conn.close()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值