??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品一区久久久久久,亚洲一区二区三区影院,亚洲高清影院http://www.aygfsteel.com/ProgramerNi/category/50940.htmlE序?倪的个h博客zh-cnSat, 25 Feb 2012 06:59:44 GMTSat, 25 Feb 2012 06:59:44 GMT60java 调用存储q程http://www.aygfsteel.com/ProgramerNi/articles/370757.htmlProgramerNiProgramerNiSat, 25 Feb 2012 02:13:00 GMThttp://www.aygfsteel.com/ProgramerNi/articles/370757.htmlhttp://www.aygfsteel.com/ProgramerNi/comments/370757.htmlhttp://www.aygfsteel.com/ProgramerNi/articles/370757.html#Feedback0http://www.aygfsteel.com/ProgramerNi/comments/commentRss/370757.htmlhttp://www.aygfsteel.com/ProgramerNi/services/trackbacks/370757.html

一:Java如何实现对存储过E的调用:
   A:不带输出参数?br />  
---------------不带输出参数?---------------------------------
create procedure
getsum
@n int =0<--此处为参?->
as
declare @sum
int<--定义变量-->
declare @i int
set @sum=0
set @i=0
while
@i<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
print 'the sum is
'+ltrim(rtrim(str(@sum)))



--------------在SQL中执?--------------------
   exec getsum 100



------------在JAVA中调?---------------------
   JAVA可以调用  
但是在JAVAE序却不能去昄该存储过E的l果 因ؓ上面的存?br />   q程的参数类型int 传递方式是in(按?方式
   import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?)}");
       
        
//l存储过E的参数讄?br />         c.setInt(1,100);   //第一个参数的D|成100
       

         //执行存储q程
         c.execute();
        
conn.close();
}
}
  
   B:带输出参数的
     1:q回int
        
-------------------------带输出参数的----------------
alter procedure getsum
@n
int =0,
@result int output
as
declare @sum int
declare @i int
set
@sum=0
set @i=0
while @i<=@n begin
set @sum=@sum+@i
set
@i=@i+1
end
set @result=@sum
  
-------------------在查询分析器中执?-----------
   declare @myResult int
exec
getsum 100,@myResult output
print @myResult



   ------------在JAVA中调?--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?,?)}");
       
        
//l存储过E的W一个参数设|?br />         c.setInt(1,100);
       
        
//注册存储q程的第二个参数
        
c.registerOutParameter(2,java.sql.Types.INTEGER);
       
        
//执行存储q程
         c.execute();
       
        
//得到存储q程的输出参数?br />         System.out.println (c.getInt(2));
        
conn.close();
}
}
     2:q回varchar
      
----------------存储q程带游?---------------
---在存储过E中带游?nbsp; 
使用游标不停的遍历orderid
create procedure CursorIntoProcedure
@pname varchar(8000)
output
as
--定义游标
declare cur cursor for select orderid from
orders
--定义一个变量来接收游标的?br />declare @v varchar(5)
--打开游标
open cur
set
@pname=''--l@pname初?br />--提取游标的?br />fetch next from cur into @v
while
@@fetch_status=0
   begin



set @pname=@pname+';'+@v
   fetch next from cur into
@v
end
print @pname
--关闭游标
close cur
--销毁游?br />deallocate cur



   ------------执行存储q程--------------
exec CursorIntoProcedure ''



   --------------JAVA调用------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  
CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");
 

 
   c.registerOutParameter(1,java.sql.Types.VARCHAR);
 
  
c.execute();
 
   System.out.println (c.getString(1));
  
conn.close();
}
}
   C:删除数据的存储过E?br />    
------------------存储q程--------------------------



drop table 学生基本信息?br />create table 学生基本信息?br />(
StuID int primary
key,
StuName varchar(10),
StuAddress varchar(20)
)
insert into  
学生基本信息?values(1,'三毛','wuhan')
insert into   学生基本信息?
values(2,'三毛','wuhan')
create table 学生成W?br />(
StuID int,
Chinese
int,
PyhSics int
foreign key(StuID) references   学生基本信息?StuID)
on
delete cascade
on update cascade
)
insert into   学生成W?
values(1,99,100)
insert into   学生成W?values(2,99,100)



