zoukankan      html  css  js  c++  java
  • Java基础15

    Java基础15

    目录

    Java基础15    1

    文件结构(java操作oracle数据库)    1

    TestMyOracle/src/com.oracle/TestOra.java    1

    TestMyOracle/src/com.oracle/TestOra2.java    2

    TestMyOracle/src/com.test1/TestTrans.java    4

    TestMyOracle/src/com.test2/TestOraclePro.java    6

    TestMyOracle/src/com.test3/Test1.java    8

    TestMyOracle/src/com.test3/Test2.java    9

    TestMyOracle/src/com.test3/Test3.java    11

    TestMyOracle/src/com.test3/Test4.java    13

    TestOracleFenYe/src/com.test/test1.java    15

    TestOracleFenYe/WebRoot/MyTest.jsp    18

    文件结构(java操作oracle数据库)

    TestMyOracle/src/com.oracle/TestOra.java

    /**

    * 演示如何使用Jdbc_obdb桥接方式操作oracle

    */

    package com.oracle;

    import java.sql.*;

    public class TestOra {

        /**

         * @param args

         */

        public static void main(String[] args) {

            Connection ct=null;    

            Statement sm=null;

            ResultSet rs=null;

            

            try {

                //1.加载驱动

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                //2.加载驱动

                ct=DriverManager.getConnection("jdbc:odbc:orcl","scott","luowei");

                //以下和sql server 一样

                sm=ct.createStatement();

                rs=sm.executeQuery("select * from emp");

                while(rs.next())

                {

                    //用户名

                    System.out.println("用户名:"+rs.getString(2));

                }

                

            } catch (Exception e) {

                e.printStackTrace();

            }finally{

                try

                {

                    //关闭打开的资源

                    rs.close();

                    sm.close();

                    ct.close();

                } catch (SQLException e)

                {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.oracle/TestOra2.java

    /**

    * 使用jdbc连接oracle

    */

    package com.oracle;

    import java.sql.*;

    public class TestOra2 {

        /**

         * @param args

         */

        public static void main(String[] args) {

            Connection ct=null;    

            Statement sm=null;

            ResultSet rs=null;

            try {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","luowei");

                //以下和sql server 一样

                sm=ct.createStatement();

                rs=sm.executeQuery("select * from emp");

                while(rs.next())

                {

                    //用户名

                    System.out.println("用户名:"+rs.getString(2));

                }

                

            } catch (Exception e) {

                e.printStackTrace();

            }finally{

                try

                {

                    //关闭打开的资源

                    rs.close();

                    sm.close();

                    ct.close();

                } catch (SQLException e)

                {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test1/TestTrans.java

    /**

    * 测试事务的案例

    */

    package com.test1;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    public class TestTrans

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;    

            Statement sm=null;

            ResultSet rs=null;

            

            try {

                //1.加载驱动

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                //2.加载驱动

                ct=DriverManager.getConnection("jdbc:odbc:orcl","scott","luowei");

                //以下和sql server 一样

                sm=ct.createStatement();

                

                //加入事务处理

                ct.setAutoCommit(false);

                sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");

                //int i=7/0;

                sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");

                ct.commit();

                

                rs=sm.executeQuery("select ename,sal from emp");

                while(rs.next())

                {

                    //用户名

                    System.out.print("用户名:"+rs.getString(1));

                    System.out.println("    sal:"+rs.getString(2));

                }

                

            } catch (Exception e) {

                //如果发生异常就回滚

                try

                {

                    ct.rollback(); //回滚

                } catch (SQLException e1)

                {

                    e1.printStackTrace();

                }

                e.printStackTrace();

            }finally{

                try

                {

                    //关闭打开的资源

                    rs.close();

                    sm.close();

                    ct.close();

                } catch (SQLException e)

                {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test2/TestOraclePro.java

    /**

    * 测试Oracle的存储过程

    * 演示java程序去调用oracle的存储过程

    *

    * 存储过程:

    * 1/写一个过程,可以输入雇员名,新工资 可修改雇员名的工资

    * 2/如何调用过程有两种方法:

    * 3/如何在java程序中调用一个存储过程

        create or replace procedure my_pro(myName varchar2,newSal number) is

        --在这里可以定义变量

        begin

        --执行部分,根据用户名去修改工资

        update emp set sal=newSal where ename=myName;

        end;

        /

    */

    package com.test2;

    import java.sql.*;

    public class TestOraclePro

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call my_pro(?,?)}");

                //4.给?赋值

                cs.setString(1, "SMITH");

                cs.setInt(2, 2088);

                

                //加入事务处理

                ct.setAutoCommit(false);

                //5.执行

                cs.execute();

                ct.commit();

                

            } catch (Exception e)

            {

                //如果发生异常就回滚

                try

                {

                    ct.rollback(); //回滚

                } catch (SQLException e1)

                {

                    e1.printStackTrace();

                }

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭资源

                    cs.close();

                    ct.close();

                } catch (SQLException e)

                {

                    e.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test3/Test1.java

    /**

    * 调用一个无返回值的过程

    * 存储过程:

        --建book表

        create table book(bookId number,bookName varchar2(50),publishHouse varchar2(50));

        --编写过程

        --in:表示函数的输入参数,不写默认是in

        --out:表示一个输出参数

        create or replace procedure my_pro(myBookId in number,

            mybookName in varchar2,mypublishHouse in varchar2) is

        begin

            insert into book values(myBookId,mybookName,mypublishHouse);

        end;

        /

    */

    package com.test3;

    import java.sql.*;

    public class Test1

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call my_pro(?,?,?)}");

                //4.给?赋值

                cs.setInt(1, 10);

                cs.setString(2, "三国演义");

                cs.setString(3, "人民出版社");

                //5.执行

                cs.execute();

                

            } catch (Exception e)

            {

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭各种打开的资源

                    cs.close();

                    ct.close();

                } catch (SQLException e1)

                {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test3/Test2.java

    /**

    * 调用一个有返回值的过程

    * 存储过程:

        --建book表

        create table book(bookId number,bookName varchar2(50),publishHouse varchar2(50));

        --有返回值的存储过程---------------------------------------------------

        --1.编写一个过程,可以输入书的编号,并返回该书的名字

        --有输入和输出的存储过程

        create or replace procedure my_pro(myno in number,myName out varchar2) is

        begin

         select ename into myName from emp where empno=myno;

        end;

        /

    */

    package com.test3;

    import java.sql.*;

    public class Test2

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call my_pro(?,?)}");

                //4.给?赋值

                cs.setInt(1, 7788);

                //给第二个?赋值(从第二个问号取出值)

                cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

                //5.执行(不要忘记执行,否则会出现 NullPointException)

                cs.execute();

                

                //取出返回值(从第二个?取返回值)

                String name=cs.getString(2);

                System.out.println("7788的名字是:"+name);

                

                //5.执行

                cs.execute();

                

            } catch (Exception e)

            {

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭各种打开的资源

                    cs.close();

                    ct.close();

                } catch (SQLException e1)

                {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test3/Test3.java

    /**

    * 调用一个有多个返回值的过程(非列表)

    * 存储过程:

        --建book表

        --2.r返回多个值(非列表)-------------

        create or replace procedure my_pro

         (myno in number,myName out varchar2,

         mySal out number,myJob out varchar2) is

        begin

         select ename,sal,job into myName,mySal,myJob from emp where empno=myno;

        end;

        /

    */

    package com.test3;

    import java.sql.*;

    public class Test3

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call my_pro(?,?,?,?)}");

                //4.给?赋值

                cs.setInt(1, 7369);

                //给后面的?赋值(从第二个问号取出值)

                cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

                cs.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);

                cs.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);

                

                //5.执行(不要忘记执行,否则会出现 NullPointException)

                cs.execute();

                

                //取出返回值(从第二个?取返回值)

                String name=cs.getString(2);

                String job=cs.getString(4);

                System.out.println("7369的名字是:"+name);

                System.out.println("7369的工作是:"+job);

                

                

            } catch (Exception e)

            {

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭各种打开的资源

                    cs.close();

                    ct.close();

                } catch (SQLException e1)

                {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

            }

        }

    }

    TestMyOracle/src/com.test3/Test4.java

    /**

    * 调用一个有多个返回值的过程(列表)

    * 存储过程:

        --建book表

        --3.返回多个值(列表[结果集])--------------

        --编写一个过程,输入部门号,返回该部门所有雇员信息

        --oracle存储过程没有返回值,它的所有的返回值都是通过out参数来替代的,

        --列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package,所以要分两部分

        ----第1步,创建一个包,在该包中,定义了类型test_cursor,是个游标类型

        create or replace package testpackage as

         type test_cursor is ref cursor;

        end testpackage;

        ----第2步,创建过程

        create or replace procedure my_pro

         (myNo in number,p_cursor out testpackage.test_cursor) is

        begin

         open p_cursor for select * from emp where deptno=myNo;

        end;

        /

    */

    package com.test3;

    import java.sql.*;

    public class Test4

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            ResultSet rs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call my_pro(?,?)}");

                //4.给?赋值

                cs.setInt(1, 10);

                //给后面的?赋值(从第二个问号取出值)

                cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);

                

                //5.执行(不要忘记执行,否则会出现 NullPointException)

                cs.execute();

                

                //得到结果集(从第二个?取返回值)

                rs=(ResultSet)cs.getObject(2);

                

                while(rs.next())

                {

                    System.out.println(rs.getInt(1)+"    "+rs.getString(2));

                }

                

            } catch (Exception e)

            {

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭各种打开的资源

                    rs.close();

                    cs.close();

                    ct.close();

                } catch (SQLException e1)

                {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

            }

        }

    }

    TestOracleFenYe/src/com.test/test1.java

    /**

    * 调用一个有多个返回值的过程(列表)

    * 存储过程:

        --分页-----

        select * from (select t1.*,rownum rn from (select * from emp) t1 where rownum<=10)where rn>=6;

        ----------------------------------------------------------------------------

        --首先创建一个包

        create or replace package testpackage as

         type test_cursor is ref cursor;

        end testpackage;

        

        --开始编写分布过程--------------------------------

        create or replace procedure fenye

         (tableName in varchar2,

         pageSize in number, --每页显示的记录数

         pageNow in number, --要显示的哪一页

         myrows out number,--总记录数

         myPageCount out number, --总页数

         p_cursor out testpackage.test_cursor --返回的记录

         ) is

        --定义部分

        --定义sql语句,字符串

        v_sql varchar2(1000);

        --定义两个整数

        v_begin number:=(pageNow-1)*pageSize+1;

        v_end number:=pageNow*pageSize;

        begin

        --执行部分

        v_sql:='select * from (select t1.*,rownum rn from (select * from '||tableName||' order by sal) t1 where rownum<='||v_end||')where rn>='||v_begin; --将分页的字符串送给变量v_sql

        --把游标和sql关联

        open p_cursor for v_sql;

        --计算myrows和myPageCount

        --组织一个sql

        v_sql:='select count(*) from '||tableName;

        --执行sql,并把返回的值,赋给myrows

        execute immediate v_sql into myrows;

        --计算myPageCount

        if mod(myrows,pageSize)=0 then

            myPageCount:=myrows/pageSize;

        else

            myPageCount:=myrows/pageSize+1;

        end if;

        --关闭游标

        --close p_cursor;

        end;

        /

    */

    package com.test;

    import java.sql.*;

    public class Test1

    {

        /**

         * @param args

         */

        public static void main(String[] args)

        {

            Connection ct=null;

            CallableStatement cs=null;

            ResultSet rs=null;

            try

            {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","SCOTT","luowei");

                //3.创建CallableStatement

                cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");

                //4.给?赋值

                cs.setString(1,"emp");

                cs.setInt(2, 5); //pageSize

                cs.setInt(3, 1); //pageNow

                //

                cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER); //myrows(总记录数)

                cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER); //pageCount

                cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR); //结果集

                

                cs.execute();

                //取出总记录数,注意getInt(4)是由该参数的位置决定的

                int rowNum=cs.getInt(4);

                int pageCount=cs.getInt(5);

                rs=(ResultSet)cs.getObject(6);

                

                //显示取出的参数与结果集

                System.out.println("rowNum:="+rowNum);

                System.out.println("pagaeCount:="+pageCount);

                while(rs.next())

                {

                    System.out.println("编号:"+rs.getInt(1)+"    姓名:"+rs.getString(2)+"    工资"+rs.getFloat(6));

                }

                

            } catch (Exception e)

            {

                e.printStackTrace();

            }finally

            {

                try

                {

                    //关闭各种打开的资源

                    rs.close();

                    cs.close();

                    ct.close();

                } catch (SQLException e1)

                {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

            }

        }

    }

    TestOracleFenYe/WebRoot/MyTest.jsp

    <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

    <head>

    <base href="<%=basePath%>">

    <title>My JSP 'MyTest.jsp' starting page</title>

        <meta http-equiv="pragma" content="no-cache">

        <meta http-equiv="cache-control" content="no-cache">

        <meta http-equiv="expires" content="0">

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

        <meta http-equiv="description" content="This is my page">

        <!--

        <link rel="stylesheet" type="text/css" href="styles.css">

        -->

    </head>

    <body>

    <h2>oracle分页案例</h2>

    <table>

    <tr><td>用户名</td><td>薪水</td></tr>

    <%

        Connection ct=null;    

            Statement sm=null;

            ResultSet rs=null;

            try {

                //1.加载驱动

                Class.forName("oracle.jdbc.driver.OracleDriver");

                //2.得到连接

                ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","luowei");

                //以下和sql server 一样

                sm=ct.createStatement();

                

                //接收pageNow

                String s_pageNow=(String)request.getParameter("pageNow");

                int pageNow=1;

                if(s_pageNow!=null)

                {

                    pageNow=Integer.parseInt(s_pageNow);

                }

                

                

                //查询总页数

                int pageCount=0;

                int rowCount=0; //共有多少记录

                int pageSize=3;    //每页显示几条记录

                

                rs=sm.executeQuery("select count(*) from emp");

                if(rs.next())

                {

                    rowCount=rs.getInt(1);

                    if(rowCount%pageSize==0)

                    {

                        pageCount=rowCount/pageSize;

                    }

                    else

                    {

                        pageCount=rowCount/pageSize+1;

                    }

                }

                

                //分页,每页显示3个人

                rs=sm.executeQuery("select * from (select a1.*,rownum rn from"

                        +" (select * from emp) a1 where rownum<"+pageNow*pageSize+") where rn>="+(pageNow-1)*pageSize);

                

                while(rs.next())

                {

                    out.println("<tr>");

                    //用户名

                    out.println("<td>"+rs.getString(2)+"</td>");

                    out.println("<td>"+rs.getString(6)+"</td>");

                    out.println("</tr>");

                }

                

                //打印总页数

                for(int i=1;i<=pageCount;i++)

                {

                    out.println("<a href=MyTest.jsp?pageNow="+i+">&nbsp;"+i+"&nbsp;</a>");

                }

                

            } catch (Exception e) {

                e.printStackTrace();

            }finally{

                try

                {

                    //关闭打开的资源

                    rs.close();

                    sm.close();

                    ct.close();

                } catch (SQLException e)

                {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

    %>

    </table>

    </body>

    </html>

  • 相关阅读:
    Mac-Mysql忘记root密码
    spring 定时任务配置
    MD5 加密
    java io流 图片和字符串之间的转换
    httpclient 无信任证书使用https
    java对象转换成json
    Maven仓库 国内镜像
    大数据与批量调度的紧密关系
    开源Datax、Sqoop、Kettle等ETL工具作业自动化实现-分享
    ETL作业调度工具TASKCTL的两个重大突破
  • 原文地址:https://www.cnblogs.com/luowei010101/p/2168734.html
Copyright © 2011-2022 走看看