怎么在一个项目中连接两个数据库?

作者&投稿:籍珊 (若有异议请与网页底部的电邮联系)
一个项目想同时连接两个数据库。~

用分布式数据同步,mysql提供分布式数据同步功能,spring也很容易配置,详细资料,网上查查,mysql的doc中也提供例子。

相信你这样一系统,肯定用了三层架构的模式,这样的话就好解决了,在数据访问层专一个连接数据库的有参方法。在调用该方法时传递不同数据库名即可,当然,每次在数据库访问层操作后一定要断掉数据连接,对一些实例清空回收,这很重要。
public DatabaseClass(String databaseName )
{
strDbConnection="server=.;uid=sa;pwd=sa;database="+ databaseName;
}
给你一点我以前的代码,或许对你有用。
------------------------------------------------------------------
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.ComponentModel;

namespace Common
{

public class DatabaseClass
{

static String strDbConnection=""; // 保存数据库连接字符串
static bool isCon; // 数据库连接标志
static SqlConnection con; //数据库连接对象
static SqlCommand cmd; //SQL命令对象
private SqlTransaction _sqlTransaction; //事务对象
private bool _isStartTransaction; //事务开启标志

//无参构造
public DatabaseClass()
{
//strDbConnection="server=.;uid=sa;pwd=sa;database=emporiumDB";
strDbConnection="server=.;uid=sa;pwd=sa;database=BankDB";
}

//有参构造(从外部传入连接串)
public DatabaseClass(String ConnectionString)
{
if (ConnectionString != "")
{
strDbConnection = ConnectionString;
con=null;
isCon =false;
}
}

//打开数据库连接,成功返回true
private bool ConnectDb()
{
//若数据库不处于连接状态,则执行连库操作
if (!isCon)
{
try
{
//如果没有连接,就实例化一个新的连接
if (con == null)
{
con = new SqlConnection(strDbConnection);
con.Open();

}

//有SQL命令有无例化对象,没就就实例化一新的。
if (cmd == null)
{
cmd = new SqlCommand();
}
isCon = true;
cmd.Connection = con;
}
catch(Exception e)
{
throw e;
}
}
return true;
}



//执行单向SQL语句,如插入、删除、修改,成功返回true
public bool Execute(string sSql)
{

if (!ConnectDb())
{
throw(new ApplicationException("没有建立数据库连接"));
}

cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = sSql;
try
{
cmd.ExecuteNonQuery();
return true;
}
catch(SqlException e)
{
throw new Exception("执行SQL语句时出现问题"+e.Message );

}
catch(Exception e)
{
throw e;

}
finally
{
Dispose();
}

}


//执行返回int型单值的SQL语句
public int ExecuteScalar(string sql)
{
int count=0;

if (!ConnectDb())
{
throw new Exception("没有建立数据库连接");
}

cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = sql;
try
{
count=(int)cmd.ExecuteScalar();
return count;
}
catch(SqlException e)
{
throw new Exception("执行SQL语句时出现问题"+e.Message );

}
catch(Exception e)
{
throw e;
}
finally
{
Dispose();
}

}

//执行返回字符串类型单值的SQL语句
public string ExecuteString(string sql)
{
string str="";

if (!ConnectDb())
{
throw new Exception("没有建立数据库连接");
}

cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = sql;
try
{
str=(string)cmd.ExecuteScalar();
return str;
}
catch(SqlException e)
{
throw new Exception("执行SQL语句时出现问题"+e.Message );

}
catch(Exception e)
{
throw e;
}
finally
{
Dispose();
}

}

//把tableName表中的数据填充到数据集dataSet中,成功返回true
public bool Select(DataSet dataSet, string tableName, string queryString)
{
//若连接数据库失败则产生异常
if (!ConnectDb())
{
throw new Exception("数据库没有连接。");
}

try
{
//执行SQL语句,并将执行结果填充到DataSet的表中
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = queryString;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(dataSet,tableName);
return true;
}
catch(SqlException e)
{
throw new Exception("数据库错误。"+e.Message );

}
catch(Exception ex)
{
throw ex;
}
finally
{
Dispose();
}

}


// 查询数据库,返回查询结果表,SQL查询语句,成功返回查询结构表,失败返回null
public DataTable Select(String l_sQuery,String l_sTableName )
{
String sql = l_sQuery;
String sTableName = l_sTableName;

//若连接数据库失败则返回空
if (!ConnectDb())
{
throw new Exception ("数据库连接失败");;
}

DataSet cDataSet = new DataSet();
try
{
//执行SQL语句,并将执行结果充到DataSet的表中
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = sql;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(cDataSet,sTableName);
}
catch(SqlException e)
{
throw e;

}
finally
{
Dispose();
}
DataTable tempTable = cDataSet.Tables[sTableName];
cDataSet.Tables.Remove(sTableName);//从集合中移除该DataTable
return tempTable;

}


//开启事务
public void StartTransation()
{
//若连接数据库失败抛出错误
if (!ConnectDb())
{
throw(new ApplicationException("没有建立数据库连接。"));
}

this._isStartTransaction = true;
this._sqlTransaction = con.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = _sqlTransaction;

}


// 当前待处理事务提交,失败全部回滚, 成功提交返回true
public bool Commit()
{
//如果没有开启事务处理功能,不做任何操作,直接返回成功
if (!_isStartTransaction)
{
return true;
}
try
{
_sqlTransaction.Commit();
}
catch(SqlException e)
{
_sqlTransaction.Rollback();
throw e;
}
return true;
}

//调用三个参数存储过程,返回一个表
public DataTable RunProcedure(string procName,string pName1,string pValue1,
string pName2,string pValue2,string pName3,string pValue3)
{
//若连接数据库失败抛出错误
if (!ConnectDb())
{
throw(new ApplicationException("没有建立数据库连接。"));
}
try
{
cmd=new SqlCommand (procName,con);
cmd.CommandType =CommandType.StoredProcedure ;

//创建输入参数
SqlParameter sq1=new SqlParameter(pName1,SqlDbType.Int);
sq1.Direction =ParameterDirection.Input ;
sq1.Value =pValue1;
cmd.Parameters .Add (sq1);

SqlParameter sq2=new SqlParameter(pName2,SqlDbType.VarChar);
sq1.Direction =ParameterDirection.Input ;
sq1.Value =pValue2;
cmd.Parameters .Add (sq2);

SqlParameter sq3=new SqlParameter(pName3,SqlDbType.VarChar);
sq1.Direction =ParameterDirection.Input ;
sq1.Value =pValue3;
cmd.Parameters .Add (sq3);

// //创建输出参数
// SqlParameter spid=new SqlParameter ("@spid",SqlDbType.VarChar,20);
// spid.Direction =ParameterDirection.Output ;
// sqlCmd.Parameters .Add (spid);//
// //创建接收返回值的参数
// SqlParameter sReturn=new SqlParameter ("@RETURN_VALUE",SqlDbType.Int);
// sReturn.Direction =ParameterDirection.ReturnValue ;
// sqlCmd.Parameters .Add (sReturn);

SqlDataAdapter da=new SqlDataAdapter ();
da.SelectCommand=cmd;
DataSet ds1=new DataSet ();
da.Fill (ds1);
return ds1.Tables[0];
}
catch(Exception e)
{
throw e;
}
finally
{
Dispose();
}

}

//调用储过程(存储过程名,参数名,参数值,参数类型)
public DataTable RunProcedure(string procName,string pName,string pValue,SqlDbType type)
{
//若连接数据库失败抛出错误
if (!ConnectDb())
{
throw(new ApplicationException("没有建立数据库连接。"));
}
try
{
cmd=new SqlCommand (procName,con);
cmd.CommandType =CommandType.StoredProcedure ;

//创建输入参数
SqlParameter sq1=new SqlParameter(pName,type);
sq1.Direction =ParameterDirection.Input ;
sq1.Value =pValue;
cmd.Parameters .Add (sq1);

SqlDataAdapter da=new SqlDataAdapter ();
da.SelectCommand=cmd;
DataSet ds1=new DataSet ();
da.Fill (ds1);
return ds1.Tables[0];
}
catch(Exception e)
{
throw e;
}
finally
{
Dispose();
}

}


// 关闭数据库,释放数据库资源,成功返回true
public bool CloseDb()
{
//释放资源
Dispose();
return true;
}


//自定义释放资源,断掉连接。
public virtual void Dispose(bool disposing)
{
if (! disposing)
return;
//如果数据库处于连接状态,则进行断库及释放资源的操作
if (isCon)
{
if (con.State != ConnectionState.Closed )
{
con.Dispose();
con.Close();
cmd = null;
con = null;
_sqlTransaction=null;
isCon = false;
}
}
}

// 除去对象资源.
public void Dispose()
{
//调用带参数的释放资源方法
Dispose(true);

GC.SuppressFinalize(true);
}

}
}