--创徏存储q程
create procedure delePro
@StuID int
as
delete from
学生基本信息?where StuID=@StuID
--创徏完毕
exec delePro 1  
--执行存储q程
--创徏存储q程
create procedure selePro
as
select * from
学生基本信息?br />--创徏完毕
exec selePro   --执行存储q程
    
------------------在JAVA中调?---------------
import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call delePro(?)}");
       
        
c.setInt(1,1);
       
         c.execute();
       
        
c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
D:修改数据的存储过E?br />---------------------创徏存储q程---------------------
   create
procedure ModPro
@StuID int,
@StuName varchar(10)
as
update 学生基本信息?
set StuName=@StuName where StuID=@StuID



   -------------执行存储q程-------------------------
exec ModPro 2,'四毛'
  
---------------JAVA调用存储q程--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call ModPro(?,?)}");
       
        
c.setInt(1,2);
         c.setString(2,"女");
               
        
c.execute();
       
         c=conn.prepareCall("{call
selePro}");
         ResultSet rs=c.executeQuery();
       
        
while(rs.next())
         {
         String
Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
E:查询数据的存储过E?模糊查询)
     -----------------存储q程---------------------
create
procedure FindCusts
@cust varchar(10)
as
select customerid from orders
where customerid
like '%'+@cust+'%'
    
---------------执行---------------------------
execute FindCusts 'alfki'
  
-------------在JAVA中调?-------------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call FindCusts(?)}");
        
c.setString(1,"Tom");
       
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String cust=rs.getString("customerid");       
        
System.out.println (cust);
         }
         c.close();
}
}
  
F:增加数据的存储过E?/p>


------------存储q程--------------------
create procedure
InsertPro
@StuID int,
@StuName varchar(10),
@StuAddress
varchar(20)
as
insert into 学生基本信息?values(@StuID,@StuName,@StuAddress)



-----------调用存储q程---------------
exec InsertPro
5,'555','555'
-----------在JAVA中执?------------
import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call InsertPro(?,?,?)}");
        
c.setInt(1,6);
         c.setString(2,"Liu");
        
c.setString(3,"wuhan");
       
         c.execute();
       

         c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String stuid=rs.getString("StuID");       
         String
name=rs.getString("StuName");       
         String
address=rs.getString("StuAddress");       
         System.out.println
(stuid+"   "+name+"   "+address);
         }
        
c.close();
}
}



G:在JAVA中创建存储过E?nbsp;  q且在JAVA中直接调?br />import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
 
 
  
Statement stmt=conn.createStatement();
   //在JAVA中创建存储过E?br />  
stmt.executeUpdate("create procedure OOP as select * from 学生成W?);
 
 

   CallableStatement c=conn.prepareCall("{call OOP}");
 
   ResultSet
rs=c.executeQuery();
   while(rs.next())
   {
   String
chinese=rs.getString("Chinese");
  
   System.out.println
(chinese);
   }
   conn.close();
 
}
}



ProgramerNi 2012-02-25 10:13 发表评论
]]>
java 调用存储q程http://www.aygfsteel.com/ProgramerNi/articles/370754.htmlProgramerNiProgramerNiSat, 25 Feb 2012 02:10:00 GMThttp://www.aygfsteel.com/ProgramerNi/articles/370754.htmlhttp://www.aygfsteel.com/ProgramerNi/comments/370754.htmlhttp://www.aygfsteel.com/ProgramerNi/articles/370754.html#Feedback0http://www.aygfsteel.com/ProgramerNi/comments/commentRss/370754.htmlhttp://www.aygfsteel.com/ProgramerNi/services/trackbacks/370754.html

一:Java如何实现对存储过E的调用:
   A:不带输出参数?br />  
---------------不带输出参数?---------------------------------
create procedure
getsum
@n int =0<--此处为参?->
as
declare @sum
int<--定义变量-->
declare @i int
set @sum=0
set @i=0
while
@i<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
print 'the sum is
'+ltrim(rtrim(str(@sum)))



--------------在SQL中执?--------------------
   exec getsum 100



------------在JAVA中调?---------------------
   JAVA可以调用  
但是在JAVAE序却不能去昄该存储过E的l果 因ؓ上面的存?br />   q程的参数类型int 传递方式是in(按?方式
   import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?)}");
       
        
//l存储过E的参数讄?br />         c.setInt(1,100);   //第一个参数的D|成100
       

         //执行存储q程
         c.execute();
        
conn.close();
}
}
  
   B:带输出参数的
     1:q回int
        
