JDBC入门

JDBC入门

JDBC介绍

概念
  1. java提供的一个标准[由各大数据库厂商实现]:数据的持久化操作

  2. 持久化:数据的永久的存储的问题

    数据库持久化操作的技术只有一个JDBC

JDBC使用的步骤

1.换新的工作空间,并且设置工作空间编码为UTF-8

2.Java项目: 导入Mysql的jar包

3.新建一个文件夹lib…jar放入lib…建立jar与项目得关联

4.贾:加载驱动…程序…Mysql写好的驱动程[ Driver ]序加载进来

5.连:java获得与数据库的连接[ DriverManager ] //Connection

6.欲:获得语句对象[ Statement ]

7.执:准备sql语句并用语句对象执行

8.释:释放资源[ ResultSet a Statement b Connection c ]

JDBC增删改查(CRUD)

1.向数据库添加数据
@Test
public void insert() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdbc_demo", "root", "******");
        Statement statement = connection.createStatement();
        String sql = "insert into student values(1,'小王',18),(2,'小李',22),(3,'小刘',24)";
        statement.execute(sql);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
2.修改数据库数据
@Test
public void update() {
    String sql = "update student set name='小胡' where id = 1";
    try {
        statement.executeUpdate(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
3.删除表中数据
@Test
public void delete() {
    String sql = "delete from student where id = 3";
    try {
        statement.execute(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
4.查询表中数据
@Test
public void select() {
    String sql = "select * from student";
    try {
        set = statement.executeQuery(sql);
        while (set.next()) {
            System.out.print(set.getString("id"));
            System.out.print(set.getString("name"));
            System.out.print(set.getString("age"));
            System.out.print(" ");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

抽取JDCB工具类

public class JDBCUtil {
	
	/*
	 * 1.提供单例模式:私有化构造方法,字段,提供公共静态访问方法
	 * 2.将加载驱动放入静态代码块
	 * 3.创建properties文件,将驱动地址,数据库地址url,用户名username,密码password存入
	 * 4.读取properties文件,通过当前线程获得类加载器,再获得properties流
	 * */
	
	//私有化构造方法
	private JDBCUtil(){}
	//私有化静态字段
	private static JDBCUtil instance;
	//私有化properties对象
	private static Properties prop = new Properties();
	//静态代码块,优先加载
	static {
		//放入需要优先加载的静态字段
		instance = new JDBCUtil();
		try {
			//通过properties对象调用方法获取文件流
			prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
			//加载驱动器
			Class.forName(prop.getProperty("DriverClassName"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//提供公共方法获取instance对象
	public static JDBCUtil getInstance() {
		return instance;
	}
	
	//连接数据库方法,返回数据库对象
	public static Connection getConnection() {
		Connection connection = null;
		try {
			//连接数据库
			connection = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return connection;
	}
	//释放资源
	public static void close(ResultSet set, Statement statement, Connection connection) {
		try {
			if (set!=null)
				set.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if (statement!=null)
					statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if (connection!=null)
						connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
DriverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc_demo
username=root
password=******

DAO层

概念

界面层:收集数据; name,password,age…等等 需要传递很多东西;

业务层:界面层收集之后,传到业务层;

数据层(DAO层)

DAO : 主要是用来做数据库的操作

​ 模块化,分工明确,解耦(责任分离),便于维护

域对象

界面层传到业务层的东西封装成对象,这个对象叫做域对象(domain)

模拟注册和登录场景

在业务层和DAO层完成

新建一个实体类

eclipse设置好私有化字段后,其余方法都可以一键生成

1.私有化字段

2.提供get、set方法

3.提供有参、无参构造方法

新建基础DAO层接口

提供增删改查方法

public interface BaseDao {
	//新增
	void add(User u);
	//删除
	void delete(Long id);
	//修改
	void update(User u);
	//查找
	User query(User u);
}
新建实体类DAO层接口

继承基础DAO层接口

public interface IUserDao extends BaseDao{
    //该接口自己的批量删除方法
	void batchdel(long...id);
}
新建DAO层实现类

对DAO层接口进行覆写

JDBCUtil为已提取的工具类(已在之前封装好)

public class UserDaoImpl implements IUserDao {

	private User user;

	/* 
	 * 注册:在数据库中添加账号密码
	 */
	@Override
	public void add(User u) {
		Connection connection = JDBCUtil.getInstance().getConnection();
		try {
			Statement statement = connection.createStatement();
			String sql = "insert into users(username,password) values('"+u.getUsername()+"','"+u.getPassword()+"')";
			statement.execute(sql);
			JDBCUtil.getInstance().close(null, statement, connection);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/* 
	 * 注销账号:在数据库中删除数据
	 */
	@Override
	public void delete(Long id) {
		Connection connection = JDBCUtil.getInstance().getConnection();
		try {
			Statement statement = connection.createStatement();
			String sql = "delete from users where id ="+id;
			statement.executeUpdate(sql);
			JDBCUtil.getInstance().close(null, statement, connection);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/* 
	 * 修改账号密码:在数据库中修改数据
	 */
	@Override
	public void update(User u) {
		Connection connection = JDBCUtil.getInstance().getConnection();
		try {
			Statement statement = connection.createStatement();
			String sql = "update users set username='"+u.getUsername()+"',password='"+u.getPassword()+"' where id='"+u.getId()+"'";
			statement.executeUpdate(sql);
			JDBCUtil.getInstance().close(null, statement, connection);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/* 
	 * 登录:在数据库中查找数据
	 */
	@Override
	public User query(User u) {
		Connection connection = JDBCUtil.getInstance().getConnection();
		User user = null;
		try {
			Statement statement = connection.createStatement();
			String sql = "select * from users where username='"+u.getUsername()+"' and password='"+u.getPassword()+"'";
			ResultSet resultSet = statement.executeQuery(sql);
			while (resultSet.next()) {
				user = new User();
				user.setUsername(resultSet.getString("username"));
				user.setPassword(resultSet.getString("password"));
			}
			JDBCUtil.getInstance().close(resultSet, statement, connection);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}
	
	/* 
	 * 批量删除数据
	 */
	@Override
	public void batchdel(long...id) {
		for (long l : id) {
			delete(l);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值