数据库(Oracle)的增,删,改,查(一个简单的例子)
程序员文章站
2022-03-08 17:41:34
...
数据库(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();
}
}
上一篇: 一个将Access数据库转成Mssql数据库的简单工具
下一篇: mysql索引优化查询