-------------------------带输出参数的----------------
alter procedure getsum
@n
int =0,
@result int output
as
declare @sum int
declare @i int
set
@sum=0
set @i=0
while @i<=@n begin
set @sum=@sum+@i
set
@i=@i+1
end
set @result=@sum
  
-------------------在查询分析器中执?-----------
   declare @myResult int
exec
getsum 100,@myResult output
print @myResult



   ------------在JAVA中调?--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?,?)}");
       
        
//l存储过E的W一个参数设|?br />         c.setInt(1,100);
       
        
//注册存储q程的第二个参数
        
c.registerOutParameter(2,java.sql.Types.INTEGER);
       
        
//执行存储q程
         c.execute();
       
        
//得到存储q程的输出参数?br />         System.out.println (c.getInt(2));
        
conn.close();
}
}
     2:q回varchar
      
----------------存储q程带游?---------------
---在存储过E中带游?nbsp; 
使用游标不停的遍历orderid
create procedure CursorIntoProcedure
@pname varchar(8000)
output
as
--定义游标
declare cur cursor for select orderid from
orders
--定义一个变量来接收游标的?br />declare @v varchar(5)
--打开游标
open cur
set
@pname=''--l@pname初?br />--提取游标的?br />fetch next from cur into @v
while
@@fetch_status=0
   begin



set @pname=@pname+';'+@v
   fetch next from cur into
@v
end
print @pname
--关闭游标
close cur
--销毁游?br />deallocate cur



   ------------执行存储q程--------------
exec CursorIntoProcedure ''



   --------------JAVA调用------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  
CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");
 

 
   c.registerOutParameter(1,java.sql.Types.VARCHAR);
 
  
c.execute();
 
   System.out.println (c.getString(1));
  
conn.close();
}
}
   C:删除数据的存储过E?br />    
------------------存储q程--------------------------



drop table 学生基本信息?br />create table 学生基本信息?br />(
StuID int primary
key,
StuName varchar(10),
StuAddress varchar(20)
)
insert into  
学生基本信息?values(1,'三毛','wuhan')
insert into   学生基本信息?
values(2,'三毛','wuhan')
create table 学生成W?br />(
StuID int,
Chinese
int,
PyhSics int
foreign key(StuID) references   学生基本信息?StuID)
on
delete cascade
on update cascade
)
insert into   学生成W?
values(1,99,100)
insert into   学生成W?values(2,99,100)



--创徏存储q程
create procedure delePro
@StuID int
as
delete from
学生基本信息?where StuID=@StuID
--创徏完毕
exec delePro 1  
--执行存储q程
--创徏存储q程
create procedure selePro
as
select * from
学生基本信息?br />--创徏完毕
exec selePro   --执行存储q程
    
------------------在JAVA中调?---------------
import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call delePro(?)}");
       
        
c.setInt(1,1);
       
         c.execute();
       
        
c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
D:修改数据的存储过E?br />---------------------创徏存储q程---------------------
   create
procedure ModPro
@StuID int,
@StuName varchar(10)
as
update 学生基本信息?
set StuName=@StuName where StuID=@StuID



   -------------执行存储q程-------------------------
exec ModPro 2,'四毛'
  
---------------JAVA调用存储q程--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call ModPro(?,?)}");
       
        
c.setInt(1,2);
         c.setString(2,"女");
               
        
c.execute();
       
         c=conn.prepareCall("{call
selePro}");
         ResultSet rs=c.executeQuery();
       
        
while(rs.next())
         {
         String
Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
E:查询数据的存储过E?模糊查询)
     -----------------存储q程---------------------
create
procedure FindCusts
@cust varchar(10)
as
select customerid from orders
where customerid
like '%'+@cust+'%'
    
---------------执行---------------------------
execute FindCusts 'alfki'
  
-------------在JAVA中调?-------------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call FindCusts(?)}");
        
c.setString(1,"Tom");
       
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String cust=rs.getString("customerid");       
        
System.out.println (cust);
         }
         c.close();
}
}
  
F:增加数据的存储过E?/p>


------------存储q程--------------------
create procedure
InsertPro
@StuID int,
@StuName varchar(10),
@StuAddress
varchar(20)
as
insert into 学生基本信息?values(@StuID,@StuName,@StuAddress)



