Java + JDBC CRUD示例

Java JDBC CRUD操作详解
本文介绍了Java中的JDBC技术,详细讲解了如何使用JDBC进行数据库的增删改查操作,包括实体类与数据库表的映射、PreparedStatement的使用以及各种操作的代码示例。JDBC的特点在于使用SQL作为查询语言并允许直接访问数据库,提供了细粒度的数据控制。

介绍持久化技术时会介绍的方面包括:技术的特点,使用这技术实体类和数据库表之间的映射如何实现,增删改查的实现等。

JDBC:java database connection ,java数据库连接 JDBC 是java应用程序和数据库之间的桥梁。

JDBC API 是一个Java 的API 它可以

  • 连接到数据库
  • 创建SQL或MySQL语句
  • 在数据库中执行SQL或MySQL查询
  • 查看和修改数据库中的数据记录

JDBC特点          

       在开发应用的持久层时,可选的持久化技术有多种,包括:JDBC,JPA,Hibernate等。JDBC的特点:

  1. 使用SQL作为数据库查询语言,不要再掌握其他框架的查询语言。
  2. JDBC允许使用数据库的所有特性,其他框架不行。
  3. 相对于持久层框架,JDBC能够让我们在更低的层次上处理数据,我们可以完全控制应用程序如何读取和管理数据,包括访问和管理数据库中单独的列。这种细粒度的数据访问方式在很多应用程序中是很方便的

1.实体类和数据库表之间的映射

     如果使用JDBC的话,那实体类和数据表之间的映射就需要我们自己实现了。

     自定义一个实体类,然后自定义一个建表的脚本,这可以借助Liquibase

2.使用JDBC所提供的直接操作数据库的API 进行增删改查

      这儿增删改查 用的是PreparedStatement,在sql中它使用?占位符 代替参数值。而不是:studentName这种。

      参考 PreparedStatement预编译无法用?占位符替换表名和字段名

      需要负责处理和数据访问相关的所有事情,包括 管理数据库资源处理异常,其实开发时最好只关注于业务代码。假设应用中已经有实体类Spitter,类中有属性id,Username和Password。数据库中有表s_pitter,表中有列id,username和password。

2.1使用JDBC操作数据库实现insert的代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
	public void create(Spitter entity) {

		Connection conn = null;
		PreparedStatement ps = null;

		// 1.准备inser sql语句
		StringBuffer buf = new StringBuffer();
		buf.append("insert into s_pitter      ");
		buf.append("  (username,              ");
		buf.append("   password,              ");
		buf.append("   )values(               ");
		for (int i = 0; i < 2; i++) {
			buf.append(i == 0 ? "?" : ",?");
		}
		buf.append(")");

		int pos = 1;
		try {
			// 2.获取连接,获取连接 这一步在不同应用中不一样的。
			conn = Connector.getOracleConnection();
			// 3.创建sql语句
			ps = conn.prepareStatement(buf.toString());
			// 4.绑定参数到sql
			if (entity.getUsername() != null) {
				ps.setString(pos++, entity.getUsername());
			} else {
				ps.setNull(pos++, Types.NUMERIC);
			}
			if (entity.getPassword() != null) {
				ps.setString(pos++, entity.getPassword());
			} else {
				ps.setNull(pos++, Types.NUMERIC);
			}
			// 5.执行sql
			ps.executeUpdate();

		} catch (SQLException e) {  //6.处理异常
			// do something
		} finally {
			// 7.关闭数据库连接,释放资源
			try {
				if (ps != null) {
					ps.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) { //6.处理异常
				// do something
			}
		}

	}

}

