当前位置: 代码网 > it编程>编程语言>Java > IDEA实现Oracle连接以及基本的增删改查操作步骤详解

IDEA实现Oracle连接以及基本的增删改查操作步骤详解

2024年08月03日 Java 我要评论
IDEA实现ORACLE连接以及基本的增删改查操作步骤详解

1. 导入数据库对应jdbc驱动

去oracle官网下载数据库连接驱动,下载地址:https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
大家根据java版本选择对应的版本驱动。
在这里插入图片描述
或者在oracle安装目录下自带有个jdbc文件夹,点进lib,里面有各版本的jdbc包
在这里插入图片描述

2. 导入jar包

打开项目结构
在这里插入图片描述
点击模块,选择依赖,点+导入jar包后应用
在这里插入图片描述
在外部库能检索到jar包说明导入成功
在这里插入图片描述
测试能否连接数据库
在这里插入图片描述

3.jdbc介绍

3.1 常用接口

1)driver 接口
driver 接口由数据库厂家提供,只需要使用 driver 接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:

装载 mysql 驱动:class.forname("com.mysql.jdbc.driver");
装载 oracle 驱动:class.forname("oracle.jdbc.driver.oracledriver");

2)connection 接口
connection 与特定数据库的连接(会话),在连接上下文中执行 sql 语句并返回结果。drivermanager.getconnection(url, user, password)方法建立在 jdbc url 中定义的数据库 connection 连接上。

连接 mysql 数据库:
connection conn =
drivermanager.getconnection("jdbc:mysql://host:port/database", "user",
"password");
连接 oracle 数据库:
connection conn =drivermanager.getconnection("jdbc:oracle:thin:@host:port:database", "user",
"password");
连接 sqlserver 数据库:
connection conn = drivermanager.getconnection("jdbc:microsoft:sqlserver://host:port;
databasename=database", "user", "password");

常用方法:
• createstatement():创建向数据库发送 sql 的 statement 对象。
• preparestatement(sql) :创建向数据库发送预编译 sql 的 preparesatement 对象。
• preparecall(sql):创建执行存储过程的 callablestatement 对象。
• setautocommit(boolean autocommit):设置事务是否自动提交。

注意:
preparestatement会先初始化sql,先把这个sql提交到数据库中进行预处理,多次使用可提高效率。

createstatement不会初始化,没有预处理,每次都是从0开始执行sql。

preparestatement支持批量处理,createstatement只执行一次。

preparedstatement 有效的防止 sql 注入(sql 语句在程序运行前已经进行了预编译, 当运行时动态地把参数传给 preprarestatement 时,即使参数里有敏感字符如 or '1=1’也数据库会作为一个参数一个字段的属性值来处理而不会作为一个 sql 指令

3)statement 接口

用于执行静态 sql 语句并返回它所生成结果的对象。
两种 statement 类:
• statement:由 createstatement 创建,用于发送简单的 sql 语句(不带参数)。
• preparedstatement :继承自 statement 接口,由 preparedstatement 创建,用于发送含有一个或多个参数的 sql 语句。preparedstatement 对象比statement 对象的效率更高,并且可以防止 sql 注入,所以我们一般都使用preparedstatement。

常用 statement 方法:
• execute(string sql):运行语句,返回是否有结果集
• executequery(string sql):运行 select 语句,返回 resultset 结果集。
• executeupdate(string sql):运行 insert/update/delete 操作,返回更新的行数。
• addbatch(string sql) :把多条 sql 语句放到一个批处理中。
• executebatch():向数据库发送一批 sql 语句执行。

4)resultset 接口
resultset 提供检索不同类型字段的方法,常用的有:
• getstring(int index)、getstring(string columnname):获得在数据库里是varchar、char 等类型的数据对象。
• getfloat(int index)、getfloat(string columnname):获得在数据库里是 float类型的数据对象。
• getdate(int index)、getdate(string columnname):获得在数据库里是 date 类型的数据。
• getboolean(int index)、getboolean(string columnname):获得在数据库里是boolean 类型的数据。
• getobject(int index)、getobject(string columnname):获取在数据库里任意类型的数据。