-----------调用存储q程---------------
exec InsertPro
5,'555','555'
-----------在JAVA中执?------------
import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call InsertPro(?,?,?)}");
        
c.setInt(1,6);
         c.setString(2,"Liu");
        
c.setString(3,"wuhan");
       
         c.execute();
       

         c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String stuid=rs.getString("StuID");       
         String
name=rs.getString("StuName");       
         String
address=rs.getString("StuAddress");       
         System.out.println
(stuid+"   "+name+"   "+address);
         }
        
c.close();
}
}



G:在JAVA中创建存储过E?nbsp;  q且在JAVA中直接调?br />import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
 
 
  
Statement stmt=conn.createStatement();
   //在JAVA中创建存储过E?br />  
stmt.executeUpdate("create procedure OOP as select * from 学生成W?);
 
 

   CallableStatement c=conn.prepareCall("{call OOP}");
 
   ResultSet
rs=c.executeQuery();
   while(rs.next())
   {
   String
chinese=rs.getString("Chinese");
  
   System.out.println
(chinese);
   }
   conn.close();
 
}
}



ProgramerNi 2012-02-25 10:10 发表评论
]]>
java 调用存储q程http://www.aygfsteel.com/ProgramerNi/articles/370755.htmlProgramerNiProgramerNiSat, 25 Feb 2012 02:10:00 GMThttp://www.aygfsteel.com/ProgramerNi/articles/370755.htmlhttp://www.aygfsteel.com/ProgramerNi/comments/370755.htmlhttp://www.aygfsteel.com/ProgramerNi/articles/370755.html#Feedback0http://www.aygfsteel.com/ProgramerNi/comments/commentRss/370755.htmlhttp://www.aygfsteel.com/ProgramerNi/services/trackbacks/370755.html

一:Java如何实现对存储过E的调用:
   A:不带输出参数?br />  
---------------不带输出参数?---------------------------------
create procedure
getsum
@n int =0<--此处为参?->
as
declare @sum
int<--定义变量-->
declare @i int
set @sum=0
set @i=0
while
@i<=@n begin
set @sum=@sum+@i
set @i=@i+1
end
print 'the sum is
'+ltrim(rtrim(str(@sum)))



--------------在SQL中执?--------------------
   exec getsum 100



------------在JAVA中调?---------------------
   JAVA可以调用  
但是在JAVAE序却不能去昄该存储过E的l果 因ؓ上面的存?br />   q程的参数类型int 传递方式是in(按?方式
   import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?)}");
       
        
//l存储过E的参数讄?br />         c.setInt(1,100);   //第一个参数的D|成100
       

         //执行存储q程
         c.execute();
        
conn.close();
}
}
  
   B:带输出参数的
     1:q回int
        
-------------------------带输出参数的----------------
alter procedure getsum
@n
int =0,
@result int output
as
declare @sum int
declare @i int
set
@sum=0
set @i=0
while @i<=@n begin
set @sum=@sum+@i
set
@i=@i+1
end
set @result=@sum
  
-------------------在查询分析器中执?-----------
   declare @myResult int
exec
getsum 100,@myResult output
print @myResult



   ------------在JAVA中调?--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call getsum(?,?)}");
       
        
//l存储过E的W一个参数设|?br />         c.setInt(1,100);
       
        
//注册存储q程的第二个参数
        
c.registerOutParameter(2,java.sql.Types.INTEGER);
       
        
//执行存储q程
         c.execute();
       
        
//得到存储q程的输出参数?br />         System.out.println (c.getInt(2));
        
conn.close();
}
}
     2:q回varchar
      
----------------存储q程带游?---------------
---在存储过E中带游?nbsp; 
使用游标不停的遍历orderid
create procedure CursorIntoProcedure
@pname varchar(8000)
output
as
--定义游标
declare cur cursor for select orderid from
orders
--定义一个变量来接收游标的?br />declare @v varchar(5)
--打开游标
open cur
set
@pname=''--l@pname初?br />--提取游标的?br />fetch next from cur into @v
while
@@fetch_status=0
   begin



set @pname=@pname+';'+@v
   fetch next from cur into
@v
end
print @pname
--关闭游标
close cur
--销毁游?br />deallocate cur



   ------------执行存储q程--------------
exec CursorIntoProcedure ''



   --------------JAVA调用------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
  
CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");
 

 
   c.registerOutParameter(1,java.sql.Types.VARCHAR);
 
  
