4.JDBC

一.JDBC原理:(JAVA 数据库 连接技术)

提供了Java连接各种数据库的能力

在这里插入图片描述


二.JDBC

步骤:

  • 1.加载驱动jar包
  • 2.创建连接通道
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(url,root,pwd);
String sqlInsert="insert into temp values(?,?,?)";
PreparedStatement pstm=con.prepareStatement(sqlInsert);
// insert update  delete
int result = stm.executeUpdate(sql);

注: 推荐使用PreparedStatement 因为Statement的缺点:1.不安全,能SQL注入 2.效率低

insert update delete 的执行结果都是int值,表示改变数据的行数

  • DriverManager 创建连接通道
  • Connection 通道
  • PreparedStatement 发送并执行SQL

1.例:以insert为例,update和delete同理

package cn.jdbc.text;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
//注意导入的包都是java.sql下的
public class InsertDept2 {
	//推荐使用PreparedStatement
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		String url="jdbc:mysql://localhost:3306/day7";
		try {//创建连接通道
			Connection con = DriverManager.getConnection(url,"root","cuichen975541045");
			//获取用户输入的信息
			System.out.println("请输入部门编号:");
			String deptno=input.next();
			System.out.println("请输入部门名称");
			String dname = input.next();
			System.out.println("请输入部门位置");
			String loc = input.next();
			//insert 语句
			String sqlInsert = "insert into dept(deptno,dname,loc) values(?,?,?)";
			//在通道内,把sql语句发送到数据库端,并且执行
			//创建一个运输SQL语句的对象,pstm
			PreparedStatement pstm = con.prepareStatement(sqlInsert);
			pstm.setString(1, deptno);
			pstm.setString(2, dname);
			pstm.setString(3, loc);
			//发送并且执行SQL语句
			//insert update delete 的执行结果都是int值,表示改变数据的行数
			int result = pstm.executeUpdate();
			//对结果进行判断
			if (result==1) {
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

2.select

登陆查询

package cn.jdbc.text;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class Login2 {
	//建议使用
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection con = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;//存放查询结果的对象:结果集对象
		try {
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day7","root","cuichen975541045");
			//登陆的SQL
			System.out.println("登录账号:");
			String uid = input.next();
			System.out.println("登陆密码");
			String pwd = input.next();
			String sqlLogin = "select * from emp where empno=? and pwd=?";
			pstm = con.prepareStatement(sqlLogin); 
			//通过pstm对象给sql中?赋值
			pstm.setString(1, uid);
			pstm.setString(2, pwd);
			rs = pstm.executeQuery();//执行select 使用executeQuery()
			//判断结果集中是否有数据
			if (rs.next()) {
				System.out.println("登陆成功");
			}else {
				System.out.println("失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


查询表中全部信息:

package cn.jdbc.text;

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


public class GetAllDept {

	public static void main(String[] args) {
		Connection con=null;
		PreparedStatement pstm= null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day7","root","cuichen975541045");
			String sql = "select * from dept where loc like '大%'";
			pstm = con.prepareStatement(sql);
			rs = pstm.executeQuery();
			//遍历rs
			System.out.println("部门编号\t\t部门名称\t\t位置");
			while(rs.next()) {
				System.out.println(rs.getString("deptno")+"\t\t"+rs.getString("dname")+"\t\t"+rs.getString("loc"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs!=null) {
					rs.close();
				}
				if(pstm!=null) {
					pstm.close();
				}
				if (con!=null) {
					con.close();
				}
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
		}
	}
}

在这里插入图片描述


总结:

1.JDBC 的API:

  • Driver 接口:代表驱动程序

  • DriverManager 类:驱动程序管理员

  • Connection 接口:代表数据库连接

  • Statement 、PreparedStatement、CallableStatement 接口:代表数据库操作对象

  • ResultSet 接口:代表结果集

  • DatabaseMetadata、ResultSetMetadata接口:代表元数据

  • Types 类:代表JDBC类型

2.程序分层:

  • pojo :实体类(属性和get(),set()方法)
    属性与表结构对应,作用 :传输数据
  • dao: 数据访问层
    数据的增删改查等方法
  • view:视图层
    接收用户输入、把数据展示给用户

3.步骤:

  • 驱动jar:数据库厂商提供,下载,加载到当前项目下

  • 反射Class.forName("com.mysql.jdbc.Driver");
    把Driver驱动类里的各个成员封装成对象,加载到内存中,供JDBCapi调用

  • 通过JDBC api 连接操作数据库
    创建通道:Connection con= DriverManager.getConnection(url,username,pwd);

    Statement
    PreparedStatement pstm= con.prepareStatement(sql)
    pstm.setString(1,);

  • 执行:
    insert update delete
    int result= pstm.executeUpdate();

    select

 ResultSet rs=pstm.executeQuery();
     while(rs.next()){
         //读取当前指针指向行的数据
         Dept d=new Dept();
         d.setDeptno(rs.getInt(1));

     }
  • 关闭资源:后创建的先关闭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值