resultset 还提供了对结果集进行滚动的方法:
• next():移动到下一行
• previous():移动到前一行
• absolute(int row):移动到指定行
• beforefirst():移动 resultset 的最前面。
• afterlast() :移动到 resultset 的最后面。
使用后依次关闭对象及连接:resultset → statement → connection

4. 编写代码连接oracle数据库

创建文件夹用作数据访问层dao,可在basedao实现初始化数据库连接和连接关闭的操作
在这里插入图片描述

jdbc使用步骤:

加载 jdbc 驱动程序 → 建立数据库连接 connection → 创建执行 sql 的语句
statement → 处理执行结果 resultset → 释放资源

package cn.test_oracle.dao;
/*基本数据访问类(获取数据库连接)*/

import org.junit.platform.commons.function.try;

import java.sql.*;


public class basedao {
    static {
        //加载驱动
        try {
            class.forname("oracle.jdbc.driver.oracledriver");
        } catch (classnotfoundexception e) {
            throw new runtimeexception(e);
        }
    }
    //获取数据库连接
    public static connection getconnection() throws sqlexception {
        connection conn = null;
        try {
            conn =  drivermanager.getconnection("jdbc:oracle:thin:@localhost:1521:orcl","system","123456" );
        } catch (sqlexception e) {
            throw new runtimeexception(e);
        }
        if (conn != null) {
            system.out.println("连接成功");
        }else {
            system.out.println("连接失败");
        }
        return conn;
    }

    public static void closeall(connection conn, statement stmt, resultset rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (sqlexception e) {
            e.printstacktrace();
        }
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (sqlexception e) {
            e.printstacktrace();
        }
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (sqlexception e) {
            e.printstacktrace();
        }
    }
}

数据库表字段类型设计如下
在这里插入图片描述

创建实体类,并实现get,set方法

package cn.test_oracle.entity;

import java.util.date;

//用户表
public class owners {
    private long userid; //用户id
    private string username;
    private string userpwd;
    private long age;
    private string gender;
    private string email;
    private date regtime;

    public long getuserid() {
        return userid;
    }

    public void setuserid(long userid) {
        this.userid = userid;
    }

    public string getusername() {
        return username;
    }

    public void setusername(string username) {
        this.username = username;
    }

    public string getuserpwd() {
        return userpwd;
    }

    public void setuserpwd(string userpwd) {
        this.userpwd = userpwd;
    }

    public long getage() {
        return age;
    }

    public void setage(long age) {
        this.age = age;
    }

    public string getgender() {
        return gender;
    }

    public void setgender(string gender) {
        this.gender = gender;
    }

    public string getemail() {
        return email;
    }

    public void setemail(string email) {
        this.email = email;
    }

    public date getregtime() {
        return regtime;
    }

    public void setregtime(date regtime) {
        this.regtime = regtime;
    }
}

在ownersdao实现对数据库的增删改查操作
增加用户代码如下

    //增加用户
    public static void add(owners owners) {
        connection conn = null;
        //创建执行对象
        preparedstatement stmt = null;
        try {
            conn = basedao.getconnection();
            //sql语句
            stmt = conn.preparestatement("insert into pj.tb_user values (?,?,?,?,?,?,?)");
            //设置占位符
            stmt.setlong(1, owners.getuserid());
            stmt.setstring(2, owners.getusername());
            stmt.setstring(3, owners.getuserpwd());
            stmt.setlong(4, owners.getage());
            stmt.setstring(5, owners.getgender());
            stmt.setstring(6, owners.getemail());
            //这里需求的是sql.date,但java提供的是util.date,可以通过java的gettime方法将util.date变成long型,再转换成date型
            stmt.setdate(7, new date(owners.getregtime().gettime()));
            stmt.execute();


        } catch (sqlexception e) {
            throw new runtimeexception(e);
        } finally {
            basedao.closeall(conn, stmt, null);
        }
    }