c.execute();
 
   System.out.println (c.getString(1));
  
conn.close();
}
}
   C:删除数据的存储过E?br />    
------------------存储q程--------------------------



drop table 学生基本信息?br />create table 学生基本信息?br />(
StuID int primary
key,
StuName varchar(10),
StuAddress varchar(20)
)
insert into  
学生基本信息?values(1,'三毛','wuhan')
insert into   学生基本信息?
values(2,'三毛','wuhan')
create table 学生成W?br />(
StuID int,
Chinese
int,
PyhSics int
foreign key(StuID) references   学生基本信息?StuID)
on
delete cascade
on update cascade
)
insert into   学生成W?
values(1,99,100)
insert into   学生成W?values(2,99,100)



--创徏存储q程
create procedure delePro
@StuID int
as
delete from
学生基本信息?where StuID=@StuID
--创徏完毕
exec delePro 1  
--执行存储q程
--创徏存储q程
create procedure selePro
as
select * from
学生基本信息?br />--创徏完毕
exec selePro   --执行存储q程
    
------------------在JAVA中调?---------------
import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call delePro(?)}");
       
        
c.setInt(1,1);
       
         c.execute();
       
        
c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
D:修改数据的存储过E?br />---------------------创徏存储q程---------------------
   create
procedure ModPro
@StuID int,
@StuName varchar(10)
as
update 学生基本信息?
set StuName=@StuName where StuID=@StuID



   -------------执行存储q程-------------------------
exec ModPro 2,'四毛'
  
---------------JAVA调用存储q程--------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call ModPro(?,?)}");
       
        
c.setInt(1,2);
         c.setString(2,"女");
               
        
c.execute();
       
         c=conn.prepareCall("{call
selePro}");
         ResultSet rs=c.executeQuery();
       
        
while(rs.next())
         {
         String
Stu=rs.getString("StuID");
         String
name=rs.getString("StuName");
         String
add=rs.getString("StuAddress");
        
         System.out.println
("学号:"+"     "+"姓名:"+"     "+"地址");
         System.out.println (Stu+"    
"+name+"   "+add);
         }
         c.close();
}
}
  
E:查询数据的存储过E?模糊查询)
     -----------------存储q程---------------------
create
procedure FindCusts
@cust varchar(10)
as
select customerid from orders
where customerid
like '%'+@cust+'%'
    
---------------执行---------------------------
execute FindCusts 'alfki'
  
-------------在JAVA中调?-------------------------
import java.sql.*;
public
class ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call FindCusts(?)}");
        
c.setString(1,"Tom");
       
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String cust=rs.getString("customerid");       
        
System.out.println (cust);
         }
         c.close();
}
}
  
F:增加数据的存储过E?/p>


------------存储q程--------------------
create procedure
InsertPro
@StuID int,
@StuName varchar(10),
@StuAddress
varchar(20)
as
insert into 学生基本信息?values(@StuID,@StuName,@StuAddress)



-----------调用存储q程---------------
exec InsertPro
5,'555','555'
-----------在JAVA中执?------------
import
java.sql.*;
public class ProcedureTest
{
public static void
main(String args[]) throws Exception
{
   //加蝲驱动
  
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
  
//获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");



         //创徏存储q程的对?br />         CallableStatement
c=conn.prepareCall("{call InsertPro(?,?,?)}");
        
c.setInt(1,6);
         c.setString(2,"Liu");
        
c.setString(3,"wuhan");
       
         c.execute();
       

         c=conn.prepareCall("{call selePro}");
         ResultSet
rs=c.executeQuery();
       
         while(rs.next())
        
{
         String stuid=rs.getString("StuID");       
         String
name=rs.getString("StuName");       
         String
address=rs.getString("StuAddress");       
         System.out.println
(stuid+"   "+name+"   "+address);
         }
        
c.close();
}
}



