欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-08 17:41:34
...

一、封装数据库连接

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.增查

控制台的数据输出
数据库(Oracle)的增,删,改,查(一个简单的例子)
数据库中的数据
数据库(Oracle)的增,删,改,查(一个简单的例子)

2.改查

控制台的数据输出
数据库(Oracle)的增,删,改,查(一个简单的例子)
数据库的数据
数据库(Oracle)的增,删,改,查(一个简单的例子)

3.删查

控制台的数据输出(没有结果)
数据库(Oracle)的增,删,改,查(一个简单的例子)
数据库的数据
数据库(Oracle)的增,删,改,查(一个简单的例子)

四、动态插入数据

/*向数据库中添加数据(增)
 *调用此方法前将多个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();
		} 
	}