
最近接到一个监控数据库资源情况的小项目。需要监控多个数据库的长时间耗时的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("新增成功")
}
}
})
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)