A类是A数据库;B类是B数据库。 A按钮调用A语句查询A数据库,B按钮调用B语句查询B数据库,A的时间里面就去调A连接,B的时间里面就去调B连接


怎么在eclipse中使用数据库连接
1、在新创建的项目中右键单击New Floder。2、我们选择鼠标单击创建一个名为lib的包。3、之后会显示创建完成后的项目目录的页面。4、接下来解压缩下载的mysql jar包并复制.jar文件。5、在项目lib包邮件中选择粘贴粘贴,复制mysql jar包。6、右键单击mysql jar包以选择构建路径 - 添加到构建路径。7、添...

一个java web项目可以链接多个库吗?
当然可以连接多个数据库,只不过你要连接的数据库中要有设计的这些表,数据。然后在项目改一下数据库的端口号,加驱动,就行

在一个STEP7项目中也就是多在一个机架有多个CPU请问和上位画面WINCC怎么...
一个机架只能有一个CPU,而且插槽号是固定的,必须是2.如果是多个CPU与一个上位机通讯的话,可以使用交换机。在wincc的变量管理器里建立多个连接,每个连接的地址对应各自CUP的地址。

创建一个Web项目,配置数据库连接
第一步 创建一个Web项目 配置数据库连接 在我们开始创建数据访问层(DAL)之前 我们首先需要创建一个网站 以及建立一个数据库 我们从创建一个基于文件系统的 网站开始 次序如下 打开文件(File)菜单 选择新的网站 (New Web Site) 系统会显示一个新网站对话框 选择 网站模板(Web Site template) 设置定 ...

