我正在尝试实现一个可以识别数据库更改通知(Oracle)的事件侦听器。根据参考网站,它说当EXAMPLE表中发生变化时,事件将触发并打印ROW_ID。我希望这个项目运行,它应该给我一条消息“给我一些东西!” 如果我手动在数据库中插入/更新数据。但是,据我了解,该代码无论如何都会终止,因为没有可以被事件中断的无限循环。如果我错了,请纠正我。
附加问题]
通过将OracleConnection.DCN_NOTIFY_ROWIDS设置为 true,它将通知每个事件,包括插入、更新、删除。我对么?我对“数据库更改事件将包括行级详细信息,例如操作类型和 ROWID”的含义感到困惑
我的代码:
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 DBTest {
static final String USERNAME = "username";
static final String PASSWORD = "password";
static String URL = "jdbc:oracle:thin:@url:port/name";
public static void main(String[] args) {
DBTest oracleDCN = new DBTest();
try {
oracleDCN.run();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void …Run Code Online (Sandbox Code Playgroud) 我想在Google Compute Engine(GCE)上的CoreOS上由Kubernetes管理的Docker容器上运行Aerospike集群.但由于GCE不允许组播,我必须使用此处所述的Mesh心跳,必须通过指定所有节点的IP地址和端口来设置; 它似乎对我来说太不灵活了.
Kubernetes/CoreOS/GCE上的Aerospike集群是否有任何推荐的云配置设置,并保留了集群的灵活性?
要求:对于给定的命名曲线,请发送尽可能少的数据,以便接收方可以构造EC私钥。
我目前在Android上使用BouncyCastle / SpongyCastle。这是我到目前为止所了解的。
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp112r2");
keyGen.initialize(ecGenParameterSpec, new SecureRandom());
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
// privateKey.getEncoded() -> gives DER encoded private key. I can construct PrivateKey from that easily
byte[] derEncodedPrivateKeyBytes = privateKey.getEncoded(); // byteArray length-> 80
KeyFactory kf = KeyFactory.getInstance("EC");
PrivateKey key = kf.generatePrivate(new PKCS8EncodedKeySpec(derEncodedPrivateKeyBytes));
Run Code Online (Sandbox Code Playgroud)
现在,使用Bouncy / Spongy城堡,我可以获得私钥的实际点,而derEncoding中没有任何其他信息。
ECPrivateKeyParameters param = (ECPrivateKeyParameters) ECUtil.generatePrivateKeyParameter(privateKey);
int lenghtOfKey = param.getD().toByteArray().length; // length - 14
Run Code Online (Sandbox Code Playgroud)
问:仅通过使用点D(privateKeyParam.getD())和曲线名称,如何才能重构PrivateKey对象?使用曲线名称,我可以获得ECCurveParameters。
编辑:我可以ECPrivateKeyParameters …
给定一个Future[Seq[Widget]],Widget包含一个amount : Int属性,我想返回一个Seq[Widget]但仅限于那些Widget数量值大于100的s.我相信该for { if … } yield { }构造将给我我想要的但不确定如何过滤序列.我有:
val myWidgetFuture : Future[Seq[Widget]] = ...
for {
widgetSeq <- myWidgetFuture
if (??? amount > 100) <— what to put here?
} yield {
widgetSeq
}
Run Code Online (Sandbox Code Playgroud)
如果有一种干净的非收益方式,这对我也有用.
说,我有一个带有值的数组,(1, 2, 3)另一个有(4, 5, 6)。如何获得带有值的结果数组(1, 2, 3, 4, 5, 6)?
我尝试使用++,但这不起作用。例如,这就是我在命令外壳中得到的。
scala> val x = Array((1, 2, 3))
x: Array[(Int, Int, Int)] = Array((1,2,3))
scala> val y = Array((4, 5, 6))
y: Array[(Int, Int, Int)] = Array((4,5,6))
scala> val z = x ++ y
z: Array[(Int, Int, Int)] = Array((1,2,3), (4,5,6))
Run Code Online (Sandbox Code Playgroud)
而我要Array(1, 2, 3, 4, 5, 6)。
编辑
我实际上是在使用元组数组,这很糟糕。Array应该被声明为Array(1, 2, 3)not Array((1, 2, 3))。
我是Scala的新手,我写了一段代码,将员工档案(empId,姓名,年龄,薪水,部门)作为输入,打印出部门和部门的总薪水.
这是一个新手代码.如何缩短代码?请帮忙
码:
object UsingCollectionMaps {
def main(a: Array[String]) {
val filename = "Employee.txt"
var map = collection.mutable.Map[String,Long]()
var sal: Long = 0
for (line <- Source.fromFile(filename).getLines()) {
val fields = line.split(",")
if (map.contains(fields(4))) {
map.put(fields(4), (map(fields(4)) + fields(3).toLong))
} else {
map.put(fields(4), fields(3).toLong)
}
}
println(map)
}
}
Run Code Online (Sandbox Code Playgroud) 我是一名新的java程序员,我正在编写一个程序,为3台打印机设置3个型号.如果用户输入了错误的值,我希望它继续向用户询问型号.我得到了它的工作,但只有当用户的第一个值在3个打印机之一的数字之间.如果第一个值不是可能值之一而第二个输入是,它仍然会重复循环.
package printing;
import java.util.Scanner;
public class newClass {
public static void main(String[] args) {
int count = 0;
String machine1 = "546";
String machine2 = "892";
String machine3 = "127";
Scanner s = new Scanner(System.in);
System.out.print("Model Number:");
String modelNumber = s.nextLine();
// increment count if first input value is wrong
if (!s.equals(machine1) || !s.equals(machine2) || !s.equals(machine3))
count++;
// if user inputs right value
while (true) {
if (modelNumber.equals(machine1)) {
System.out.println("Machine 1 is online");
break;
}
if (modelNumber.equals(machine2)) {
System.out.println("Machine …Run Code Online (Sandbox Code Playgroud) java ×3
scala ×3
aerospike ×1
arrays ×1
bouncycastle ×1
do-while ×1
docker ×1
kubernetes ×1
loops ×1
ojdbc ×1
oracle ×1
spongycastle ×1