Jdbc多数据源动态切换项目

Jdbc多数据源动态切换项目,第1张

如何实现多数据源动态切换!

最近接到一个监控数据库资源情况的小项目。需要监控多个数据库的长时间耗时的SQL,并发出短信预警提醒。

技术实现思路:

1、通过配置设置一个主数据库,通过主数据库读取需要监控的数据库的地址,账号密码,驱动类型,需要执行的SQL,以及查询结果字段,短信模板等。

2、使用jdbc模板实现,动态数据源的配置及切换。

3、短信内容实现动态替换,模板引擎替换

4、动态SQL,根据执行类型字段,支持增删改查的SQL

5、可以根据插入的SQL的链路串起来SQL执行顺序。前边的SQL也可以动态生成后续需要动态执行的SQL,动态插入到执行SQL列表中。

今天先把思路设计出来,后续再上实现的代码。

一般的话,一个数据库连接用完之后是要关闭的。

如果是一个项目的话一般使用数据库连接池,如果有多个数据库的话最好是建立多个连接池,这样的话,在系统启动时,一次加载一定数量的连接对象,用完之后放回去。

如果你仅仅需要两个数据库连接对象的话,不如分别创建两个静态全局变量来保存两个数据库的连接对象。

//此类为连接数据库并进行数据库的 *** 作

import java.sql.Connection

import java.sql.DriverManager

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Statement

public class Conn {

private static Connection conn = null

private static Statement st = null

private static ResultSet rs = null

//建立数据库的连接

public Conn(){

String url = "jdbc:sqlserver://localhost:1433databaseName=ZYGX"

String user = "sa"

String password = "123"

try {

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

conn = DriverManager.getConnection(url, user, password)

st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)

} catch (ClassNotFoundException e) {

e.printStackTrace()

} catch (SQLException e) {

e.printStackTrace()

}

}

// 通过不同 的sql语句,得到相应Resultset结果集

public ResultSet getRs(String sql){

try{

rs= st.executeQuery(sql)

}catch(SQLException e){

e.printStackTrace()

}

return rs

}

// 根据不同的sql语句,执行数据库的更新 *** 作

public int updata(String sql){

int num=0

try{

num = st.executeUpdate(sql)

}catch(SQLException e){

e.printStackTrace()

}

return num

}

// 关闭数据库连接相应的资源

public void close(){

try{

if(rs!=null){

rs.close()

rs = null

}

if(st!=null){

st.close()

st = null

}

if(conn!=null){

conn.close()

conn = null

}

}catch(SQLException e){

e.printStackTrace()

}

}

}

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

//可以对button里添加动作按钮:

final JButton button = new JButton()

button.addActionListener(new ActionListener() {

public void actionPerformed(final ActionEvent e) {

Conn conn =new Conn()

String sql1="select * from aa where name='"+name+"' "//按name值查找

ResultSet rs = conn.getRs(sql1)

try {

while(rs.next()){

int n=rs.getString("type")

}

} catch (SQLException e) {

e.printStackTrace()

}

String name=textField.getText()

String sql="update aa set tittle='"+name+"' "//从aa表将title字段的值改成textField里的name值

String sql2 ="delete from aa where name='"+name+"'"//从aa表将按取得name的值删除该行数据

String sql3 = "insert into aa (name,uname) values ('"+name+"','"')"//将name,uname值新增到aa表

if(conn.update(sql)==1){

System.out.print("修改成功")

}

if(conn.update(sql2)==1){

System.out.print("删除成功")

}

if(conn.update(sql3)==1){

System.out.print("新增成功")

}

}

})


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9837361.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存