我的学习JDBC之路

1 篇文章 0 订阅

1.连接Mysql

1.1.添加驱动

在项目当中创建一个文件夹为lib

把Mysql驱动包复制到该文件夹下

.builder path 编译路径 在这里插入图片描述

1.2.创建连接

查看驱动相关api:ctrl+shift+t 查找drive,点进去后, 要求关联源码,把驱动压缩包直接关联

.加载驱动:把com.mysql.jdbc.Driver这份字节码加载进JVM,当一份字节码被加载到JVM时,就会执行该字节码中的静态代码块

.获取连接对象:连接时要求传入数据库地址,用户名,密码

package myJDBCstudy;

import java.sql.DriverManager;
import java.sql.Connection;

public class ConnectionClass {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		
		//1.加载驱动
		//把com.mysql.jdbc.Driver这份字节码加载进JVM
		//当一份字节码被加载到JVM时,就会执行该字节码中的静态代码块
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接对象
		//2.1数据库地址
		String url = "jdbc:mysql://localhost:3306/jdbc";
		//2.2用户名
		String user = "root";
		//2.3密码
		String password = "123456";
		Connection conn = DriverManager.getConnection(url,user,password);
		
		//打印是否连接成功
		System.out.println(conn);
	}

}

2.创建Mysql表

2.1.创建要执行的sql语句

Statement接口,用来执行静态SQL语句对象

把SQL语句发送到数据库中去执行。并返回执行的结果

executeUpate(String)(执行DML和DDL语句);

2.2.释放资源

Connection连接就相当于Java和到Mysql之间建立管道

连接只连接到数据,Statement 就相当于从数据库又接了一个管道连接Mysql的执行程序在这里插入图片描述

把管道给撤了

package com.createTable;

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

public class CreateTable {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		
		//1.加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获取连接对象
		String url = "jdbc:mysql://localhost:3306/jdbc";
		String user = "root";
		String password = "123456";
		Connection conn = DriverManager.getConnection(url,user,password);
		
		//3.编写sql语句
		String sql = "create table stu(id int,name varchar(50),age int)";
		Statement st = conn.createStatement();
		
		//4.执行sql
		int row = st.executeUpdate(sql); //row 的值就是表中被更改的行数
		System.out.println(row);
		
		//5.释放资源
		st.close();
		conn.close();
		
	}

}

3.JDBC执行DML(insert,delete,update)操作

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

public class InsertClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Connection conn=null;
		Statement st=null;
		try {
			//1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取连接对象
			String url = "jdbc:mysql://localhost:3306/jdbc";
			String user = "root";
			String password = "123456";
			conn = DriverManager.getConnection(url,user,password);
			
			//3.编写sql
			String sql = "insert into stu values (1,'zs',20)";
			st = conn.createStatement();
			
			//4.执行sql
			int row = st.executeUpdate(sql);
			System.out.println(row);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//5.释放资源
			if(st!=null) {
				try {
					st.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			if(conn!=null) {
				try {
					conn.close();
				} catch (Exception e2) {
					// TODO: handle exception
				}finally {
					
				}
			}
			
		}
		
		
	}

}

4.执行DQL(Query)操作

ResultSet:执行DML操作和执行DDL操作是一样,只有sql语句发生了变量

常用方法:

# boolean next():判断是否有下一行数据,若有,则向下移动一行指针.
# getXxx(String columnName):获取当前行中的,指定列名的列的值.columnName是列名/列的别名
# 若列的类型是VARCHAR/CHAR/TEXT,都使用getString来获取列的值.
# 若列的类型是int/integer/–>getInt来获取列的值.

执行sql:

