对于Oracle数据库表的任何更改(更新,插入,删除),我都需要一些侦听器。
问题:通过对表进行一次更新,我得到了很多检测。
我认为它的oracle缓存等
是否有可能仅检测到真正的变化?
我的代码:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import oracle.jdbc.OracleStatement;
import oracle.jdbc.dcn.DatabaseChangeEvent;
import oracle.jdbc.dcn.DatabaseChangeListener;
import oracle.jdbc.dcn.DatabaseChangeRegistration;
public class OracleDCN {
static final String USERNAME = "scott";
static final String PASSWORD = "tiger";
static String URL = "jdbc:oracle:thin:@localhost:1521:stingdev";
public static void main(String[] args) {
OracleDCN oracleDCN = new OracleDCN();
try {
oracleDCN.run();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void run() throws Exception{
OracleConnection conn = connect();
Properties prop = new Properties();
prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
try{
dcr.addListener(new DatabaseChangeListener() {
public void onDatabaseChangeNotification(DatabaseChangeEvent dce) {
System.out.println("Changed row id : "+dce.getTableChangeDescription()[0].getRowChangeDescription()[0].getRowid().stringValue());
}
});
Statement stmt = conn.createStatement();
((OracleStatement) stmt).setDatabaseChangeRegistration(dcr);
ResultSet rs = stmt.executeQuery("select * from EXAMPLE where ID=1");
while (rs.next()) {
}
rs.close();
stmt.close();
}catch(SQLException ex){
if (conn != null)
{
conn.unregisterDatabaseChangeNotification(dcr);
conn.close();
}
throw ex;
}
}
OracleConnection connect() throws SQLException {
OracleDriver dr = new OracleDriver();
Properties prop = new Properties();
prop.setProperty("user", OracleDCN.USERNAME);
prop.setProperty("password", OracleDCN.PASSWORD);
return (OracleConnection) dr.connect(OracleDCN.URL, prop);
}
}
输出:
Changed row id : AAAFSzAAAAAAAG8AAA
Changed row id : AAAFSzAAAAAAAG8AAA
Changed row id : AAAFSzAAAAAAAG8AAA
Changed row id : AAAFSzAAAAAAAG8AAA
问题是我多次注册到数据库。解决方案是在注册之前检查注册用户是否有更改事件。
我通过以下查询进行了检查:
select TABLE_NAME
from USER_CHANGE_NOTIFICATION_REGS
当用户是管理员角色时,如何更改数据库连接?管理数据库包含其他用户不能访问的信息,并且要求数据库必须位于自己的服务器上。我目前有单独的管理员连接配置。 我想,没有硬编码是在应用中,所以如何可以拉威尔做开关时,必要的?谢谢你的帮助。
问题内容: 我有一个SQL Server数据库,当在表中插入时,我想通知android应用程序。 例如,当收到订单时,我将其插入到SQL Server数据库中。我还希望用户在我的应用中收到有关订单的通知。该应用程序始终处于打开状态。我使用Web服务与数据库联系。 我不想每10秒钟左右请求一次表格。还有其他办法吗? 问题答案: 您可以使用Google Cloud消息服务,在此处了解如何设置服务器。
如何更改mysql数据库密码?
问题内容: 我正在建立一个自助餐厅管理系统,其中有两种类型的用户;客户和柜台所有者。 对于自助餐厅中提供的每道菜,都有一个与之相关的独特的dish.id。 到现在为止,我有一个类似圆顶的东西,例如学生向带有URL的POST请求发送一个带有菜品,标识和计数器编号的POST请求,该URL更新“ orders table”(以PK作为ID)。准备好菜品后,柜台所有者按“已废除” ”按钮。 在这一点上,我
我有以下代码。我想知道修改后的数据帧是否可以从0,1,2开始......等等,就像熊猫上的常规索引一样。 df2现在在哪- 如果我想访问df2在一些常规索引约定从0... n,我不能用这种方法。还有其他方法可以做到吗? 提前感谢。