java中用事物控制语言调用数据库中的数据,以及调用存储过程或函数
2013-09-18 12:31
951 查看
定义一个工具类:
package com.etc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Util {
static {//静态代码块 引入oracle 连接驱动包
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getCon(){ //定义一个静态方法与数据库连接
Connection con=null;
try {
con =DriverManager.getConnection("jdbc:oracle:thin:@172.18.2.248:1521:leoorcl","bruce","bruce");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
public static void close(ResultSet rs,Statement st,Connection con){//定义一个静态方法关闭对应的操作
if(rs == null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st == null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con == null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void close(PreparedStatement ps,Connection con){
if(ps == null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con == null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
数据封装类:
package com.ect.entity;
public class UserEntity {
private int name;
private int money;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
定义一个借口,里面是操作数据库的方法:
package com.etc.dao;
import java.util.List;
import com.ect.entity.UserEntity;
public interface IUserDao { //定义一个userdao 结果
public List<UserEntity> selectAll();//查询数据,返回值为数据封装类型的list
public int insertItem(UserEntity user);//插入数据
}
定义一个类继承接口:
package com.ect.daoimpl;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ect.entity.UserEntity;
import com.etc.dao.IUserDao;
import com.etc.util.Util;
public class UserDaoImpl implements IUserDao { //继承userdao借口,重写方法
@Override
public List<UserEntity> selectAll() {
List<UserEntity> list = new ArrayList<UserEntity>();
Connection con=null;
Statement st = null;
ResultSet rs =null;
con=Util.getCon();
try {
st= con.createStatement(); //创建一个执行语句
rs = st.executeQuery("select * from userr");
while(rs.next()){
UserEntity user = new UserEntity();
user.setName(rs.getInt("name"));
user.setMoney(rs.getInt("money"));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Util.close(rs, st, con);
return list;
}
public int insertItem(UserEntity user) {
Connection con=null;
PreparedStatement ps = null;
int re=0;
con=Util.getCon();
try {
con.setAutoCommit(false);
ps = con.prepareStatement("insert into userr(name,money) values(?,?)");
ps.setInt(1,user.getName());
ps.setInt(2, user.getMoney());
re = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(re>0){
try {
con.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
try {
con.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Util.close(ps,con);
return re;
}
}
用单元测试测试 方法:
package com.etc.test;
import java.util.List;
import org.junit.Test;
import com.ect.daoimpl.UserDaoImpl;
import com.ect.entity.UserEntity;
import com.etc.dao.IUserDao;
public class testMain {
@Test
public void testSelect(){
UserDaoImpl userImpl = new UserDaoImpl();
List<UserEntity> userlist = userImpl.selectAll();
for(UserEntity u:userlist){
System.out.println("name:"+u.getName()+":money:"+u.getMoney());
}
}
@Test
public void testInsert(){
UserDaoImpl userImpl = new UserDaoImpl();
UserEntity user = new UserEntity();
user.setName(100);
user.setMoney(123456);
int re = userImpl.insertItem(user);
if(re>0){
System.out.println("insert success");
}else{
System.out.println("insert faild");
}
}
}
调用存储过程和函数的代码:
package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class testProcedure {
/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;//连接数据库类
CallableStatement cs = null; //调用存储过程或者函数的执行容器
ResultSet rs = null; //结果返回集
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//引入oracle 连接驱动包
//加载连接数据库的类
con =DriverManager.getConnection("jdbc:oracle:thin:@172.18.2.248:1521:leoorcl","bruce","bruce");
cs = con.prepareCall("{call mypro(?)}");//调用存储过程,参数为游标
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//设置返回值类型 必须设置类型,此处为cursor 类型
cs.execute();
rs=(ResultSet)cs.getObject(1);//将第一个值返回到ResultSet中
while(rs.next()){
System.out.println(rs.getString("name")); //此处仅是测试
}
/**
* 调 函数
* cs = con.prepareCall("{?=call myfunc()}");//调用无参的函数
* cs.registerOutParameter(1, oracle.jdbc.OracleTypes.INTERGER);//函数返回值类型
* cs.execute(); //执行语句
* int re = cs.setInt(1);//获取返回值
* System.out.println(re);
*/
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(con==null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 数据库中procedure
* create or replace procedure mypro(myre out mypack.mycur) is
begin
open myre for select * from userr;
end mypro;
数据库中package
create or replace package mypack is
type mycur is ref cursor;
end mypack;
*/
}
package com.etc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Util {
static {//静态代码块 引入oracle 连接驱动包
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getCon(){ //定义一个静态方法与数据库连接
Connection con=null;
try {
con =DriverManager.getConnection("jdbc:oracle:thin:@172.18.2.248:1521:leoorcl","bruce","bruce");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
public static void close(ResultSet rs,Statement st,Connection con){//定义一个静态方法关闭对应的操作
if(rs == null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st == null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con == null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void close(PreparedStatement ps,Connection con){
if(ps == null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con == null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
数据封装类:
package com.ect.entity;
public class UserEntity {
private int name;
private int money;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
定义一个借口,里面是操作数据库的方法:
package com.etc.dao;
import java.util.List;
import com.ect.entity.UserEntity;
public interface IUserDao { //定义一个userdao 结果
public List<UserEntity> selectAll();//查询数据,返回值为数据封装类型的list
public int insertItem(UserEntity user);//插入数据
}
定义一个类继承接口:
package com.ect.daoimpl;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ect.entity.UserEntity;
import com.etc.dao.IUserDao;
import com.etc.util.Util;
public class UserDaoImpl implements IUserDao { //继承userdao借口,重写方法
@Override
public List<UserEntity> selectAll() {
List<UserEntity> list = new ArrayList<UserEntity>();
Connection con=null;
Statement st = null;
ResultSet rs =null;
con=Util.getCon();
try {
st= con.createStatement(); //创建一个执行语句
rs = st.executeQuery("select * from userr");
while(rs.next()){
UserEntity user = new UserEntity();
user.setName(rs.getInt("name"));
user.setMoney(rs.getInt("money"));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Util.close(rs, st, con);
return list;
}
public int insertItem(UserEntity user) {
Connection con=null;
PreparedStatement ps = null;
int re=0;
con=Util.getCon();
try {
con.setAutoCommit(false);
ps = con.prepareStatement("insert into userr(name,money) values(?,?)");
ps.setInt(1,user.getName());
ps.setInt(2, user.getMoney());
re = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(re>0){
try {
con.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
try {
con.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Util.close(ps,con);
return re;
}
}
用单元测试测试 方法:
package com.etc.test;
import java.util.List;
import org.junit.Test;
import com.ect.daoimpl.UserDaoImpl;
import com.ect.entity.UserEntity;
import com.etc.dao.IUserDao;
public class testMain {
@Test
public void testSelect(){
UserDaoImpl userImpl = new UserDaoImpl();
List<UserEntity> userlist = userImpl.selectAll();
for(UserEntity u:userlist){
System.out.println("name:"+u.getName()+":money:"+u.getMoney());
}
}
@Test
public void testInsert(){
UserDaoImpl userImpl = new UserDaoImpl();
UserEntity user = new UserEntity();
user.setName(100);
user.setMoney(123456);
int re = userImpl.insertItem(user);
if(re>0){
System.out.println("insert success");
}else{
System.out.println("insert faild");
}
}
}
调用存储过程和函数的代码:
package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class testProcedure {
/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;//连接数据库类
CallableStatement cs = null; //调用存储过程或者函数的执行容器
ResultSet rs = null; //结果返回集
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//引入oracle 连接驱动包
//加载连接数据库的类
con =DriverManager.getConnection("jdbc:oracle:thin:@172.18.2.248:1521:leoorcl","bruce","bruce");
cs = con.prepareCall("{call mypro(?)}");//调用存储过程,参数为游标
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//设置返回值类型 必须设置类型,此处为cursor 类型
cs.execute();
rs=(ResultSet)cs.getObject(1);//将第一个值返回到ResultSet中
while(rs.next()){
System.out.println(rs.getString("name")); //此处仅是测试
}
/**
* 调 函数
* cs = con.prepareCall("{?=call myfunc()}");//调用无参的函数
* cs.registerOutParameter(1, oracle.jdbc.OracleTypes.INTERGER);//函数返回值类型
* cs.execute(); //执行语句
* int re = cs.setInt(1);//获取返回值
* System.out.println(re);
*/
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(con==null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 数据库中procedure
* create or replace procedure mypro(myre out mypack.mycur) is
begin
open myre for select * from userr;
end mypro;
数据库中package
create or replace package mypack is
type mycur is ref cursor;
end mypack;
*/
}
相关文章推荐
- 【传智播客郑州校区】Java,PL/SQL调用 ORACLE存储函数以及存储过程
- Java学习笔记之数据库(触发器、事物、索引、投影和除、视图、存储过程和函数 )含各种链)___ 一直补充
- java中使用jdbc和mybatis调用数据库中的存储过程和函数
- Java中调用数据库的存储过程存储函数和包体
- Oracle存储过程、存储函数以及Java程序调用存储过程和存储函数
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- java中调用数据库中的存储过程和函数
- java连接Oracle以及调用其中的存储过程与存储函数
- mysql 导入导出数据库以及函数、存储过程
- Java调用oracle存储过程通过游标返回临时表数据
- 【转】java调用存储过程和函数
- java调用存储过程和函数
- C#中对数据库的基本操作(增删改以及调用存储过程)
- java下实现调用oracle的存储过程和函数
- mysql 导入导出数据库以及函数、存储过程
- C#中对数据库的基本操作(增删改以及调用存储过程)
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
- java的JTable组件显示mysql数据库表中的数据以及将JTable表格中的数据存储到数据库中
- 数据库之存储过程创建表以及for循环插入数据
- java 代码初始化数据库表结构,存储过程和函数的方法