java语言基础之JDBC技术(一)——jdbc连接mysql数据库

一.jdbc概述

1.什么是jdbc

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范,JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC只规范定义接口,具体的实现由各大数据库厂商来实现。 JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个 数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即 可,数据库驱动由数据库厂商提供。 
java语言基础之JDBC技术(一)——jdbc连接mysql数据库_第1张图片

2.使用jdbc的好处

(1) 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
(2) 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库

3.使用JDBC开发使用到的核心API:
接口或类 作用
DriverManager 类 (1) 管理和注册数据库驱动( 2) 得到数据库连接对象
Connection 接口 连接对象,可用于创建 Statement 和 PreparedStatement 对象
Statement 接口 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。
PreparedStatemen 接口 SQL 语句对象,是 Statement 的子接口
ResultSet 接口 用于封装数据库查询的结果集,返回给客户端 Java 程序
4mysql连接jdbc驱动包

java语言基础之JDBC技术(一)——jdbc连接mysql数据库_第2张图片
mysql数据库的驱动包,我这里提供两个版本的,mysql数据库版本8.0以上的用第二个,
mysql数据库版本5.x以上的用第一个。下载请点击https://blog.csdn.net/weixin_43951932/article/details/88911164

二.jdbc访问mysql数据库的代码实现

1.jdbc开发步骤:

(1) 注册和加载驱动(可以省略)
(2) 获取连接
(3) Connection 获取 Statement 对象
(4) 使用 Statement 对象执行 SQL 语句
(5) 返回结果集
(6) 释放资源

2.准备工作:

(1)导入mysql驱动包,创建java项目,右键src创建lib文件夹,如图所示。
在这里插入图片描述
(2)将准备好的Mysql驱动包复制到lib下,展开lib,选中mysql -connector-java-8.0.12,右键build path,选择Add to Build Path.出现如图所示的小奶瓶即可。
java语言基础之JDBC技术(一)——jdbc连接mysql数据库_第3张图片
(3)建立testss数据库,准备数据库表user,在mysql下面建表。添加数据。
create table user(
username varchar(45),
password varchar(45)
)

insert into user values(‘juhao’,‘123456’)
insert into user values(‘huhahei’,‘8888’)
insert into user values(‘wyywywy’,‘99999’)

3.代码编写(实现简单的查询功能):
public class Test {

	public static void main(String[] args)  {
		String url  = "jdbc:mysql://localhost:3306/testss";
		String user = "root";//mysql数据库的用户
		String pword = "root";//mysql数据库的密码
		Connection con = null;
		Statement st = null;
		try {
			//1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.创建连接
			con = DriverManager.getConnection(url,user,pword);
			//3.创建statement对象
			st = con.createStatement();
			String sql = "select * from user";
			//4.使用 Statement 对象执行 SQL 语句
			ResultSet resultSet = st.executeQuery(sql);
			//5.获得结果集对结果集进行处理
			while(resultSet.next()) {
		        String username = resultSet.getString("username");
				String password = resultSet.getString("password");
				System.out.println(username+" "+password);
			}
		
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		} catch (SQLException e) {
		
			e.printStackTrace();
		} finally {
			//6.关闭连接,释放资源
			try {
				if(st !=null) {
					st.close();
				}
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			try {
				if(con !=null) {
					con.close();
				}
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

代码执行结果为
java语言基础之JDBC技术(一)——jdbc连接mysql数据库_第4张图片注意:这里用的是mysql5.1的驱动版本

三.步骤详解

1.加载数据库驱动:——》Class.forName(“com.mysql.jdbc.Driver”)

通过反射,加载数据库的驱动包。
注意:对于mysql的8.0版本应该写Class.forName(“com.mysql.cj.jdbc.Driver”);

2.获得Connection连接——》DriverManager.getConnection(url,username,password)

其中三个参数分别表示,url 需要连接数据库的位置(网址),user用户名 ,password 密码url比较复杂,下面是mysql5.5以下的url:
url = “jdbc:mysql://localhost:3306/testss”
JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。
(1) 第一部分是jdbc,这是固定的;
(2)第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
(3)第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(testss)组成。
(4)注意:对于mysql的8.0版本应该写"jdbc:mysql://localhost:3306/要连接的数据库名称?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8",
这是由于mysql5.5+要求加时区等参数。其中的characterEncoding用于设置编码格式,防止乱码。

3. Connection 获取 Statement 对象

String sql = "select * from user ";
获取Statement语句执行平台:Statement st = con.createStatement();
其中的常用方法:

方法名称 作用
int executeUpdate(String sql); 执行insert update delete语句
ResultSet executeQuery(String sql); 执行select语句
boolean execute(String sql) 执行select返回true 执行其他的语句返回false.
4 处理结果集(执行insert、update、delete无需处理)

ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:
rs.next();//指向第一行
rs.getInt(1);//获取第一行第一列的数据
常用方法:

方法名称 作用
Object getObject(int index) 获得任意对象
String getString(int index) / Object getObject(String name) 获得字符串
int getInt(int index) / Object getObject(String name) 获得整形
double getDouble(int index) 获得双精度浮点型
5 释放资源

与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

四.实例(sql注入问题)–》用jdbc实现简单的登录功能

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class loginTest {

	public static String login(String username,String password){
		String url  = "jdbc:mysql://localhost:3306/testss";
		String user = "root";//mysql数据库的用户
		String pword = "root";//mysql数据库的密码
		String result = "登录失败";
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url,user,passwordjdbc);
			stat = conn.createStatement();
			String sql = "select * from user where username='"+username+"' and password='"+password+"'";
			System.out.println(sql);
			rs = stat.executeQuery(sql);
			//如何能知道这个人登录成功还是失败呢?
			if (rs.next()){
				result =  "登录成功";
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			//无论出现什么情况 都必须保证关闭是执行的
			try {
				if (rs != null){
					rs.close();
				}
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			try {
				if (stat != null){
					stat.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if (conn != null){
					conn.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}
	public static void main(String[] args) {
		String s = login("juhao","123456");
		System.out.println(s);
		String ss = login("juhao","XXX' or 'a'='a");
		System.out.println(ss);
	}

}

结果为:
java语言基础之JDBC技术(一)——jdbc连接mysql数据库_第5张图片由结果可以看出,输入正确的用户名和密码,用户正常登录成功,但是输入"XXX’ or ‘a’='a"这种形式的东西,用户也正常登录了,这就是jdbc中的sql注入问题。由此产生的问题在下一篇博文将会详细。请注意查看。

你可能感兴趣的:(java编程语言,mysql数据库)