实现简单的连接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账户登录数据库,只填写账户和密码,其他项可不做处理
可在左侧选择登录账户、当前项目(使用MyProject即可)、Table(该用户的表)
三、为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] 有时间,我看到,就给你发。