Java40: 数据库四(Oracle)

2024-09-03 22:32
文章标签 java oracle 数据库 40

本文主要是介绍Java40: 数据库四(Oracle),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JDBC 提供访问数据库的标准  就是一系列接口 定义了访问数据库的通用的方法

由各个数据库厂商提供对JDBC的实现


JDBC接口的定义

数据库厂商对jdbc的实现 jar


建立连接-发送sql-执行sql-返回结果-关闭连接


JDBC API(接口)

    java.sql.Connection//封装和数据库的连接

    java.sql.Statement//封装SQL语句的执行

    jave.sql.ResultSet//封装DQL执行的结果

package jdbc;import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import oracle.jdbc.OracleDriver;public class OracleDemo01 {public static void main(String[] args) throws Exception{//装载JDBC的实现//Driver driver =new OracleDriver() ; 自己写//DriverManager.registerDriver(driver);//把类装载到内存中  静态 快中执行  上面的两条  就不用自己写了//该类的静态块中的代码会进行Driver的注册Class.forName("oracle.jdbc.OracleDriver");//装载JDBC的实现用这个就好了//创建连接//调用DriverManager 的getConnection方法//该方法返回的是数据库厂商对Connection接口的实现类的对象(因为DriverManager已经注册了数据库厂商的Driver信息)String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user = "scott";String pass = "xxxxx";Connection con = DriverManager.getConnection(url,user,pass);//url 用于表示数据库的连接信息(ip port 数据库名称)  不同的数据库厂商有特定的url的格式和标识// DriverManager 会根据这个标识来选取不同的驱动信息//如果同时注册了多个数据库厂商的实现//user//password//System.out.println(con);//执行SQL//Connection 的createStatement() 方法用于创建Statement 实现类的对象Statement stmt = con.createStatement();//只能执行DQL语句//返回值是ResultSet//把SQl语句传输给数据库执行//获取数据库传输会的结果数据//并把这个数据封装成ResultSet 对象ResultSet rs = stmt.executeQuery("select empno,ename name,sal from emp");//获取结果while(rs.next()){//.next() 游标 向下System.out.println(rs.getString("empno")+","+rs.getString("name")+","+rs.getString("sal"));}rs.close();//关闭连接} 
}
package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class OracleDemo02 {public static void main(String[] args) throws Exception{Class.forName("oracle.jdbc.OracleDriver");String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user="scott";String pass="xxxxx";Connection con = DriverManager.getConnection(url,user,pass);Statement stmt = con.createStatement();//执行DML语句 insert delete updateString sql = "insert into emp2(empno,ename,sal,deptno) values(20,'lmdtx',3000,10)";int n = stmt.executeUpdate(sql);//返回整数表示,刚才的语句影响的行数System.out.println(n);con.close();}
}
package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class OracleDemo03 {public static void main(String[] args) throws Exception{Class.forName("oracle.jdbc.OracleDriver");String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user = "scott";String pass = "xxxxx";Connection con = DriverManager.getConnection(url,user,pass);Statement stmt = con.createStatement();String sql = "delete from emp2 where ename='lmdtx'";int n = stmt.executeUpdate(sql);System.out.println(n);con.close();}
}



会有被注入的风险

name:a' or 'b'='b
a' or 'b'='b
select ename,empno,sal from emp2 where ename = 'a' or 'b'='b'
package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;public class OracleDemo04 {public static void main(String[] args) throws Exception{Scanner in = new Scanner(System.in);System.out.print("name:");String name = in.nextLine();System.out.println(name);Class.forName("oracle.jdbc.OracleDriver");String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user = "scott";String pass = "xxxxx";Connection con = DriverManager.getConnection(url,user,pass);Statement stat = con.createStatement();String sql ="select ename,empno,sal from emp2 where ename = '"+name+"'";System.out.println(sql);ResultSet rs = stat.executeQuery(sql);while(rs.next()){System.out.println(rs.getString(1)+","+rs.getInt(2)+","+rs.getInt(3));}con.close();}
}

PreparedStatement 接口(用这个好)

  提高效率

  防止SQL Injection

    1创建连接

    2PreparedStatement

        PreparedStatement stmt = con.prepareStatement(sql)

    3 stmt.setString(1,"xxx");

     stmt.setInt(1,123);

package jdbc;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class OracleDemo05 {public static void main(String[] args)throws Exception{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("name:");String name = br.readLine();Class.forName("oracle.jdbc.OracleDriver");String url = "jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user = "scott";String pass = "xxxxx";Connection con = DriverManager.getConnection(url,user,pass);String sql = "select empno,ename,sal from emp2 where ename=?";PreparedStatement stmt = con.prepareStatement(sql);//将 sql 中 第一个问号的值设置为字符串 stmt.setString(1,name);ResultSet rs = stmt.executeQuery();while(rs.next()){System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getInt(3));}con.close();}
}

    

package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;public class OracleDemo06 {public static void main(String[] args) throws Exception{Class.forName("oracle.jdbc.OracleDriver");String url ="jdbc:oracle:thin:@x1.zongxuan.online:1521:xx";String user ="scott";String pass = "xxxxx";Connection con = DriverManager.getConnection(url,user,pass);String sql ="insert into emp2(empno,ename) values(?,?)";PreparedStatement stmt = con.prepareStatement(sql);int n =0;for(int i =1000;i<3000;i++){stmt.setInt(1, i+1);stmt.setString(2, "sting"+i);n = stmt.executeUpdate();System.out.println(i+","+n);}con.close();}
}


封装连接工具类

properties 

    文本文件, 存放的是KEY—VALUSE

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@x1.zongxuan.online:1521:xx
user=scott
pass=xxxxx
package jdbc;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;public class DBUtils {private static String driver;private static String url;private static String user;private static String pass;static{Properties props = new Properties();try {props.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc/db.properties"));driver= props.getProperty("driver");url= props.getProperty("url");user= props.getProperty("user");pass= props.getProperty("pass");Class.forName(driver);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection openConnection() throws Exception{return DriverManager.getConnection(url,user,pass);}
}
package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class OracleDemo08 {public static void main(String[] args) throws Exception {Connection con = DBUtils.openConnection();String sql = "select empno,ename,sal from emp2";PreparedStatement stmt = con.prepareStatement(sql);// 将 sql 中 第一个问号的值设置为字符串ResultSet rs = stmt.executeQuery();while (rs.next()) {System.out.println(rs.getInt(1) + "," + rs.getString(2) + ","+ rs.getInt(3));}con.close();}
}


日期

package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;public class Oracledemo09 {public static void main(String[] args) throws Exception{Connection con = DBUtils.openConnection();String sql ="insert into emp2(empno,ename,hiredate)"+ "values(?,?,?)";PreparedStatement stmt =con.prepareStatement(sql);stmt.setInt(1, 4000);stmt.setString(2,"lmdtx");stmt.setDate(3,new Date(System.currentTimeMillis()));int n =stmt.executeUpdate();System.out.println(n);con.close();}
}



批处理

    Batch 处理 批量的插入 更新

    stmt.addBatch();

        把刚刚设置好的数据添加批处理缓冲

    stmt

        执行批处理,把缓冲的数据一次传送给数据库执行

    

    缓存的批处理量受到哭护短JVM内存的限制要指定一个合理的批量值才好

package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;public class OracleDemo10 {public static void main(String[] args) throws Exception{Connection con = DBUtils.openConnection();String sql = "insert into emp2(empno,ename) values(?,?)";PreparedStatement stmt = con.prepareStatement(sql);//批量插入for(int i =5000;i<=6000;i++){stmt.setInt(1, i);stmt.setString(2, "M"+i);stmt.addBatch();//添加批处理}stmt.executeBatch();//执行批处理con.close();}
}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;public class OracleDemo10 {public static void main(String[] args) throws Exception{Connection con = DBUtils.openConnection();String sql = "insert into emp100(id,name) values(?,?)";PreparedStatement stmt = con.prepareStatement(sql);//批量插入for(int i =1;i<=2000000;i++){stmt.setInt(1, i);stmt.setString(2, "M"+i);stmt.addBatch();//添加批处理if(i%20000==0){stmt.executeBatch();}}stmt.executeBatch();//执行批处理con.close();}
}



JDBC的事物操作

    JDBC 中所有的DML会默认提交 在每条DML语句后会默认的加入commit


    con.setAutoCommit(false)

    con.commit();//成功

    con.rollback();//失败

    提交事务使用 连接的api

    


测试 表 pay id 10 和id 100 

id 10 的人向 id 100 的人 转账500

create table pay(id number(10),money number(10)
);
insert into pay values(10,20000);
insert into pay values(100,10000);select * from pay;
package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class OracleDemo11 {public static void main(String[] args) throws Exception {Connection con = DBUtils.openConnection();PreparedStatement stmt = con.prepareStatement("update pay set money = money-500 where id=10");int n = stmt.executeUpdate();System.out.println(n+"行"+"id = 10  money -500");if (true) {throw new Exception("模仿异常");}PreparedStatement stmt2 = con.prepareStatement("update pay set money = money+500 where id=100");stmt2.executeUpdate();System.out.println("id = 100 money +500");con.close();}
}

 这个就会有异常, id =10的钱被-了500 但是id =100 的却没有+500


使用con.setAutoCommit(false)

package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class OracleDemo12 {public static void main(String[] args) throws Exception{Connection con =null;try{con = DBUtils.openConnection();con.setAutoCommit(false);PreparedStatement stmt = con.prepareStatement("update pay set money = money-500 where id=10");int n  = stmt.executeUpdate();System.out.println(n+"行"+"id = 10  money -500");if (true) {throw new Exception("模仿异常");}PreparedStatement stmt2 = con.prepareStatement("update pay set money = money+500 where id=100");stmt2.executeUpdate();System.out.println("id = 100 money +500");con.commit();}catch(Exception e){con.rollback();e.printStackTrace();}finally{if(con!=null){con.close();}}}
}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class OracleDemo12 {public static void main(String[] args) throws Exception{Connection con =null;try{con = DBUtils.openConnection();con.setAutoCommit(false);PreparedStatement stmt = con.prepareStatement("update pay set money = money-500 where id=10");int n  = stmt.executeUpdate();System.out.println(n+"行"+"id = 10  money -500");PreparedStatement stmt2 = con.prepareStatement("update pay set money = money+500 where id=100");stmt2.executeUpdate();System.out.println("id = 100 money +500");con.commit();}catch(Exception e){con.rollback();e.printStackTrace();}finally{if(con!=null){con.close();}}}
}



连接池技术

    别自己写 用开源的  

    Oracle 

        weblogic 

    阿里

          Druid 

    Apache Commons

        DBCP

        POOL

        LOGGING



    连接池是一个软件 管理一系列已经建立好的连接 可以节省连接频繁建立的开销,一些牛X的连接池还可以根据当时的用户访问量动态的改变所管理连接的数目

    在应用了连接池以后

    con.close()

    只是将连接 还给连接池,不在是真正的关闭掉了

    

package jdbc;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;import org.apache.commons.dbcp2.BasicDataSource;public class DBUtils2 {private static String driver;private static String url;private static String user;private static String pass;private static BasicDataSource ds;static{Properties props = new Properties();try {props.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc/db.properties"));driver= props.getProperty("driver");url= props.getProperty("url");user= props.getProperty("user");pass= props.getProperty("pass");ds = new BasicDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(user);ds.setPassword(pass);} catch (IOException e) {e.printStackTrace();} }public static Connection getConnection() throws Exception{return ds.getConnection();}
}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;public class OracleDemo13 {public static void main(String[] args) throws Exception{Connection con = DBUtils2.getConnection();String sql = "insert into emp100(id,name) values(?,?)";PreparedStatement stmt = con.prepareStatement(sql);//批量插入for(int i =1;i<=10000000;i++){stmt.setInt(1, i);stmt.setString(2, "M"+i);stmt.addBatch();//添加批处理if(i%20000==0){stmt.executeBatch();System.out.println(i);}}stmt.executeBatch();//执行批处理con.close();}
}


DAO 

    Data Access Object

 专门用来访问数据库的程序=》 数据访问层 (Data Access Layer) 



    1》实体类

        和数据表对应的类,一般只包含数据和对数据的基本访问方法(setter,getter)

        一般情况下:一个实体类对应一个表

               一个实体类的对象 对应表中的一行数据

    2》DAO类

        负责对数据库的CRUD(增删改查)

        封装所有对数据库的操作 供其它模块的程序调用

        一帮情况是 一个表对一个DAO类

        DAO 中有很多的方法,每个方法都是对数据库的一种操作

    3》数据连接工具

        用于封装对数据库连接的获取


完整的参考下面(  第一个 )  后面还有改版.

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@c1.zongxuan.online:1521:xx
user=scott
pass=xxxxx
package jdbc;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;import org.apache.commons.dbcp2.BasicDataSource;public class DBUtils {private static String driver;private static String url;private static String user;private static String pass;private static BasicDataSource ds;static{Properties props = new Properties();try {props.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc/db.properties"));driver= props.getProperty("driver");url= props.getProperty("url");user= props.getProperty("user");pass= props.getProperty("pass");ds = new BasicDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(user);ds.setPassword(pass);} catch (IOException e) {e.printStackTrace();} }public static Connection getConnection() throws Exception{return ds.getConnection();}public static void main(String[] args) throws Exception{Connection con = getConnection();System.out.println(con);}}
package jdbc;public class Dept {private int deptno;private String dname;private String loc;public int getDeptno() {return deptno;}public void setDeptno(int deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class DeptDAO {private static final String FIND_ALL="select deptno,dname,loc from dept";private static final String FIND_BY_LOC="select deptno,dname,loc from dept where loc=?";private static final String ADD="insert into dept(deptno,dname,loc) values(?,?,?)";public List<Dept> finaALL() throws Exception{List<Dept> list;Connection con = null;try {con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(FIND_ALL);ResultSet rs = stmt.executeQuery();list = new ArrayList<Dept>();while(rs.next()){list.add(toDept(rs));}return list;} catch (Exception e) {e.printStackTrace();throw e;}finally{if(con != null){con.close();}}}public List<Dept> findByLoc(String loc) throws Exception{List<Dept> list;Connection con = null;try {con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(FIND_BY_LOC);stmt.setString(1,loc);ResultSet rs = stmt.executeQuery();list = new ArrayList<Dept>();while(rs.next()){list.add(toDept(rs));}return list;} catch (Exception e) {e.printStackTrace();throw e;}finally{if(con != null){con.close();}}}public void Add(Dept dept) throws Exception{Connection con = null;try{con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(ADD);stmt.setInt(1, dept.getDeptno());stmt.setString(2, dept.getDname());stmt.setString(3, dept.getLoc());stmt.executeUpdate();}catch(Exception e){e.printStackTrace();throw e;}}/*** 从结果集中取出数据封装成实体对象* @throws SQLException * */private Dept toDept(ResultSet rs) throws SQLException{Dept dept = new Dept();dept.setDeptno(rs.getInt("deptno"));dept.setDname(rs.getString("dname"));dept.setLoc(rs.getString("loc"));return dept;}}
package jdbc;import java.math.BigDecimal;
import java.sql.Date;public class Emp {//FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";private int empno;private String ename;private Date hireDate;private BigDecimal sal;private String job;private int mgr;private int comm;private int deptno;public int getEmpno() {return empno;}public void setEmpno(int empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public Date getHireDate() {return hireDate;}public void setHireDate(Date hireDate) {this.hireDate = hireDate;}public BigDecimal getSal() {return sal;}public void setSal(BigDecimal sal) {this.sal = sal;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public int getMgr() {return mgr;}public void setMgr(int mgr) {this.mgr = mgr;}public int getComm() {return comm;}public void setComm(int comm) {this.comm = comm;}public int getDeptno() {return deptno;}public void setDeptno(int deptno) {this.deptno = deptno;}}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class EmpDAO {private static final String FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";private static final String FIND_BY_LOC="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename=?";private static final String ADD="insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(?,?,?,?,?,?,?,?)";public List<Emp> finaALL() throws Exception{List<Emp> list;Connection con = null;try {con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(FIND_ALL);ResultSet rs = stmt.executeQuery();list = new ArrayList<Emp>();while(rs.next()){list.add(toEmp(rs));}return list;} catch (Exception e) {e.printStackTrace();throw e;}finally{if(con != null){con.close();}}}public List<Emp> findByLoc(String ename) throws Exception{List<Emp> list;Connection con = null;try {con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(FIND_BY_LOC);stmt.setString(1,ename);ResultSet rs = stmt.executeQuery();list = new ArrayList<Emp>();while(rs.next()){list.add(toEmp(rs));}return list;} catch (Exception e) {e.printStackTrace();throw e;}finally{if(con != null){con.close();}}}public void Add(Emp emp) throws Exception{Connection con = null;try{con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(ADD);stmt.setInt(1, emp.getEmpno());stmt.setString(2, emp.getEname());stmt.setString(3, emp.getJob());stmt.setInt(4, emp.getMgr());stmt.setDate(5, emp.getHireDate());stmt.setBigDecimal(6, emp.getSal());stmt.setInt(7, emp.getComm());stmt.setInt(8, emp.getDeptno());stmt.executeUpdate();}catch(Exception e){e.printStackTrace();throw e;}}/*** 从结果集中取出数据封装成实体对象* @throws SQLException * *///FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";private Emp toEmp(ResultSet rs) throws SQLException{Emp emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setMgr(rs.getInt("mgr"));emp.setHireDate(rs.getDate("hiredate"));emp.setSal(rs.getBigDecimal("sal"));emp.setComm(rs.getInt("comm"));emp.setDeptno(rs.getInt("deptno"));return emp;}
}
package jdbc;import org.junit.Test;public class TestDeptDAO {@Testpublic void testFinadAll() throws Exception{for(Dept l:new DeptDAO().finaALL()){System.out.println(l.getDeptno()+","+l.getDname()+","+l.getLoc());}}@Testpublic void testFinadByLoc() throws Exception{for(Dept l:new DeptDAO().findByLoc("DALLAS")){System.out.println(l.getDeptno()+","+l.getDname()+","+l.getLoc());}}@Testpublic void testAdd() throws Exception{Dept dept = new Dept();dept.setDeptno(60);dept.setDname("RD");dept.setLoc("SH");new DeptDAO().Add(dept);}}
package jdbc;import org.junit.Test;public class TestEmpDAO {
//	private static final String FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";@Testpublic void test() throws Exception {for(Emp l:new EmpDAO().finaALL()){System.out.println(l.getEmpno()+","+l.getEname()+","+l.getJob()+","+l.getMgr()+","+l.getHireDate()+","+l.getSal()+","+l.getComm()+","+l.getDeptno());}}}








优化一下:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@c1.zongxuan.online:1521:xx
user=scott
pass=xxxxx
package jdbc;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;import org.apache.commons.dbcp2.BasicDataSource;public class DBUtils {private static String driver;private static String url;private static String user;private static String pass;private static BasicDataSource ds;static{Properties props = new Properties();try {props.load(DBUtils.class.getClassLoader().getResourceAsStream("jdbc/db.properties"));driver= props.getProperty("driver");url= props.getProperty("url");user= props.getProperty("user");pass= props.getProperty("pass");ds = new BasicDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(user);ds.setPassword(pass);} catch (IOException e) {e.printStackTrace();} }public static Connection getConnection() throws Exception{return ds.getConnection();}public static void main(String[] args) throws Exception{Connection con = getConnection();System.out.println(con);}}
package jdbc;import java.math.BigDecimal;
import java.sql.Date;public class Emp {//FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";private int empno;private String ename;private Date hireDate;private BigDecimal sal;private String job;private int mgr;private int comm;private int deptno;public int getEmpno() {return empno;}public void setEmpno(int empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public Date getHireDate() {return hireDate;}public void setHireDate(Date hireDate) {this.hireDate = hireDate;}public BigDecimal getSal() {return sal;}public void setSal(BigDecimal sal) {this.sal = sal;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public int getMgr() {return mgr;}public void setMgr(int mgr) {this.mgr = mgr;}public int getComm() {return comm;}public void setComm(int comm) {this.comm = comm;}public int getDeptno() {return deptno;}public void setDeptno(int deptno) {this.deptno = deptno;}}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public abstract class BaseDAO {//封装查询  修饰符protected//sql语句//参数protected List query(String sql,Object[] o) throws Exception{Connection con  = null;try {con = DBUtils.getConnection();PreparedStatement stmt = con.prepareStatement(sql);if(o != null){for(int i =0;i<o.length;i++){stmt.setObject(i+1, o[i]);//JDBC 帮你判断具体的参数类型}}ResultSet rs = stmt.executeQuery();List list = new ArrayList();while(rs.next()){list.add(toEntity(rs));}return list;} catch (Exception e) {e.printStackTrace();throw e;}finally{if(con != null){con.close();}}}//不同的子类用不通的方法吧结果集中的数据转换public abstract Object toEntity(ResultSet rs) throws Exception;}
package jdbc;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class EmpDAO extends BaseDAO {private static final String FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";private static final String FIND_BY_ENAME="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where ename=?";private static final String ADD="insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(?,?,?,?,?,?,?,?)";public Object toEntity(ResultSet rs) throws Exception{Emp emp = new Emp();emp.setEmpno(rs.getInt("empno"));emp.setEname(rs.getString("ename"));emp.setJob(rs.getString("job"));emp.setMgr(rs.getInt("mgr"));emp.setHireDate(rs.getDate("hiredate"));emp.setSal(rs.getBigDecimal("sal"));emp.setComm(rs.getInt("comm"));emp.setDeptno(rs.getInt("deptno"));return emp;}public List<Emp> finadAll() throws Exception{return (List<Emp>)query(FIND_ALL, null);}public List<Emp> finadByEname(String ename) throws Exception{return (List<Emp>)query(FIND_BY_ENAME,new Object[]{ename});}}
package jdbc;import org.junit.Test;public class TestEmpDAO {
//	private static final String FIND_ALL="select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";@Testpublic void testFinadAll() throws Exception {for(Emp l:new EmpDAO().finadAll()){System.out.println(l.getEmpno()+","+l.getEname()+","+l.getJob()+","+l.getMgr()+","+l.getHireDate()+","+l.getSal()+","+l.getComm()+","+l.getDeptno());}}@Testpublic void testFinaByLoc() throws Exception {for(Emp l:new EmpDAO().finadByEname("SCOTT")){System.out.println(l.getEmpno()+","+l.getEname()+","+l.getJob()+","+l.getMgr()+","+l.getHireDate()+","+l.getSal()+","+l.getComm()+","+l.getDeptno());}}}


这篇关于Java40: 数据库四(Oracle)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134233

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input