JDBC连接数据库

JDBC连接数据库

1.在连接数据前先简单了解下SQL语句的分类
1):DDL(数据库定义语言 create alter drop)
2):DML(数据库操作语言 insert update delete)
3):DQL(数据查询语言 select where )
4):DCL(数据控制语言 权限控制)
2.接下来开始连接数据库
连接数据库主要分为以下步骤
JDBC 操作步骤:
1.导入依赖jar包不同数据库 jar包不一样(这里用的是mysql)
2.注册驱动 Class.forName(“com.mysql.cj.jdbc.Driver”);
3.准备sql语句 String sql=“Select empno,ename,job from emp”;
4.获取statement对象(Statement接口 执行 sql语句 通过connection对象获取)
5.执行sql语句
5.1查询语句 statement 对象执行executeQuery() 得到结果集resultSet(接口 ,封装了查询结果)
5.1.1 从resultSet对象中获取结果信息 核心方法getxxx ,通过列名或者列索引获取某一条记录的某个字段值 注意sql数据类型与jdbc数据类型的匹配
5.2更新操作(DML)语句 execute(Sql)返回int表示insert|delete|update结果
5.3 执行方法execute ()返回boolean值可以执行任意的sql语句
推荐DQLexecuteQuery()DML:executeUpdate
6.关闭资源 注意 关闭顺序 (先开后关)
Connection PreparedStatement ResultSet 要做非空判定


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



public class JDBCDemo01 {
	/**  
	
	* @author blue
	* @date 2020年8月21日  
	
	*/
	public static void main(String[] args) {
		Connection conn=null;
		Statement stmt=null;
		ResultSet rs=null;
		try {
			//1.注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//2.获取连接对象
			//url:连接数据库的地址 url :协议://ip地址:端口号/资源路径#锚点?参数 =参数值(可有可无)多个参数用&分割
			//url:连接数据库的url:协议子协议://ip地址:端口号(3306 mysql默认端口号) /数据库 ?连接参数
			//user:连接数据库的用户(root)
			//password:user的密码
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbwork?serverTimezone=Asia/Shanghai","root","852012");
			if(conn!=null) {
				System.out.println("连接成功");
			}
			//操作sql语句 --statement对象
			//conn.createStatement();
			//3.获取statment对象
			stmt=conn.createStatement();
			//statement 中常用方法
			//execute (String sql)--boolean 任意一条sql语句
			//executeUpdate(String sql)--int update 表中数据的改变(DML) 包含update insert,delete
			//executeQuery(String sql) --ResulSet(); 查询语句(DQL) ResultSet封装的查询结果
			
			//4.准备sql语句
			String sql="Select empno,ename,job from emp";
			//System.out.println(stmt.execute(sql));可执行任意语句 但只能返回布尔值
			//使用excuteQuery获取结果集
			//5.执行stmt.executeQuery(sql) 并用rs的接受查询的结果集
			rs=	stmt.executeQuery(sql);
			
			//6.解析结果集
			while(rs.next()) {
				//jdbc数据类型与mysql数据类型对应
				//rs.getInt() rs.getDate() rs.getDouble()...
				//方法索引
				// rs.getInt(int columnIndex)列的索引(结果集中的字段顺序 从1开始)
				
				/* 
				通过列来获取数据这里的起始值从1 开始 是按照查询完毕后的列表
				int empno=rs.getInt(1);
				String ename=rs.getString(2);
				String job=rs.getString(3);
				System.out.println(empno+"\t"+ename+"\t"+job+"\t");
				*/
				//rs.getInt(columnLabel) 字段名(结果集中的字段名)
				int empno=rs.getInt("empno");
				String ename=rs.getString("ename");
				String job=rs.getString("job");
				System.out.println(empno+"\t"+ename+"\t"+job+"\t");
			}
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			//7.关闭资源
		}finally{
			if(rs!=null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			}
			if(stmt!=null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			}
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			}
		}
	}
}

以上一是一个简单的JDBC案列
但是不符和java中的高内聚低耦合
现在我们将它封装成一个工具类
该工具类分为三块
1.静态static 语句块:
用于加载db.properties 文件 这个文件里存放我们将要用的各种信息
2.创建并返回connection:
获取加载好的配置信息 连接数据库
3.关闭流
关闭Connection PreparedStatement ResultSet


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;


public class DBUtil {
	private static Properties pro;
	static {
		pro=new Properties();
		InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
		try {
			pro.load(is);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
	public static Connection getconn() throws Exception {
		Class.forName(pro.getProperty("jdbc.driver"));
		return DriverManager.getConnection(pro.getProperty("jdbc.url"),
				pro.getProperty("jdbc.username"),
				pro.getProperty("jdbc.password"));
		
	}
	public static void  close(ResultSet rs,PreparedStatement stmt,Connection conn) throws Exception {
		if(rs!=null) {
			rs.close();
		}
		if(stmt!=null) {
			stmt.close();
		}
		if(conn!=null) {
			conn.close();
		}
		
	}
}

在这里插入图片描述
com.mysql.cj.jdbc.Driver 是外部jar包中的路径
在这里插入图片描述
工具类封装好了现在是使用它的时候

//查询emp表下的所有信息
public List<Emp> findAll()  {
		// TODO 自动生成的方法存根
		Connection conn=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		List<Emp> list=null;
		
		try {
			conn = DBUtil.getconn();
			String sql="select * from emp";
			stmt=conn.prepareStatement(sql);
			rs=stmt.executeQuery();
			while(rs.next()) {
				String eid=rs.getString(1);
				String ename=rs.getString(2);
				double esal=rs.getDouble(3);
				Date hiredate=rs.getDate(4);
				int deptno=rs.getInt(5);
				String deptname=rs.getString(6);
				Emp emp=new Emp(eid, ename, esal, hiredate, deptno, deptname);
				list.add(emp);
			}
			
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				DBUtil.close(rs, stmt, conn);
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		return list;
	}

//追加
	public int addEmp(Emp emp) {
		Connection conn=null;
		PreparedStatement stmt=null;
		ResultSet rs=null;
		int i=-1;
		try {
			conn=DBUtil.getconn();
			String sql="insert into emp (id, ename, esal, hiredate, deptno, deptname) values(?,?,?,?,?,?)";
			stmt = conn.prepareStatement(sql);

			stmt.setString(1, emp.getEid());
			stmt.setString(2, emp.getEname());
			stmt.setDouble(3, emp.getEsal());
			stmt.setDate(4,new java.sql.Date(emp.getHiredate().getTime()));
			stmt.setInt(5, emp.getDeptno());
			stmt.setString(6, emp.getDeptname());
			i = stmt.executeUpdate();
			
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				DBUtil.close(rs, stmt, conn);
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		// TODO 自动生成的方法存根
		return i;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值