数据库(Oracle)的增,删,改,查(一个简单的例子)

一、封装数据库连接

1、导包

数据库我用的是Oracle数据库

如果你是用的不是Maven,你就需要先导包(如果你用的是maven那么你只需要在pom文件中添加依赖)

这是ojdbc8的jar包
链接:https://pan.baidu.com/s/1IBSZ3DBdchVlfxg7UQJlaw 
提取码:geqp

在你的项目下创建一个lib文件夹把下载好的jar包复制进去,右击你复制进去的jar包,找到Build Path->Add to Build Path 就可以了。

2、封装

对数据库连接代码封装一下,方便后续代码的编写

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

//数据库的连接
public class ConnectionUtil {
	static Connection connection = null;
	static {
		try {
			//注册驱动
			Class.forName("oracle.jdbc.OracleDriver");
			
			//数据库的url,username,password信息
			connection = 
					DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","web","web");
			
		} catch (Exception e) {
			// 如果发生连接异常直接退出系统,重新连接
			System.exit(-1);
		}
	}
	//是否自动提交事务
	public static Connection getConnection(boolean autoCommit) throws Exception {
		Class.forName("oracle.jdbc.OracleDriver");
		
		
		connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","web","web");
		
		connection.setAutoCommit(autoCommit);
		return connection;
	}
	//默认手动提交事务
	public static Connection getConnection() throws Exception{
		return getConnection(false);
		
	}
	
}

二、数据库建表

我们要向数据库中添加数据,所以就要有一个对应的表格

1、在数据库中编写建表语句

--删除表 确定数据库中没有此命名的表格
drop table t_user;

--创建t_user表
create table t_user(
id number primary key,
name varchar2(20) not null,
age number,
gender varchar2(10)
);

--查询表中的所有数据
select * from t_user;

2、使用java代码创建数据库表

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

public class CreateTable {
	public static void main(String[] args) {
		try {
			// 建立连接
			Connection connection = ConnectionUtil.getConnection();

			// 创建statement对象
			Statement statement = connection.createStatement();

			// 编写sql语句
			String sql = "create table t_user("
					+ "id number primary key,"
					+ "name varchar2(20) not null,"
					+ "age number,"
					+ "gender varchar2(10)"
					+ ")";

			// 执行sql
			statement.executeUpdate(sql);

			// 处理结果集(提交事务)
			connection.commit();

			// 释放资源
			statement.close();
			connection.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

三、编写增,删,改,查代码

1、编写一个User实例类

实现查询数据库数据时,查询到的数据需要存储到一个实例类对象中,方便数据的观察。

public class User {
	//与数据库中的列所对应的属性
	private long id;
	private String name;
	private int age;
	private String gender;
	
	//getting与setting方法
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	//无参构造器
	public User() {
	
	}

	//有参构造器
	public User(long id, String name, int age, String gender) {
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	//重写toString方法(对象输出形式)
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";
	}
}

2、增删改查代码

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class SyDTest {

	//向数据库中添加数据(增)
	public static void insertDate() {
		try {
			//建立连接
			Connection connection = ConnectionUtil.getConnection();
			
			//编写sql语句
			String sql = "insert into t_user values(?,?,?,?)";
			
			/*使用preparedStatement的优点
			 *如果涉及到动态参数的传递,可以使用字符串拼接,
			 *也可以使用?占位的形式要求在执行sql语句之前,给?号传值。
			 *提供预编译的功能,某种程度上可以避免sql注入的问题
			 *
			 *创建PreparedStatement对象
			*/
			PreparedStatement pre = connection.prepareStatement(sql);
			
			/*这里我将插入的数值固定
			 *只插入了一条数据
			 *这里也可以写入动态的数据
			 *在最后会有补充
			*/
			pre.setLong(1, 1);
			pre.setString(2, "jt");
			pre.setInt(3, 20);
			pre.setString(4, "男");
			
			//执行sql
			pre.executeUpdate();
			
			//提交事务
			connection.commit();
			
			//释放资源
			pre.close();
			connection.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	
	//查询数据库中的数据(查) 返回一个list集合
	public static List<User> selectDate() {
		try {
			Connection connection = ConnectionUtil.getConnection();
			
			List<User> list = new ArrayList<>();
			
			String sql = "select id,name,age,gender "
					+ "from t_user";
			
			PreparedStatement pre = connection.prepareStatement(sql);
			
			ResultSet result = pre.executeQuery();
			
			//遍历查询到的数据 并把数据保存到user对象中
			while(result.next()) {
				User user = new User();
				user.setId(result.getLong("id"));
				user.setName(result.getString("name"));
				user.setAge(result.getInt("age"));
				user.setGender(result.getString("gender"));
				
				list.add(user);
				
			}
			return list;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
		
	}

	//根据id删除数据库中的数据(删)
	public static void delDate(int id) {
		try {
			Connection connection = ConnectionUtil.getConnection();
			
			String sql = "delete from t_user "
					+ "where id=?";
			PreparedStatement pre = connection.prepareStatement(sql);
			
			pre.setLong(1, id);
			
			pre.executeUpdate();
			
			connection.commit();
			
			pre.close();
			connection.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/*修改数据库中的数据
	 *这里只根据id修改名字
	 */
	public static void upDate(int id,String name) {
		try {
			Connection connection = ConnectionUtil.getConnection();
			
			String sql = "update t_user set name='"+name+"' where id=?";
			
			PreparedStatement pre = connection.prepareStatement(sql);
			
			pre.setLong(1, id);
			
			pre.executeUpdate();
			connection.commit();
			
			pre.close();
			connection.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
	/*结果测试代码
	 *注意:不要同时执行增删代码 否则无结果
	 *		不要同时执行删改代码 否则无结果
	 *		不要同时执行改删代码 否则无结果
	 *		
	 *		可以同时执行增或删或改查代码
	 */		
	public static void main(String[] args) {
		insertDate();//增
//		upDate(1,"xhc");//改
//		delDate(1);//删
		 //查
		for (User user : selectDate()) {
			System.out.println(user);
		}
	}
}

3、结果截图

1.增查

控制台的数据输出
在这里插入图片描述
数据库中的数据
在这里插入图片描述

2.改查

控制台的数据输出
在这里插入图片描述
数据库的数据
在这里插入图片描述

3.删查

控制台的数据输出(没有结果)
在这里插入图片描述
数据库的数据
在这里插入图片描述

四、动态插入数据

/*向数据库中添加数据(增)
 *调用此方法前将多个User对象放入集合中
 *调用方法时遍历集合
 *传入User遍历对象
 */
 
	public static void insertDate(User user) {
		try {
			//建立连接
			Connection connection = ConnectionUtil.getConnection();
			
			//编写sql语句
			String sql = "insert into t_user values(?,?,?,?)";
			
			/*使用preparedStatement的优点
			 *如果涉及到动态参数的传递,可以使用字符串拼接,
			 *也可以使用?占位的形式要求在执行sql语句之前,给?号传值。
			 *提供预编译的功能,某种程度上可以避免sql注入的问题
			 *
			 *创建PreparedStatement对象
			*/
			PreparedStatement pre = connection.prepareStatement(sql);
			
			/*
			 *动态插入数据
			*/
			pre.setLong(1, user.getId());
			pre.setString(2, user.getName());
			pre.setInt(3, user.getAge());
			pre.setString(4, user.getGender());
			
			//执行sql
			pre.executeUpdate();
			
			//提交事务
			connection.commit();
			
			//释放资源
			pre.close();
			connection.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值