|
一个java调用数据库的问题
各位:
最近在做论坛方面的东西,我们的框架是使用struts2+hibernate+spring 数据库采用mysql集群,目前比较郁闷的是多数据库环境下,如何保证事务的完整性问题,比如 test1数据库下有一个表user1,test2数据库下有一个表user2,我想同时往这两个表中插入数据,可能出现user1中插入成功,而user2中插入不成功的现象,请问,我应该怎么做才能保证事务的完整性,顺便说下,我们使用hibernate与数据库交互。
谢谢! |
|
关于JAVA调用数据库的代码!
[color=red][b]此回复于2008-10-22 09:13被 [url=http://bbs.51cto.com/profile-uid-24207.html]ribut9225[/url] 评为最佳答案[/b][/color]
package mulresult;
import java.sql.*;
public class MulResult {
public MulResult() {
}
/**
* @param args
*/
public static void main(String[] args) {
MulResult mulresult = new MulResult();
String driver= "sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:mydata";
Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
String query,str="";
boolean flag;
int rcount = -1;
try{
Class.forName(driver);
conn = DriverManager.getConnection(url, "", "");
System.out.println("数据库连接成功!");
query = "{?=call dbo.P_getresult(?,?)}";
//query = "select * from t_test";
cs = conn.prepareCall(query);
cs.setString(2, "test");
//procstatement.registerOutParameter(1, Types.SMALLINT);
cs.registerOutParameter(1, java.sql.Types.INTEGER);
cs.registerOutParameter(3, java.sql.Types.VARCHAR);
//procstatement.setString(3, "");
//procstatement.execute();
//rs = cs.executeQuery();
flag = cs.execute();
if (flag){
System.out.println("执行结果是true");
}
else{
System.out.println("执行结果是false");
}
str = cs.getString(3);
System.out.println("输出参数是:"+str);
System.out.println("返回执行结果是:"+cs.getInt(1));
do {
rcount = cs.getUpdateCount();
if (rcount != -1){
System.out.println("更新的行数是:"+rcount);
cs.getMoreResults();
continue;
}
System.out.println("OK");
rs = cs.getResultSet();
if (rs != null){
while (rs.next()){
for (int i = 1;i<=rs.getMetaData().getColumnCount();i++){
System.out.print(" 第"+i+"字段的内容是:"+rs.getString(i));
}
System.out.println();
}
cs.getMoreResults();
continue;
}
} while (!(rs==null && rcount == -1));
//System.out.println("返回值是:"+procstatement.getInt(1));
/*
rs = procstatement.executeQuery();
Statement statement = conn.createStatement();
rs = statement.executeQuery(query);
*/
/*
while (rs.next()){
System.out.print(" 字段1内容是:"+rs.getString("a"));
System.out.print(" 字段2内容是:"+rs.getString("b"));
System.out.println();
}
/*
rs.close();
procstatement.close();
//statement.close();
conn.close();
*/
}catch (java.lang.ClassNotFoundException e){
System.out.println("1");
System.out.print(e.getMessage());
}catch (Exception e){
System.out.println("2");
System.out.print(e.getMessage());
}finally{
try{
if (rs != null){
rs.close();
}
if (cs != null){
cs.close();
}
if (conn != null){
conn.close();
}
rs = null;
cs = null;
conn = null;
}catch(Exception e){
System.out.print(e.getMessage());
}
}
}
} |
|
一个jsp页面同时向两个表插入数据,其中有一个表要检查重复,如果重复就更新,不重复就插入一条新的记录,向一个表插入数据已经成功了,但是如何检查另一个表中数据是否重复,我是刚学jsp,如果问题很幼稚,请大家谅解,可能是我把问题说的复杂了!!!请多指教!!!先谢谢了!
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
还有请解释一下括号里的参数是什么意思,我查了文档了,但是e文不好,不是很明白啊,请指教!!!
-----------------------------------------
先回答第二个问题:
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet.TYPE_SCROLL_SENSITIVE: 返回结果rs中的游标移动方式
这个参数有3种:ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
ResultSet.CONCUR_UPDATABLE:返回结果rs中的记录是否可更改
这个参数有2种:ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
前面问题:
插第二个表的时候,先执行sql="select count(*) from table where 条件"(用executeQuery(sql);),返回>说明重复,再执行sql="updata table set ... where 条件"(用executeUpdata(sql);); 返回0说明无记录,执行sql="insert into table ..." 用executeUpdata(sql);); |
|
回复 #2 redking 的帖子
楼上说的问题似乎与我的提问有些出入,再次强调下,我使用的是hibernate做数据库操作,而且是多个数据库!感谢您的热情帮助. |
| wubin012345 | | 2008-10-14 13:21 |
|
| 学习 |
| cuiyingfeng | | 2008-10-15 00:17 |
|
| 据说spring的jta事务可以支持跨数据库的事务配置,你查一下相关资料吧,我没用过 |
| hui_liang168 | | 2008-10-15 01:15 |
|
| 不会.进来偷师... |
|
求助:JAVA标签问题
[color=Orange][size=5]public class E
{
public static void main(String args[])
{
int a[]={6,2,0,5};
int temp;
[size=6]①[/size]
for(int i=0;i<3;i++)
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
}
for(int i=0;i<3;i++)
if( a[i]>a[i+1])
[size=6] ②[/size]
for(int i=0;i<4;i++)
{
System.out.println(a[i]);
}
}
}[/size][/color]
[size=6]请问,在这个JAVA程序中如何使用标签?
也就是如何在①②处添加标签和continue语句实现使程序转回到①处?
谢谢!!!![/size]
[[i] 本帖最后由 JxSuTHin 于 2008-10-15 22:36 编辑 [/i]] |
|
这个需要对hibernate事务机制和SPRING的AOP机制进行详细了解,通过SPRING的AOP来管理事务,可以实现你需要的功能。
[[i] 本帖最后由 netgod 于 2008-10-27 11:00 编辑 [/i]] |
相关文章: 关于对象的属性和行为里一段代码,请大家帮忙 Java初学者需掌握的30个基本概念 分享JAVA程序设计视频教程 怎样自定义lookandfeel JSP开发一个简单的模拟购物系统
Powered by 51CTO.COM
|