2.2使用JDBC操作数据库实现update的代码如下: issert和update方法 只是1准备sql和3绑定参数的操作不一样,这也是我们需要关注的。但是在JDBC里要完成insert和update,其它操作(管理数据库资源处理异常)也是必须的。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
	public void update(Spitter entity) {

		Connection conn = null;
		PreparedStatement ps = null;

		// 1.准备update sql语句
		StringBuffer buf = new StringBuffer();
		buf.append("update t_pitter set      ");
		buf.append("    username      = ?,    ");
		buf.append("    password     = ?,    ");
		buf.append("    where     id      = ?    ");

		int pos = 1;
		try {
			// 2.获取连接,获取连接 这一步在不同应用中不一样的。
			conn = Connector.getOracleConnection();
			// 3.创建sql语句
			ps = conn.prepareStatement(buf.toString());
			// 4.绑定参数到sql
			if (entity.getUsername() != null) {
				ps.setString(pos++, entity.getUsername());
			} else {
				ps.setNull(pos++, Types.NUMERIC);
			}
			if (entity.getPassword() != null) {
				ps.setString(pos++, entity.getPassword());
			} else {
				ps.setNull(pos++, Types.NUMERIC);
			}
			if (entity.getId() != null) {
				ps.setLong(pos++, entity.getId());
			} else {
				ps.setNull(pos++, Types.NUMERIC);
			}
			// 5.执行sql
			ps.executeUpdate();

		} catch (SQLException e) {  //6.处理异常
			// do something
		} finally {
			// 7.关闭数据库连接,释放资源
			try {
				if (ps != null) {
					ps.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) { //6.处理异常
				// do something
			}
		}

	}

}

2.3使用JDBC操作数据库实现delete的代码如下,也是只有准备delete sql语句和绑定参数不一样

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
	public void delete(Long id) {

		Connection conn = null;
		PreparedStatement ps = null;

		// 1.准备delete sql语句
		String sql = "DELETE FROM t_spitter T WHERE T.id= ?"

		int pos = 1;
		try {
			// 2.获取连接,获取连接 这一步在不同应用中不一样的。
			conn = Connector.getOracleConnection();
			// 3.创建sql语句
			ps = conn.prepareStatement(sql);
			// 4.绑定参数到sql			
			ps.setLong(1, id);
			// 5.执行sql
			ps.executeUpdate();

		} catch (SQLException e) {  //6.处理异常
			// do something
		} finally {
			// 7.关闭数据库连接,释放资源
			try {
				if (ps != null) {
					ps.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) { //6.处理异常
				// do something
			}
		}

	}

}

2.4 使用JDBC操作数据库实现select的代码如下

         这里有两点注意:1.把sql查询结果转成实体类。2.如果查询结果是list在处理查询结果是用while而不是if

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;
import java.sql.ResultSet;
public class JdbcTest {
	public void findById(Long id) {

		Connection conn = null;
		PreparedStatement ps = null;
		Spitter spitter = null;
		ResultSet rs = null;
		// 1.准备select sql语句
		String sql = "select *  FROM t_spitter T WHERE T.id= ?";

		int pos = 1;
		try {
			// 2.获取连接,获取连接 这一步在不同应用中不一样的。
			conn = Connector.getOracleConnection();
			// 3.创建sql语句
			ps = conn.prepareStatement(sql);
			// 4.绑定参数到sql
			ps.setLong(1, id);
			// 5.执行sql 处理查询结果 转成实体类
			rs = ps.executeQuery();
			if (rs.next()) {
				spitter = this.fillEntity(rs);
			}
		} catch (SQLException e) { // 6.处理异常
			// do something
		} finally {
			// 7.关闭数据库连接,释放资源
			try {
				if (ps != null) {
					ps.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) { // 6.处理异常
				// do something
			}
		}

	}

}
import java.sql.ResultSet;
//把查询结果ResultSet类型转为实体类
public Spitter fillEntity(ResultSet rs) throws SQLException  {
	Spitter spitter = new Spitter();
	spitter.setId(rs.getLong("id"));
	spitter.setUsername(rs.getString("username"));
	spitter.setPassword(rs.getString("password"));
	return spitter;
}

2.如果查询结果是list在处理查询结果是用while而不是if 


List<Spitter> spitterList = new ArrayList();
while (rs.next()) {
	spitterList.add(this.fillEntity(rs))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值