我想要完成的任务:我在多个数据库中拥有救护车数据。救护车的GPS在一个数据库中跟踪,在另一个数据库中发送记录,在第三个数据库中发送医疗记录。他们都有一个独特的钥匙,可以引发火灾/电子事故。在这种情况下,我想使用JDBC来使用参数查询两个数据库。我的参数是紧急事件的唯一ID。我想基于该唯一ID完成来自多个数据库源的事件的完整报告。 从下面显示的代码中我可以看到,我传递参数两次 - 每次尝试catch块一次(preStatement.setString(1,“MLC140701045015”);)。
我的目标是拥有一个带有下拉列表的gui。用户选择事件并生成报告。该参数仅从gui中的下拉列表传递一次。
我的问题是:这个参数只能传递一次吗? 我有文科学位,而不是计算机科学学位。你不能对我太过简单化。请在回复中明确说明。
package javaDatabase;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
public class PreparedStatements
{
public static void main(String[] args)
{
// obtain information from dispatch
Connection conn = null;
Statement stmt = null;
try
{
conn = DriverManager
.getConnection
("jdbc:sqlserver://999.99.99.99;database=Incidents;integratedsecurity=false;user=myUser;password=myPassw
ord");
PreparedStatement preStatement = conn
.prepareStatement("SELECT I_EventNumber, I_Address,
I_tTimeDispatch FROM IIncident WHERE I_EventNumber = ?");
// pass a parameter
preStatement.setString(1, "MLC140701045015");
ResultSet rset = preStatement.executeQuery();
// output the results of the dispatch
while (rset.next())
{
String IncidentID = rset.getString("I_EventNumber");
String Address = rset.getString("I_Address");
String dtmIncident = rset.getString("I_tTimeDispatch");
System.out.println(IncidentID + ", " + Address + ", "
+ dtmIncident);
}
// clean up the program and close the connections
} catch (SQLException ex)
{
ex.printStackTrace();
} finally
{
try
{
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException ex)
{
ex.printStackTrace();
}
}
// obtain information from gps database.
Connection avlconn = null;
Statement avlstmt = null;
try
{
avlconn = DriverManager
.getConnection
("jdbc:sqlserver://777.77.77.77;database=gps_tracks;integratedsecurity=false;user=myUser;password=myPass
");
PreparedStatement preStatement = avlconn
.prepareStatement("SELECT RTRIM(AssignedIncident) AS [Mission],
RTRIM(CallSign) AS [Ambulance], RTRIM(UnitStatus) AS [Disposition], DateTimeStamp, Longitude, Latitude
FROM HISTORY_201407 WHERE AssignedIncident = ?");
// pass the same parameter previously. Why must this be done twice?
preStatement.setString(1, "MLC140701045015");
// return a result of the gps tracks
ResultSet rset = preStatement.executeQuery();
while (rset.next())
{
String mission = rset.getString("Mission");
String truck = rset.getString("Ambulance");
String disposition = rset.getString("Disposition");
Date dateTime = rset.getDate("DateTimeStamp");
Double longitude = rset.getDouble("Longitude");
Double latitude = rset.getDouble("Latitude");
System.out.println(mission + ", " + truck + ", " + disposition
+ ", " + dateTime + ", " + longitude + ", " + latitude);
}
// clean up the program and close out the connections
} catch (SQLException ex)
{
ex.printStackTrace();
} finally
{
try
{
if (avlstmt != null)
avlstmt.close();
if (avlconn != null)
avlconn.close();
} catch (SQLException ex)
{
ex.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
我认为最简单的方法是从一个数据库到另一个数据库设置链接服务器。这将允许您对两个DB中的表执行SQL,同时只连接到一个。以下是有关如何执行此操作的一些详细信息。
Selecting data from two different servers in SQL Server
完成后,可以执行一个查询,该查询执行两个表的SQL JOIN(一个本地连接到您连接的数据库,另一个连接到链接服务器数据库),并使用单个查询从两个表中提取结果结果集。这是一个关于SQL连接的非常好的教程。 http://www.w3schools.com/sql/sql_join.asp
不确定您的数据的具体细节,但我认为您会想要使用INNER JOIN。