在数据库中将数学方程与JAVA相关联以进行运行时处理

时间:2013-04-09 23:54:30

标签: java database type-conversion

我目前正在运行一个学生项目,我用java接收物理传感器值。

要转换传感器值(从一个物理暗淡到另一个物理暗淡),每个传感器都有一个特定的输入数据类型(8位,16位,双倍等)和数据转换的数学方程式。此配置应存储在数据库中(直接或链接到脚本)

您如何推荐实施此功能?

转换示例: Sensor0发送其值,应用程序应在数据库中查看Sensor0的传感器值必须如何转换。它获取转换方程并转换该值。 (例如,输出值使用:output_val = (input_val^2) * pi / (2*inputval))

计算

以前的数学方程式应以某种方式存储为各种传感器的数据库条目或脚本定义,并应在运行时进行处理。

我的测试系统是带有java运行时和mysql服务器的debian x86计算机。

1 个答案:

答案 0 :(得分:0)

使用Calculation方法创建calculate抽象类,然后为每个传感器创建一个继承类,例如: Input_1 extends Calculation。然后序列化Input_1,例如使用Jackson,并将序列化实例存储在数据库中。当您需要执行计算时,请读入序列化实例,对其进行反序列化,然后运行其calculate方法。

作为替代方法,创建一个执行所有必要输入计算的类,然后根据需要对其进行序列化和反序列化。无论哪个最适合您的数据库。

序列化和反序列化类的最简单方法是使用默认的Java序列化器,就像这样。

public abstract class Calculation {
    public double conversion(double d);
}

public class Sensor_34 extends Calculation implements Serializable {
    public double conversion(double d) {
        // conversion code
    }
}

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
Sensor_34 sensor34 = new Sensor_34();
objectOut.writeObject(sensor34);
objectOut.close();
byte[] saveThisValue = byteOut.toByteArray(); // save the byte[] to the database

// ***

byte[] input = Database.read(); // read the byte[] back from the database
ByteArrayInputStream byteIn = new ByteArrayInputStream(input);
ObjectInputStream objectIn = new ObjectInputSteam(byteIn);
Calculation calculation = (Calculation)objectIn.readObject();
// Now use the calculation object's "conversion" method to perform the conversion

总而言之,将Sensor_34对象序列化为字节数组并将其保存到数据库中,然后读回字节数组并将其转换回Sensor_34对象。