Java中使用JDBC连接Mysql数据库

1 软件下载

1.1 Mysql和Eclipse

Mysql和Eclipse的安装查看我的其他教程,这边说下JDBC的下载

1.2 驱动包

我们需要下载一个jar的数据库连接驱动包,点击下载 mysql-connector-java-5.1.39-bin.jar 到本地

2 新建数据

新建一个数据库 myshool

CREATE TABLE `grade` (
  `gradeid` int(10) unsigned NOT NULL COMMENT '年级编号',
  `gradename` char(10) NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据

INSERT INTO `grade` VALUES ('3', '3年级');
INSERT INTO `grade` VALUES ('4', '4年级');
INSERT INTO `grade` VALUES ('5', '5年级');
INSERT INTO `grade` VALUES ('6', '6年级');

3 驱动包导入

  1. 新建工程后,找到自己的工程,右键 -> Properties
    在这里插入图片描述
  2. 弹出的窗口中 -> Libraries -> Modulepath -> Add External JARs -> 找到你刚刚下载的jar文件,确认导入 -> Apply and close
    在这里插入图片描述
  3. 这时候我们可以看到目录下多了Referenced Libraries文件,他底层下就是我们的jar包
    在这里插入图片描述

4 具体实现配置连接

4.1 实现步骤

JDBC的流程:

  1. 加载驱动: DriverManager Class.forname("")加载驱动路径(“高版本”可以忽略①
    java有一个SPI机制所以JVM会将jar包Meta-Inf\Services\某个接口中所定义的那个类自动加载到JVM;而高版本的驱动中就包含了service/xx -> com.mysql.jdbc.Driver
  2. 建立连接:用DriverManager的方法getConnection获取数据库路径、账号和密码
  3. 获取PreparedStatement对象 PreparedStatement pstmt = conn.prepareStatement(sql);
  4. 发送/执行sql语句:把获得的连接CreateStatement方法发送给服务器
  5. 接受/处理结果集:得到数据库/服务器返回的结果集并处理,executeQuery处理sql语句

4.2 具体代码

在我们的Ecilipse中新建一个class类,写上如下代码,******是可以根据个人情况修改的

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

public class TestGradeDB {
	//1. JDBC的驱动位置 + 数据库的位置
	public final static String JDBC_Driver = "com.mysql.jdbc.Driver";
	public final static String DB_Url = "jdbc:mysql://localhost:3308/myshool";
	
	//2. 	输入账号和密码
	public final static String Username = "root";
	public final static String Password = "root";
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Connection conn = null;//数据库的连接对象
		Statement stmt = null;//statement连接对象
		ResultSet rs = null;//结果集对象
		try {
			//1.	加载驱动
			Class.forName(JDBC_Driver);
			
			//2.	建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);
			
			//3.	发送SQL语句
			stmt = (Statement) conn.createStatement();
			
			//4.	获得结果集
			String sql = "select * from grade" ;
			//String sql = "select * from grade" + " where gradeid =2";
			rs = stmt.executeQuery(sql);
			
			//5.	处理结果集
			while (rs.next()) {
				int gradeid = rs.getInt("gradeid");
				String gradename = rs.getString("gradename");
				//String 
				
				System.out.print("ID:"+gradeid);
				System.out.println(" 姓名:"+gradename);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//6.	关闭(释放)资源
			try {
				rs.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }
	}
}

运行结果:
在这里插入图片描述

年级-班级

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TestGradeDB {
	
	List<Grade> list = new ArrayList<Grade>();

	Connection conn = null;// 数据库的连接对象
	PreparedStatement ps = null;// statement连接对象
	ResultSet rs = null;// 结果集对象

	// 1. JDBC的驱动位置 + 数据库的位置
	public final static String JDBC_Driver = "com.mysql.jdbc.Driver";
	public final static String DB_Url = "jdbc:mysql://localhost:3308/myshool";

	// 2. 输入账号和密码
	public final static String Username = "root";
	public final static String Password = "root";

	//查询所有
	public List<Grade> listGrade() {
		try {
			// 1. 加载驱动
			Class.forName(JDBC_Driver);

			// 2. 建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);

			// 3. 发送SQL语句
			String sql = "select * from grade";
			ps =  conn.prepareStatement(sql);

			// 4. 获得结果集
			rs = ps.executeQuery(sql);

			// 5. 处理结果集
			while (rs.next()) {
				Grade grade = new Grade(rs.getInt("gradeId"), 
						rs.getString("gradeName"));
				list.add(grade);
				//防止对象空指向
				grade = null;
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 6. 关闭(释放)资源
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return list;
	}
	
	//按年级编号查询
	public Grade getGradeid(int gradeId) {
		Grade grade = null;
		try {
			// 1. 加载驱动
			Class.forName(JDBC_Driver);

			// 2. 建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);

			// 3. 发送SQL语句
			String sql = "select * from grade where gradeid = ?";
			ps =  conn.prepareStatement(sql);
			
			// 4. 获得结果集
			ps.setInt(1, gradeId);
			
			rs = ps.executeQuery();
			

			// 5. 处理结果集
			if (rs.next()) {
				grade = new Grade(rs.getInt("gradeId"), 
						rs.getString("gradeName"));
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 6. 关闭(释放)资源
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return grade;
	}
	
	//添加年级信息
	public int addGrade(int gradeId, String gradeName) {
		int result = -1;
		
		try {
			// 1. 加载驱动
			Class.forName(JDBC_Driver);

			// 2. 建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);

			// 3. 发送SQL语句
			String sql = "Insert into grade(gradeid,gradename) value(?,?)";
			
			ps =  conn.prepareStatement(sql);

			ps.setInt(1, gradeId);
			ps.setString(2, gradeName);
			
			// 执行添加数据
			result = ps.executeUpdate();

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 6. 关闭(释放)资源
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}
	
	//修改信息
	public int updateGrade(Grade grade) {
		int result = -1;
		
		try {
			// 1. 加载驱动
			Class.forName(JDBC_Driver);

			// 2. 建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);

			// 3. 发送SQL语句
			String sql = "update grade set gradename=? where gradeid=?";
			
			ps =  conn.prepareStatement(sql);

			ps.setString(1,grade.getGradeName());
			ps.setInt(2,grade.getGradeId());
			
			// 执行添加数据
			result = ps.executeUpdate();

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 6. 关闭(释放)资源
			try {
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}
	
	//删除年级信息
	public int deleteGradeById(int gradeId) {
		int result = -1;
		
		try {
			// 1. 加载驱动
			Class.forName(JDBC_Driver);

			// 2. 建立连接
			conn = DriverManager.getConnection(DB_Url, Username, Password);

			// 3. 发送SQL语句
			String sql = "Delete From grade where gradeid = ?";
			
			ps =  conn.prepareStatement(sql);
			ps.setInt(1, gradeId);
			// 执行删除数据
			result = ps.executeUpdate();

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 6. 关闭(释放)资源
			try {
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return result;
	}
	
	
	//主程序
	public static void main(String[] args) {
		//查询
		TestGradeDB tg = new TestGradeDB();
		// TODO Auto-generated method stub
		tg.listGrade();
		System.out.println("查询结果:");
		System.out.println("年级编号\t年级名称");
		for (Grade item : tg.list) {
			System.out.println(item.getGradeId()+"\t"+item.getGradeName());
		}
		
		//查询年级编号为4 的信息
		Grade grade = tg.getGradeid(4);
		System.out.println("年级编号"+"\t年级名称");
		System.out.println(grade.getGradeId() + "\t" +grade.getGradeName());
		
		//添加数据
		int result =  tg.addGrade(2, "2新加");
		if (result>0) {
			System.out.println("添加成功");
		}
		
		//修改数据
		int  result = tg.updateGrade(new Grade(6,"很6的六年级"));
		
		//删除年级信息
		int result=tg.deleteGradeById(6);
	}
}

package test;
/**
 * 	Grade类
 * @author administrator
 *
 */
public class Grade {
	private int gradeId;
	private String gradeName;
	
	public Grade() {
		// TODO Auto-generated constructor stub
	}

	public Grade(int gradeId, String gradeName) {
		super();
		this.gradeId = gradeId;
		this.gradeName = gradeName;
	}

	public int getGradeId() {
		return gradeId;
	}

	public void setGradeId(int gradeId) {
		this.gradeId = gradeId;
	}

	public String getGradeName() {
		return gradeName;
	}

	public void setGradeName(String gradeName) {
		this.gradeName = gradeName;
	}
	
}

附:JDBC相关资料

1 JDBC介绍

JDBC的定义:
JDBC是Java数据库连接技术,提供连接和操作各种常用数据库的能力
在这里插入图片描述

2 JDBC工作原理

在这里插入图片描述

3 JDBC API主要功能

  1. 与数据库建立连接
  2. 执行SQL语句
  3. 处理结果

结合上图:

作用接口/类
DriverManager依据数据库的不同,管理JDBC驱动
Connection负责连接数据库并担任传送数据的任务接口
Statement由Connection产生、负责执行SQL语句接口
ResultSet返回展示结果集接口

日后修改

1 方法作用

方法功能返回值类型
getConn()得到一个连接对象Java.sql.Connection
exUpdate(sql语句)增加、删除、修改通用代码Boolean:true 操作成功;false则失败
exQuery(Sql语句,Class cla,可变参数)通用查询返回结果为List
closeAll(rs.pstmt,conn)释放资源void无
object convert(ResultSet rs,Class cla )结果集合对象转换object类型对象

2 接口和类的作用:

接口/类作用
DriverManager获取连接对象:静态方法getConnection(url,user,password)
Connection接口连接特定数据库的接口,主要用于创建PrepareStatement:
PreparedStatement接口是具体执行增加修改删除查询的操作对象
ResultSet接口完成查询结果的单次存储功能,不能来回滚动读取,翻译为结果集,非离线读取

3 Statement和PreparedStatement的联系和区别

联系区别
1.PreparedStatement继承Statement1.PreparedStatement 可以使用占位符(也就是 ),表示预编译的SQL语句的对象,Statement不能使用占位符,只能通过字符串的拼接来实现
Statement/PreparedStatement2.SQL语句预编译并存储在PreparedStatement对象中2.PreparedStatement批处理比Statement效率高
3. PreParedStatement和Statement都是接口,都可以实现对数据表的CRUD操作、增删改查3.PreparedStatement更安全,能防止SQL注入(恶义SQL语法)。
4.PreparedStatement可以实现操作Blob类型的数据3.PreparedStatement 可以实现相对于Statement的高效的批量插入

注:PreparedStatement是接口对象;prepareStatement()是方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千鹤万象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值