学习:连接Oracle实现简单的CRUD(增删改查)(控制台版)

实现简单的连接Oracle,并CRUD

环境:Eclipse Oxygen
数据库:Oracle 11.2
jdbc驱动:ojdbc6.jar
图形界面:PL/SQL Developer
账户:scott
表:系统EMP表

备注:为了插入方便,为该表id字段添加了序列,并设置了触发器(实现id自增)

不懂怎么解锁scott账户、如何使用pl/sql的可以参考pl/sql 操作Oracle 完成简单操作

Oracle部分操作


一、启动Oracle服务

1.1、有两种方式,一是在服务里启动:

运行(win+r),输入“services.msc”。

这里写图片描述
打开,OracleServiceORCL和OracleOraDb11g_home1TNSListener这两项服务。
这里写图片描述

1.2、方式二,直接运行服务命令

这里写图片描述
这里写图片描述

二、打开Oracle

2.1、使用控制台sqlplus

这里写图片描述
先进行一次简单的查询,emp信息……

2.2、使用 图形界面PL/SQL Developer

使用scott账户登录数据库,只填写账户和密码,其他项可不做处理
这里写图片描述

图2.1

可在左侧选择登录账户、当前项目(使用MyProject即可)、Table(该用户的表)
这里写图片描述
图2.2

这里写图片描述
图2.3

三、为Emp添加自增字段

oracle不能使用图形界面直接为表字段添加自增属性,可使用先为字段添加一个序列,然后建立触发器,将序列与 表id绑定实现记录时,id自增。

详情请自行参考:Oracle 字段设置自增

创建序列

create sequence SEQ_EMP
minvalue 1
maxvalue 200
start with 18
increment by 1
nocache;

创建触发器

CREATE OR REPLACE TRIGGER emp_id_auto
BEFORE
insert on emp
for each row
begin
select seq_emp.nextval into :new.id from dual;
end;

插入信息


