目录
一、MySQL的JDBC操作
JDBC(java DataBase Connectivity, JAVA数据库连接)是一种用于执行SQL语句的JAVA API。通俗点讲就是通过java远程连接数据库(MySQL,Server,Oracle),然后调用java的相关方法实现数据库的操作。JDBC是java访问数据库的标准规范。
JDBC需要连接驱动,驱动是两个设备进行通信需要满足的通信数据格式(是java远程连接数据库的依赖),连接不同的数据库需要提供不同的连接驱动。
JDBC的核心类与接口
DriverManage :驱动管理,用于注册驱动
Connection :表示与数据库创建的连接
Statement/PrepareStatement : 操作数据库sql语句的对象
ResultSet :结果集或一张虚拟表
java本身是没有上述类和接口的,只有整合了mysql的jdbc驱动才可以使用。
executeUpdate()用于执行增删改返回rows(int类型)行数,executeQuery()用于执行查询返回ResultSet。Statement和PreparedStatement是执行器。
我们使用idea进行开发:首先向idea添加驱动
把驱动jar包粘贴到这个lib目录下:
将jar包与java项目进行整合:
然后就可以进行写代码了:准备数据:
new com.mysql.jdbc.Driver默认会有异常我们将其抛出,注意”\t“表示回车符号,不能写成'\t',如果写成'\t',java会将其视为一个普通字符会使用它的ASCII码9进行计算。
上述代码还可以进行优化:A、注册驱动可以不用写,java已经自动注册好了。B、在获取每一列数据时,我们可以不写列名直接写列的索引(从1开始)
思考:当不知道要查询的表有多少列时,且不知道列是什么类型时,该怎么办呢?
进行增删改操作:
SQL注入问题:用户输入的内容作为了SQL语句语法的一部分,如果用户输入不当,会改变原有SQL的真正意义。
数据准备:
当用户输入的用户名和密码是我们记录的值时,成功登录。否则登录失败。
正常情况下只有输入zhangsan,123456或lisi,888888才能登录成功,但是下面的情况也会登录成功:
我们对sql语句进行拼接:
select * from user where username = ‘eoioei’ and password = 'aaa 'or' 1=1'
' 1=1'永远为真,where永远为真,因此可以登录。在实际开发中这显然是不合理的,如何解决该问题呢?可以使用PrepareStatement
我们在代码中输出一下preparedStatement对象:
可见preparedStatement预处理会自动识别用户的输入内容,如果识别到单引号,会自动对其转义,使其失去单引号的意义。
二、MySQL的pymysql操作
与java一样python也可以与数据库建立连接,这里我们使用pymysql方法来与MySQL数据库建立连接,除此之外python还有很多很多方法与MySQL建立连接。
import pymysql
# 与mysql数据库建立连接
conn = pymysql.connect(host='localhost', port = 3306, user = 'root', password = '123456',database = 'mydb6', charset = 'utf8')
# 建立游标方便后续取数据
cursor = conn.cursor()
sql = 'select * from tb_seller;'
# 执行sql语句返回的结果为影响的行数
row = cursor.execute(sql)
print(row)
print(cursor.fetchone()) # 取一行数据
# 取所有行数据
for i in cursor.fetchall():
print(i)
# 释放资源
cursor.close()
conn.close()
import pymysql
conn = pymysql.connect(host='localhost',port=3306,user='root',password='123456',database='mydb6',charset='utf8')
cursor = conn.cursor()
# insert
# sql = 'insert into tb_seller values(%s,%s,%s,%s,%s,%s,%s);'
# data = ('tenxun','腾讯科技','马化腾集团','e10adc3949ba59abbe56e057f20f883e','1','北京市','2088-01-01 12:00:00')
# cursor.execute(sql,data)
# updata
# sql = 'update tb_seller set name = %s where sellerid = %s;'
# data = ('腾讯科技有限公司','tenxun')
# cursor.execute(sql,data)
# conn.commit()提交,如果未提交修改不会执行
# delete
sql = 'delete from tb_seller where sellerid = %s;'
data = ('tenxun')
cursor.execute(sql,data)
conn.commit()
cursor.close()
conn.close()