修改用户代码如下

    //修改用户
    public static void update(owners owners) {
        connection conn = null;
        //创建执行对象
        preparedstatement stmt = null;
        try {
            conn = basedao.getconnection();
            //sql语句
            stmt = conn.preparestatement("update pj.tb_user set username=?, userpwd=?, " +
                    "age = ?, gender = ?, email = ?, regtime = ? where  userid = ?");
            //设置占位符

            stmt.setstring(1, owners.getusername());
            stmt.setstring(2, owners.getuserpwd());
            stmt.setlong(3, owners.getage());
            stmt.setstring(4, owners.getgender());
            stmt.setstring(5, owners.getemail());
            //这里需求的是sql.date,但java提供的是util.date,可以通过java的gettime方法将util.date变成long型,再转换成date型
            stmt.setdate(6, new date(owners.getregtime().gettime()));
            stmt.setlong(7, owners.getuserid());
            stmt.execute();


        } catch (sqlexception e) {
            throw new runtimeexception(e);
        } finally {
            basedao.closeall(conn, stmt, null);
        }
    }

删除用户代码如下

    //删除用户
    public static void delete(long id) {
        connection conn = null;
        //创建执行对象
        preparedstatement stmt = null;
        try {
            conn = basedao.getconnection();
            //sql语句
            stmt = conn.preparestatement("delete from pj.tb_user where userid = ?");
            //设置占位符
            stmt.setlong(1, id);
            stmt.execute();
        } catch (sqlexception e) {
            throw new runtimeexception(e);
        } finally {
            basedao.closeall(conn, stmt, null);
        }
    }

查询代码如下

    //查询用户
    public static arraylist<owners> query(long id) {
        arraylist<owners> list = new arraylist<>();
        connection conn = null;
        //创建执行对象
        preparedstatement stmt = null;
        resultset rs = null;
        try {
            conn = basedao.getconnection();
            //sql语句
            stmt = conn.preparestatement("select * from pj.tb_user where  userid = ?");
            //设置占位符
            stmt.setlong(1, id);
            //处理执行结果
            rs = stmt.executequery();
            while (rs.next()){
                owners s = new owners();
                s.setuserid(rs.getlong("userid"));
                s.setusername(rs.getstring("username"));
                s.setuserpwd(rs.getstring("userpwd"));
                s.setage(rs.getlong("age"));
                s.setgender(rs.getstring("gender"));
                s.setemail(rs.getstring("email"));
                s.setregtime(rs.getdate("regtime"));
                list.add(s);
            }
            return list;

        } catch (sqlexception e) {
            throw new runtimeexception(e);
        } finally {
            basedao.closeall(conn, stmt, rs);
        }
    }

看上述代码能否实现对数据库的交互,测试代码如下:

package cn.test_oracle.test;

import cn.test_oracle.dao.ownersdao;
import cn.test_oracle.entity.owners;

import java.text.dateformat;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;


public class testdao {
    public static void main(string[] args) throws parseexception {
        owners owners = new owners();
        owners.setuserid(2l);
        owners.setusername("clearlove7");
        owners.setuserpwd("123456");
        owners.setage(39l);
        owners.setgender("男");
        owners.setemail("pnj@3422.com");
        //将string转换成date两者处理方式,方式1
/*        dateformat fmt = new simpledateformat("yyyy-mm-dd");
        date date = fmt.parse("2021-01-30");*/
        //将string转换为date,方式2
        date date = java.sql.date.valueof("2023-02-12");
        owners.setregtime(date);

        ownersdao.add(owners);//增加用户
        ownersdao.update(owners);//修改用户信息
        ownersdao.delete(2l);//删除用户信息
        arraylist<owners> a = ownersdao.query(1l);//查询用户信息

        for (int i = 0; i < a.size(); i++) {
            owners owner1 = a.get(i);
            system.out.println(owner1.getuserid());
            system.out.println(owner1.getusername());
            system.out.println(owner1.getuserpwd());
            system.out.println(owner1.getgender());
            system.out.println(owner1.getage());
            system.out.println(owner1.getemail());
            system.out.println(owner1.getregtime());
        }
    }
}

结果如下,用户2成功添加进数据库。
在这里插入图片描述
查询结果:
在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com