Django中一个项目里怎么使用两个数据库
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。1. 修改项目的 settings 配置在settings.py中配置需要连接的多个数据库连接串2. 设置数据库的路由规则方法在settings.py中配置DATABASE_ROUTERS1DATABASE_ROUTERS=[‘Prject.data...

一个java EE项目怎么连接两个mysql 数据库?
你可以用数据库集群来做。用jta控制2个数据源的事务。具体实现要靠自己捉摸了。不是那么容易的事情。而且在这里问,不会得到你满意的答案的。只能提供你能用得到的技术的名字,给个方向。百度知道里面 不会有人手把手教你做的

...建立一个socket链接。并在项目中可以随时调用
只要socket创建成功就能通过tcp或udp协议进行访问了。如何项目启动时创建可以有2种方法:创建一个继承了ServletContextListener接口的类,在contextInitialized方法里建立socket server端 新建一个Servlet,并设置<load-on-startup>0<\/load-on-startup>,在service方法里建立socket server端。

做一个项目,从设计原理图到制PCB的整个流程是什么?
如果应用全局特性名字应该一样,如果是直接连接就不用考虑名字的改变了。如果你应用一个有多个part的封装的时(比如一个有四个放大器,共享powerpin ),所有在放置在原理图中的属于这个封装中的part,必须让他们的电源供电引脚以相同的方式连接。要么都是全局的,要么全都是通过wire连接的。如果一个元件...

如何让两台电脑在同一个域中连接?
1.共享问题:首先 确保你的本地连接属性中,已经添加了 microsoft网络的文件和打印机共享 项目组件。 确保共享的计算机ip地址设置正确。打开 控制面板---管理工具--服务。看一下Computer Browser服务、Server 服务、TCP\/IP NetBIOS Helper服务、Windows Firewall\/Internet Connection Sharing (ICS)服务是否已...

在做一个单片机项目,要用蓝牙模块进行手机通讯,但新买的蓝牙模块能和...
只有一主一从才能通信。如果不是,修改为从机。同时,要注意蓝牙版本 ,如果是2.0,应该支持的手机会比较多,如果是蓝牙4.0,那可能只有苹果手机通信正常,虽然店家说,手机蓝牙4.0,系统安卓4.3以上就行,但我测试过,几乎没有。所以最好用水果测试吧,装一个要求的APP。我后来是用两个蓝牙模块...

金昌市15980463518: 怎么在一个项目中连接两个数据库? -
咎忠强力: A类是A数据库;B类是B数据库. A按钮调用A语句查询A数据库,B按钮调用B语句查询B数据库,A的时间里面就去调A连接,B的时间里面就去调B连接

金昌市15980463518: 一个项目想同时连接两个数据库. -
咎忠强力: 用分布式数据同步,mysql提供分布式数据同步功能,spring也很容易配置,详细资料,网上查查,mysql的doc中也提供例子.

金昌市15980463518: 如何同时连接两个数据库 -
咎忠强力: 这个自己定义一个事务就行了.咱们一般平时开发的时候,可能很少定义事务.经常使用默认的SQLCA,这个SQLCA都是 你连接的主数据库,同样的,你在定义一个transaction,连接的参数,参照SQLCA的参数,把参数都设置成另一个数据库,就可以了.

金昌市15980463518: 如何在一个ASP文件中同时连接两个SQL数据库 -
咎忠强力: 用两个Connection对象去分别连接两个数据库,然后在建立RecordSet对象时分别对应不同的Connection对象即可.

金昌市15980463518: 一个ASP页面怎么连接两个数据库? -
咎忠强力: 完全可以连接两个数据库的,应该不会有什么问题,但不可以对一个数据库两进行同时两次以上的连接.比如我想同时连接一个数据库中的两个表,这样是不可能作到的,只能是先连接一个同连接一个,没有看到你的错误更离谱的了,连接两个...

金昌市15980463518: 一个java工程如何连接两个数据库 -
咎忠强力: 可以的,使用jdbc的链接代码,在你需要的地方建立两个连接即可.每个连接连接到一个数据库.

金昌市15980463518: myeclipse里一个项目怎样关联两个数据库 -
咎忠强力: 用分布式事务管理,

金昌市15980463518: 求助:如何在一个项目中使用多个SQL数据库? -
咎忠强力: 相信你这样一系统,肯定用了三层架构的模式,这样的话就好解决了,在数据访问层专一个连接数据库的有参方法.在调用该方法时传递不同数据库名即可,当然,每次在数据库访问层操作后一定要断掉数据连接,对一些实例清空回收,这很重...

金昌市15980463518: 一个java项目怎么连接两个不同的数据库 -
咎忠强力: 02-- 这是java环境,里有插件其全,javase,javaee,javame都可以,还有你所说的java项目框架直接020202 用他自己集成环境就能生成2.数据库你要是为了省事直接下一个mysql就行了,50多兆,不比 微软的slqserver系列的差 SSH框架中的持久...

金昌市15980463518: 在ASP中如何同时与两个数据库连接.要代码 -
咎忠强力: 建立两个不用的连接对象conn1和conn2,分别用来连接数据库1和数据库2,我写的例子是ACCESS数据库,可以根据你的需要修改为SQL Server的.set conn1=server.CreateObject("adodb.connection") set conn2=server.CreateObject("...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网