新手问题....在一个项目中,使用JDBC将流媒体市场数据捕获到SQL服务器上,我正在使用来自代理系统的Java检索数据,...什么是最好和唯一的主键可用于SQL数据库..以及它的java等价物。该项目旨在连续6个交易日(144小时)连续捕获外汇市场数据。 - 谢谢。
package packagename;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class QuoteInserter extends DownloaderMarketData {
private static final String jdbcDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String jdbcURL = "jdbc:sqlserver://localhost:1433;databaseName=test;user=sa;password=974974;";
static void quoteInsert(double bid0, double ask0, String time1) {
System.out.println("Program started");
try
{ Class.forName(jdbcDriver).newInstance();
System.out.println("JDBC driver loaded"); }
catch (Exception err)
{ System.err.println("Error loading JDBC driver");
err.printStackTrace(System.err);
System.exit(0); }
Connection databaseConnection= null;
try
{
//Connect to the database
databaseConnection = DriverManager.getConnection(jdbcURL);
System.out.println("Connected to the database");
}
catch (SQLException err)
{
System.err.println("Error connecting to the database");
err.printStackTrace(System.err);
System.exit(0);
}
Date date = new Date();
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy");
SimpleDateFormat dateFormat2 = new SimpleDateFormat("MM");
SimpleDateFormat dateFormat3 = new SimpleDateFormat("dd");
SimpleDateFormat dateFormat4 = new SimpleDateFormat("hh");
SimpleDateFormat dateFormat5 = new SimpleDateFormat("mm");
SimpleDateFormat dateFormat6 = new SimpleDateFormat("ss");
SimpleDateFormat dateFormat7 = new SimpleDateFormat("SSSSSSSSS");
SimpleDateFormat dateFormat8 = new SimpleDateFormat("a");
String year =dateFormat1.format(date);
String month =dateFormat2.format(date);
String day =dateFormat3.format(date);
String hour =dateFormat4.format(date);
String minute =dateFormat5.format(date);
String second =dateFormat6.format(date);
String microsec =dateFormat7.format(date);
String ampm =dateFormat8.format(date);
String bidFromDouble = Double.toString(bid0);
String askFromDouble = Double.toString(ask0);
Random rand = new Random();
int n = rand.nextInt(500000000);
String randomNumber = Integer.toString(n) ;
StringBuilder sb = new StringBuilder(year);
sb.append("-");
sb.append(month);
sb.append("-");
sb.append(day);
sb.append("-");
sb.append(hour);
sb.append("-");
sb.append(minute);
sb.append("-");
sb.append(second);
sb.append("-");
sb.append(microsec);
sb.append("-");
sb.append(ampm);
sb.append("-");
sb.append(bidFromDouble);
sb.append("-");
sb.append(askFromDouble);
sb.append("-");
sb.append(randomNumber);
try
{ Statement sqlStatement = databaseConnection.createStatement();
String commandString="INSERT INTO [dbo].[BidAsk02] (UniqueIdentifier,Hour,Bid1,Ask1) VALUES ('"+sb+"','"+hour+"','"+bid0+"','"+ask0+"')";
//print the command string to the screen
System.out.println("\nCommand string:");
System.out.println(commandString);
//execute the command using the execute method
sqlStatement.execute(commandString);
System.out.println("Closing database connection");
//close the database connection
databaseConnection.close(); }
catch (SQLException err)
{ System.err.println("SQL Error");
err.printStackTrace(System.err);
System.exit(0); }
System.out.println("Program finished");
}
}
答案 0 :(得分:1)
在高吞吐量(银行)系统和SCADA实现中,我已经看到T-SQL的UniqueIdentifier数据类型被堆叠。基本上你会有两个或更多列这个数据类型,基本上是一个GUID。
缺点在于应用程序端,您可能将这些基本上视为一个字符串,然后利用grep来获得更好的性能,如果您必须对它们的集合执行“进行中”操作。
注意:堆叠物是一种非常偏执的方法。连接两个GUID将大大降低重复标识符的可能性。由于用于生成GUID的算法通常基于多种技术,包括当前时间,RNG,硬件标识符和其他因素,因此使用甚至单个GUID字段为高吞吐量系统运行复制已经极不可能。模仿独特性。