JDBC (Java DataBase Connectivityjava数 据库连接)是一种用于执行SQL语句的Java API。 JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问, 它由一组用Java语言编写的接口和类组成。
JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。
JDBC核心类和接口
DriverManager:用于注册驱动
Connection:表示与数据库创建的连接
Statement/PrepareStatement:操作数据库sql语句的对象
ResultSet:结果集或一张虚拟表
需要先下载导入jar包
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());
//MySQL5之后的驱动包,可以省略注册驱动的步骤
//2 获得连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase","root","123456");//当连接的是本机且端口号为默认的3306时localhost:3306可以省略不写
//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();
}
用户输入的内容作为了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();
Connection connection = DriverManager.getConnection("jdbc:mysql:///myDatabase","root","123456");
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("登录失败!");
}
resultSet.close();
statement.close();
connection.close();
//当用户收益输入账号或密码时有可能会造成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();
Connection connection = DriverManager.getConnection("jdbc:mysql:///myDatabase","root","123456");
String sql = "select * from user where username = ? and password = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1, username);//设置第一个问号是username
preparedStatement.setObject(2, password);//设置第一个问号是password
ResuLtSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
System.out.println("登录成功!");
}else{
System.out.println("登录失败!");
}
resultSet.close();
preparedStatement.close();
connection.close();
}
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()