# executeQuery(Sql)会得到一个结果集,(多行数据)
//查询所有*,获得结果集
	void test1() throws Exception{
		//1.获取连接对象
				String url = "jdbc:mysql://localhost:3306/jdbc";
				String user = "root";
				String password = "123456";
				
				//2.加载驱动
				Class.forName("com.mysql.jdbc.Driver");
				
				//3.连接数据库
				Connection conn = DriverManager.getConnection(url,user,password);
				
				//4.编写sql语句
				String sql = "SELECT * FROM stu";
				Statement st = conn.createStatement();
				
				//5.执行sql语句,返回结果存于结果集
				ResultSet res = st.executeQuery(sql);
				
				//6.打印结果
				while(res.next()) {
					System.out.println("id:"+res.getInt("id")+"-----"+"name:"+res.getString("name"));
				}
				
				//7.释放资源
				st.close();
				conn.close();
	}

# 获了一个数据
//获取一个数据
	static void test2() throws Exception{
		//1.获取连接对象
				String url = "jdbc:mysql://localhost:3306/jdbc";
				String user = "root";
				String password = "123456";
				
				//2.加载驱动
				Class.forName("com.mysql.jdbc.Driver");
				
				//3.连接数据库
				Connection conn = DriverManager.getConnection(url,user,password);
				
				//4.编写sql语句
				String sql = "SELECT * FROM stu where name= 'zs'";
				Statement st = conn.createStatement();
				
				//5.执行sql语句,返回结果存于结果集
				ResultSet res = st.executeQuery(sql);
				
				//6.打印结果
				if(res.next()) {
					System.out.println("id:"+res.getInt("id")+"-----"+"name:"+res.getString("name"));
				}
				
				//7.释放资源
				st.close();
				conn.close();
	}

5.DAO思想养成计划

什么是DAO?看图

在这里插入图片描述

为什么要使用DAO

Data Access Object(数据存取对象)
位于业务逻辑和持久化数据之间
实现对持久化数据的访问

不使用DAO的话?

多个地方都要都同时做CRUD操作时,重复的代码就会很多,如图所示
在这里插入图片描述

接下来就是怎么做的问题了,设计规范

在这里插入图片描述
萨达别找了,上图就是粉图图一

没有实际操作演示下总觉得不行,好,开干起来

根据粉图,创建相应的包和类,,如图所示
在这里插入图片描述
domian包中的Student类就是一个domain类,(什么是domain类?封装成getter和setter的就是)

package com.study.jdbc.domain;

public class Student {
	String name;
	Integer id;
	Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
}

而dao包下的Istudent是一个接口(这也是面向接口编程的思想)

package com.study.jdbc.dao;

import java.util.List;

import com.study.jdbc.domain.Student;

public interface IStudent {
	/**
	 * 保存一个学生
	 */
	public void save(Student stu);
	/**
	 * 删除学生
	 */
	public void delete(int id);
	/**
	 * 更新一个学生信息
	 */
	public void update(int id,Student stu);
	/**
	 * 获取指定学生
	 */
	public Student get(int id);
	/**
	 * 获取所有的学生
	 */
	public List<Student> getAll();
	
}

也许看到这里,你就明白了,StudentImpl是Istudent的一个实例,用来实现接口的具体方法,而StudentTest则是用来做单元测试的,测试某个方法是否准确无误。
没错,可以看下
StudentImpl

package com.study.jdbc.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

import com.study.jdbc.dao.IStudent;
import com.study.jdbc.domain.Student;

public class StudentImpl implements IStudent{

	@Override
	public void save(Student stu) throws Exception {
		//1.获取连接对象
		String url = "jdbc:mysql://localhost:3306/jdbc";
		String user = "root";
		String password = "123456";
		//2.加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//3.连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
		
	}

	@Override
	public void delete(int id) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void update(int id, Student stu) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Student get(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Student> getAll() {
		// TODO Auto-generated method stub
		return null;
	}
	
}

接下来在SttudentTest里做单元测试,测试StudentImpl中的方法是否生效
StudentTest

package com.study.jdbc.test;

import org.junit.Test;

import com.study.jdbc.dao.IStudent;
import com.study.jdbc.domain.Student;
import com.study.jdbc.impl.StudentImpl;

public class StudentTest {
	public static void main(String[] args) {
		
		
	}
	
	@Test
	public void save() throws Exception {
		Student student = new Student();
		student.setName("pg");
		student.setAge(30);
		IStudent dao = new StudentImpl();
		dao.save(student);
		
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值