G:在JAVA中创建存储过E?nbsp;  q且在JAVA中直接调?br />import java.sql.*;
public class
ProcedureTest
{
public static void main(String args[]) throws
Exception
{
   //加蝲驱动
   DriverManager.registerDriver(new
sun.jdbc.odbc.JdbcOdbcDriver());
   //获得q接
   Connection
conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");
 
 
  
Statement stmt=conn.createStatement();
   //在JAVA中创建存储过E?br />  
stmt.executeUpdate("create procedure OOP as select * from 学生成W?);
 
 

   CallableStatement c=conn.prepareCall("{call OOP}");
 
   ResultSet
rs=c.executeQuery();
   while(rs.next())
   {
   String
chinese=rs.getString("Chinese");
  
   System.out.println
(chinese);
   }
   conn.close();
 
}
}



ProgramerNi 2012-02-25 10:10 发表评论
]]>
J2EE 执行定时dhttp://www.aygfsteel.com/ProgramerNi/articles/370707.htmlProgramerNiProgramerNiFri, 24 Feb 2012 09:34:00 GMThttp://www.aygfsteel.com/ProgramerNi/articles/370707.htmlhttp://www.aygfsteel.com/ProgramerNi/comments/370707.htmlhttp://www.aygfsteel.com/ProgramerNi/articles/370707.html#Feedback0http://www.aygfsteel.com/ProgramerNi/comments/commentRss/370707.htmlhttp://www.aygfsteel.com/ProgramerNi/services/trackbacks/370707.htmlTomcat 下Web目的定时Q?/span>

监听器类:
SysContextListener.java