//使用触发器+序列实现自增,插入信息时可省略掉id
Insert into emp (ename,sal,comm) values('zzz',4000',200);

四、相关查询

创建成功后,可在视图管理处看到创建的触发器和序列
关于触发器、序列的sql方式查询、修改、删除请自行参考,这里不再赘述:触发器、序列的查询、修改、删除
这里写图片描述
使用sql或界面管理器查看EMP
这里写图片描述

特别注意:当执行编辑数据时,使用sql语句并commit,或使用视图的方法点击绿色的√提交时,显示“已被另一个用户锁定”,注意关掉cmd sqlplus的进程,(ctrl+c)退出sqlplus,重新执行,就好了。
这里写图片描述

五、java代码部分


5.1 目录树结构

这里写图片描述

5.2 bean

emp 实体类

package huaruan.bean;

public class Emp {
    String ename;
    int sal;
    int comm;
    int id;

    public Emp() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Emp(String ename, int id) {
        super();
        this.ename = ename;
        this.id = id;
    }

    public Emp(String ename, int sal, int comm) {
        super();
        this.ename = ename;
        this.sal = sal;
        this.comm = comm;
    }

    public Emp(String ename, int sal, int comm, int id) {
        super();
        this.ename = ename;
        this.sal = sal;
        this.comm = comm;
        this.id = id;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public int getSal() {
        return sal;
    }
    public void setSal(int sal) {
        this.sal = sal;
    }
    public int getComm() {
        return comm;
    }
    public void setComm(int comm) {
        this.comm = comm;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "Emp [ename=" + ename + ", sal=" + sal + ", comm=" + comm + ", id=" + id + "]";
    }

}

5.3 数据库连接util

package huaruan.util;

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

public class ConnectOracle {

    private static final String  driver = "oracle.jdbc.driver.OracleDriver";//驱动字符串
    private static final String  url = "jdbc:oracle:thin:@localhost:1521:orcl";//连接字符串
    private static final String user ="scott";//用户名
    private static final String password ="root";//密码

    private static  Connection  connection = null;

    public Statement stmt = null; // 声明Statement对象的实例
    public ResultSet rs = null; // 声明ResultSet对象的实例
    public ConnectOracle(){}

    public static Connection getConnection()
    {
        try {
            //1.加载驱动
            Class.forName(driver);
            //2、获得连接
        connection =DriverManager.getConnection(url,user, password);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return connection;
    }
    /*
     * 功能:执行查询语句
     */
    public ResultSet executeQuery(String sql) {
        try { // 捕捉异常
            connection = getConnection(); 
            // 调用getConnection()方法构造Connection对象的一个实例conn
            stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            System.err.println(ex.getMessage()); // 输出异常信息
        }
        return rs; // 返回结果集对象
    }

    /*
     * 功能:执行更新操作
     */
    public int executeUpdate(String sql) {
        int result = 0; // 定义保存返回值的变量
        try { // 捕捉异常
            connection = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
            stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            result = stmt.executeUpdate(sql); // 执行更新操作
        } catch (SQLException ex) {
            result = 0; // 将保存返回值的变量赋值为0
            System.err.println(ex.getMessage()); // 输出异常信息
        }
        return result; // 返回保存返回值的变量
    }
    public static void CloseConn(){
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5.4 dao

package huaruan.dao;

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

import huaruan.bean.Emp;
import huaruan.util.ConnectOracle;

public class EmpDao {
    private ConnectOracle conn = null;
    PreparedStatement ps = null;

    public EmpDao() {
        conn = new ConnectOracle();
    }
    /**
     * 功能:添加
     * 
     * @param 
     * @return
     */
    public boolean insert(Emp p) {

        String sql = "INSERT INTO emp (ename,sal,comm,id) " 
            + "VALUES('" 
                + p.getEname() + "',"  
                + p.getSal() + ","
                + p.getComm() + "," 
                + p.getId() 

                + ")";      //保存数据的SQL语句
        System.out.println("插入:"+sql);
        int n = conn.executeUpdate(sql);// 执行更新语句
        conn.CloseConn();// 关闭数据库连接
        return n>0;
    }
    /**
     * 
     * @param 查询
     * @return
     */
    public List<Emp> query(Map<String, Object> sqlmap) {
        StringBuffer sql= new StringBuffer("select * from emp where 1 = 1");


        if(sqlmap.get("ename")!=null && sqlmap.get("ename")!=""){
            sql.append(" and ename like'"+"%"+sqlmap.get("ename")+"'"+"%");
        }
        System.out.println("模糊查询:"+sql);


        List<Emp> list = new ArrayList<Emp>();
        try{
        ps = ConnectOracle.getConnection().prepareStatement(sql.toString());
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            Emp p = new Emp();
            p.setEname(rs.getString("ename"));
            p.setSal(rs.getInt("sal"));
            p.setComm(rs.getInt("comm"));
            p.setId(rs.getInt("id"));

            list.add(p);

        }
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 
     * @param 更新
     * @return
     */
    public boolean update(Emp p){
        String sql = "update emp set " 
            + "ename =" 
                + "'"+p.getEname()+ "',"+ "sal="  
                + p.getSal()+","+ "comm="
                +p.getComm()+
                " where id=" 
                +p.getId(); //保存数据的SQL语句
        System.out.println("更新:"+sql);
        int n = conn.executeUpdate(sql);// 执行更新语句
        conn.CloseConn();// 关闭数据库连接
        return n>0;


    }
    /**
     * 
     * @param 删除
     * @return
     */
    public boolean delete(Emp p){
        String sql = "delete from emp where ename =  " 

                +"'"+p.getEname()+"'"+ " and id="
                +p.getId();     //保存数据的SQL语句
        System.out.println("删除:"+sql);
        int n = conn.executeUpdate(sql);// 执行更新语句
        conn.CloseConn();// 关闭数据库连接
        return n>0;


    }
}

5.5 test

package huaruan.test;

import huaruan.bean.Emp;
import huaruan.dao.EmpDao;
import huaruan.util.ConnectOracle;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public class TestOracle {


    public static void main(String[] args) {

        ConnectOracle conn = new ConnectOracle();
        System.out.println(conn.getConnection());
        EmpDao dao = new EmpDao();


        //查询
        List<Emp> list = new ArrayList<Emp>();
        Map sqlmap = new HashMap();
        list=dao.query(sqlmap);

        for(Emp p1 : list)
        {
            System.out.println(p1);
        }

        //更新
        Emp p = new Emp("ZHAO",2000,299,15);
        System.out.println(dao.update(p));

        //删除
        Emp p1 = new Emp("ZHAO",15);
        System.out.println(dao.delete(p1));
        //增加
        Emp p2 = new Emp("LI",6000,200);
        System.out.println(dao.insert(p2));
    }

}

查询效果:

这里写图片描述

后记:以上为学习笔记,希望对各位读者有个参考,水平有限,若有错误之处,欢迎指出!
备注:连接Orcle需要 ojdbc6.jar 可自行baidu,或联系 [email protected] 有时间,我看到,就给你发。

猜你喜欢

转载自blog.csdn.net/qq_35206244/article/details/81213817