package axtic.servlet;
import java.util.Timer;//定时器类
import axtic.bean.exportHistoryBean;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SysContextListener implements ServletContextListener
{
private Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{//在这里初始化监听器,在tomcat启动的时候监听器启动Q可以在q里实现定时器功?/span>
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//d日志Q可在tomcat日志中查看到
timer.schedule(new exportHistoryBean(event.getServletContext()),0,5*1000);//调用exportHistoryBeanQ?表示d无gq,5*1000表示每隔5U执行Q务,60*60*1000表示一个小时?/span>
event.getServletContext().log("已经dd");
}
public void contextDestroyed(ServletContextEvent event)
{//在这里关闭监听器Q所以在q里销毁定时器?/span>
timer.cancel();
event.getServletContext().log("定时器销?quot;);
}
}


接下来可以编写自q功能c,此类一定要extends定时器类中TimerTask

功能c?
exportHistoryBean.java

package axtic.bean;
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class exportHistoryBean extends TimerTask
{
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public exportHistoryBean(ServletContext context)
{
this.context = context;
}

public void run()
{
Calendar c = Calendar.getInstance();
if(!isRunning)
{
if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
{
isRunning = true;
context.log("开始执行指定Q?quot;);
//-------------------开始保存当日历史记?/span>



//在这里编写自q功能Q例Q?/span>
//File file = new File("temp");
//file.mkdir();
//启动tomcatQ可以发现在tomcat根目录下Q会自动创徏temp文g?/span>

//-------------------l束
isRunning = false;
context.log("指定d执行l束");
}
else
{
context.log("上一ơQ务执行还未结?quot;);
}
}
}
}

记的在web.xml中添?strong>listener的信?/span>

web.xml
<web-app>
<listener>
<listener-class>
com.listeners.MyContextListener
</listener-class>
</listener>
<servlet/>
<servlet-mapping/>
</web-app>


以上p够实现Web目的定时Q务了,下面是另一位牛人的实际应用及加?
Servlet侦听器结合Java定时器实CQ务计划调?/span>
好多朋友用过Windows的Q务计划,也有不少E序q己曾写过旉报警、系l自动关机等味E序Q可却很有朋友在Web工程中实现过cM功能。今天有I把W者先前曾在Tomcat上实现的cM功能Q搬出来与大家共享?/span>
早在几年前,我公司跟某市财政局合作目开发,为加政局Ҏ属单位胦务状늚有效监管Q开发、实施了财政局数据中心目。此目采用B/S加C/S混合l构模式。胦政局Web服务器上架设数据同步接收装置Q由市属单位每天下班前把财务信息通过HTTP协议上传臌政局中心服务器,与Web服务器上的接收装|对接。胦政局内部各部门需要查阅大量胦务信息,获取完备的市属单位当前胦务状况信息,各部门按职能划分Q需要准的获取各部门各自所x的汇M息,以胦政报表的形式提供?/span>
因胦政数据量大,实时计算财政报表速度较慢Q当初就考虑用报表缓存来减轻服务器的负担Q但用缓存需要一个合理的~存更新机制。考虑到各市属单位每天下班前才把胦务数据上传,财政局每天所查看到的财务信息其实q不包括当天Q除非有某位领导{到所属单位全部上传完之后才来查看信息Q应该已l下班了Q,所以要是能实现d计划调度Q在每晚深夜把当天及历史财务信息汇总,更新~存Q速度瓉不就解决了吗?/span>
当时׃pȝ核心是基于Web部v的,报表计算引擎也相应的部v在Tomcat容器上,因此如果惌借用Windows的Q务计划来实现定时计算Q就需要额外编写普通桌面应用程序接口,E显复杂。于是就琢磨着惛_Web上实玎ͼl过查阅较多相关资料Q发现Java定时器(java.util.TimerQ有定时触发计划d的功能,通过配置定时器的间隔旉Q在某一间隔旉D之后会自动有规律的调用预先所安排的计划Q务(java.util.TimerTaskQ。另外,׃我们希望当Web工程启动Ӟ定时器能自动开始计Ӟ在整个Web工程的生命期里,定时器能在每晚深夜触发一ơ报表计引擎。因此定时器的存放位|也值得考查Q不能简单的存在于单个Servlet或JavaBean中,必须能让定时器宿ȝ存活期ؓ整个Web工程生命期,在工E启动时能自动加载运行。结合这两点Q跟Servlet上下文有关的侦听器就最合适不q了Q通过在工E的配置文g中加以合理配|,会在工程启动时自动运行,q在整个工程生命期中处于监听状态?/span>
下面Servlet侦听器结合Java定时器来讲述整个实现q程。要q用Servlet侦听器需要实现javax.servlet.ServletContextListener接口Q同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。考虑定时器有个徏立和销毁的q程Q看了前面两个接口函敎ͼ׃容置疑的把徏立的q程|入contextInitializedQ把销毁的q程|入contextDestroyed了?/span>
我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器Q示例代码如下所C(虑幅Q仅提供部分代码供读者参考)Q?/span>


private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定时器已启动");
timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
event.getServletContext().log("已经dd调度?quot;);
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销?quot;);
}

以上代码? timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000)q一行ؓ定时器调度语句,其中MyTask是自定义需要被调度的执行Q务(在我的胦政数据中心项目中是报表计算引擎入口Q,从java.util.TimerTaskl承Q下面会重点讲述Q第三个参数表示每小??0*60*1000毫秒)被触发一ơ,中间参数0表示无gq。其它代码相当简单,不再详细说明?/span>
下面介绍MyTask的实玎ͼ上面的代码中看到了在构造MyTaskӞ传入了javax.servlet.ServletContextcd参数,是ؓ记录Servlet日志方便而传入,因此需要重载MyTask的构造函敎ͼ其父cjava.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,讄了每时调度一?因此如果惛_现调度Q务每24时被执行一ơ,q需要判断一下时钟点Q以帔RC_SCHEDULE_HOUR表示(晚上12点,也即0?。同时ؓ防止24时执行下来QQ务还未执行完Q当Ӟ一般Q务是没有q么长的Q,避免W二ơ又被调度以引v执行冲突Q设|了当前是否正在执行的状态标志isRunning。示例代码如下所C:


private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public MyTask(ServletContext context) {
this.context = context;
}
public void run() {
Calendar cal = Calendar.getInstance();
if (!isRunning) {
if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) {
isRunning = true;
context.log("开始执行指定Q?quot;);

//TODO d自定义的详细dQ以下只是示?/span>
int i = 0;
while (i++ < 10) {
context.log("已完成Q务的" + i + "/" + 10);
}

isRunning = false;
context.log("指定d执行l束");
}
} else {
context.log("上一ơQ务执行还未结?quot;);
}
}

上面代码?#8220;//TODO……”之下四行是真正被调度执行的演CZ?在我的胦政数据中心项目中是报表计算q程)Q您可以换成自己希望执行的语句?/span>
到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部v到您的Web工程中去Q在您工E的web.xml配置文g中加入如下三行:

com.test.ContextListener

当然Q上面的com.test得换成您自己的包名了。保存web.xml文g后,把工E打包部|到Tomcat中即可。Q务会在每?2点至凌晨1点之间被执行Q上面的代码会在Tomcat的日志文件中记录如下Q?/span>
2003-12-05 0Q?1Q?9 开始执行指定Q?/span>
2003-12-05 0Q?1Q?9 已完成Q务的1/10
……
2003-12-05 0Q?1Q?9 已完成Q务的10/10
2003-12-05 0Q?1Q?9 指定d执行l束

如何使用ServletContextListener
ideawu 发表?2006-06-23 18:20:15 分类: Web 状? 公众可见 查看: 775 评论: 0
q个J2EE提C阐qCServletContextListener的用法。这个事件类作ؓWeb应用E序的一部分Q处理Web应用E序的servlet上下?context)的变化的通知。这可以解释为,好像有个人在服务器旁不断地通知我们服务器在发生什么事件。那当然需要监听者了。因此,在通知上下?context)初始化和销毁的时候,ServletContextListner非常有用?/span>

import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.*;

public class MyListener implements ServletContextListener {

private ServletContext context = null;

/* q个Ҏ在Web应用服务被移除,没有能力再接受请求的时候被调用?/span>
*/
public void contextDestroyed(ServletContextEvent event){
//Output a simple message to the server's console
System.out.println("The Simple Web App. Has Been Removed");
this.context = null;

}

// q个Ҏ在Web应用服务做好接受h的时候被调用?/span>
public void contextInitialized(ServletContextEvent event){
this.context = event.getServletContext();

//Output a simple message to the server's console
System.out.println("The Simple Web App. Is Ready");

}
}
web.xml
<web-app>
<listener>
<listener-class>
com.listeners.MyContextListener
</listener-class>
</listener>
<servlet/>
<servlet-mapping/>
</web-app>

阅读全文
cdQ?/b>Java 查看评论

ProgramerNi 2012-02-24 17:34 发表评论
]]>
java异常处理思\http://www.aygfsteel.com/ProgramerNi/articles/370708.htmlProgramerNiProgramerNiThu, 23 Feb 2012 18:30:00 GMThttp://www.aygfsteel.com/ProgramerNi/articles/370708.htmlhttp://www.aygfsteel.com/ProgramerNi/comments/370708.htmlhttp://www.aygfsteel.com/ProgramerNi/articles/370708.html#Feedback0http://www.aygfsteel.com/ProgramerNi/comments/commentRss/370708.htmlhttp://www.aygfsteel.com/ProgramerNi/services/trackbacks/370708.html1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,q样Q在~程时异常更加难以被忽视?/p>

2.通常Q只在最上层(一般是UI?捕捉异常。如果要在其它层捕捉异常Q除非是下列情况之一Q?br> (1)能够处理该异常,或?br> (2)能够忽略该异常,或?br> (3)需要{换该异常为其它特定异常后抛出新异?/p>

3.UI层捕获异常后Q可?br> (1)无关紧要的异常忽略?br> (2)异常{换ؓ错误信息展现l用戗?br> (3)如果是重大异常,可以考虑l止应用E序?/p>

4.最上层(一般是UI?不得抛出新的异常Q最上层需要捕捉所有异常,否则异常会直接导致程序终止,q将是非怸好的用户体验?/p>

5.可以在非最上层抛出自定义异常。如果是自定义异常,请保证其是可序列化的Qƈ且保证其实现了Exception的三个构造函数?/p>

6.异常的抛Z截获需要很多的cpu旉Q请谨慎的用异常?/p>

7.在可能抛出异常的地方Q如果需要,L保用finallyq行资源清理Q而无论此处是否捕捉了异常?/p>

8.在一个catch块中的代码都应该臛_部分地处理了所捕捉的异常。否则,׃要用catch块?/p>

9.从构造函C抛出异常?br>  因ؓ构造函数没有返回|所以没有简单的Ҏ来想构造函数的调用者发出构造失败的信号Q这时便可以通过抛出异常来做到。比如构造参C指定条g不符Ӟ抛Z个异常?#160;

10.在以上前提的保证下,可以在非最上层使用AOP截获(intercept)异常而进行日志记录,q样通过日志记录Q我们可以了解系l的  q行状态。在软g实现中,异常和日志都是重要的质量保证手段Q异常和日志L同时出现的?br>  可以_异常是日志记录的重要/主要l成部分?br>

阅读全文
cdQ?/b>Java 查看评论

ProgramerNi 2012-02-24 02:30 发表评论
]]>
վ֩ģ壺 | | | ½| ʼ| | | | | | | | ũ| Ӽ| ij| | ɶ| ˴| | | dz| | | | | | | ɽ| | | | | Ľ| | | ͨ| | | | ˮ| |