Java JDBC同时连接MySQL和Sybase数据库
我试图从SYBASE数据库中检索数据,并将检索到的数据复制到MySQL中的一个表中。我能够分别连接这两个数据库(即使用SYBASE的jTDS驱动程序和MySQL的Jdbc_驱动程序) 现在我想在一个程序中同时连接两个数据库。但是我不知道应该在Java JDBC同时连接MySQL和Sybase数据库,java,mysql,jdbc,sybase,Java,Mysql,Jdbc,Sybase,我试图从SYBASE数据库中检索数据,并将检索到的数据复制到MySQL中的一个表中。我能够分别连接这两个数据库(即使用SYBASE的jTDS驱动程序和MySQL的Jdbc_驱动程序) 现在我想在一个程序中同时连接两个数据库。但是我不知道应该在Class.forName()中编写什么 我使用了Class.forName(JDBC_驱动程序)用于MySQL和Class.forName(“net.sourceforge.jtds.jdbc.Driver”)用于SYBASE Sybase: public
Class.forName()中编写什么
我使用了Class.forName(JDBC_驱动程序)代码>用于MySQL和Class.forName(“net.sourceforge.jtds.jdbc.Driver”)代码>用于SYBASE
Sybase:
public static void main(String[] args) {
String a;
String b;
String c;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:jtds:sybase://10.159.252.29:4100/fmdb","sa","Changeme_123");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("selecttbl_alm_log_2000000000.Csn,"
+ "tbl_alm_log_2000000000.IsCleared,"
+ "tbl_alm_log_2000000000.Id"
+ "From fmdb.dbo.tbl_alm_log_2000000000"
+ "Where IsCleared = 0");
while(rs.next()) {
a = rs.getString(1);
b = rs.getString(2);
c = rs.getString(3);
System.out.println(a+" "+b+" "+c);
}
con.close();
} catch(Exception e) {
System.out.println(e);
}
}
try {
Class.forName(JDBC_DRIVER);
System.out.println("connecting to database");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("connected to database successfully");
System.out.println("creating table in given database");
// stmt = conn.createStatement();
String sql = "CREATE TABLE newtable "
+ "(id INTEGER not NULL, "
+ "first VARCHAR(255), "
+ "PRIMARY KEY ( id ))";
stmt = conn.prepareStatement(sql);
stmt.executeUpdate(sql);
System.out.println("created table in database");
}
MySQL:
public static void main(String[] args) {
String a;
String b;
String c;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:jtds:sybase://10.159.252.29:4100/fmdb","sa","Changeme_123");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("selecttbl_alm_log_2000000000.Csn,"
+ "tbl_alm_log_2000000000.IsCleared,"
+ "tbl_alm_log_2000000000.Id"
+ "From fmdb.dbo.tbl_alm_log_2000000000"
+ "Where IsCleared = 0");
while(rs.next()) {
a = rs.getString(1);
b = rs.getString(2);
c = rs.getString(3);
System.out.println(a+" "+b+" "+c);
}
con.close();
} catch(Exception e) {
System.out.println(e);
}
}
try {
Class.forName(JDBC_DRIVER);
System.out.println("connecting to database");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("connected to database successfully");
System.out.println("creating table in given database");
// stmt = conn.createStatement();
String sql = "CREATE TABLE newtable "
+ "(id INTEGER not NULL, "
+ "first VARCHAR(255), "
+ "PRIMARY KEY ( id ))";
stmt = conn.prepareStatement(sql);
stmt.executeUpdate(sql);
System.out.println("created table in database");
}
这些只是片段。我只是想合并上面的代码。
请告诉我这是否可行,并分享一些见解。建议将复杂任务划分为更小和更简单的任务:
1) 创建一个readDB(int startReading,int endReading)方法,返回结果集
2) 创建方法writeDB(ResultSet result)
3) 创建一个createTableDB()方法
p.S.readDB与第一个示例非常接近,必须返回对db的读取,writeDB只需在db内写入,然后createTableDB必须在db上创建表,就像您在第二个示例中编写的一样
伪最终代码,在main中:
createTableDB();
// it's good to make a loop for next part:
ResultSet read1=readDB(0,200);
writeDB(read1);
ResultSet read2=readDB(200,400);
writeDB(read2);
ResultSet read3=readDB(400,....); //to the end of db
writeDB(read3);
这是一个非常简单的解决方案,它并不完美,可以根据您的需要进行修改。可以像这样在一个程序中创建多个连接
public static void main(String[] args) {
try{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con1 = DriverManager.getConnection("jdbc:jtds:sybase://10.159.252.29:4100/fmdb","sa","Changeme_123");
Class.forName(JDBC_DRIVER);
Connection con2 = DriverManager.getConnection(DB_URL, USER, PASS);
///After getting both connections, write your code
String a;
String b;
String c;
Statement stmt= con1.createStatement();
ResultSet rs=stmt.executeQuery("select tbl_alm_log_2000000000.Csn, tbl_alm_log_2000000000.IsCleared, tbl_alm_log_2000000000.Id From fmdb.dbo.tbl_alm_log_2000000000 Where IsCleared = 0");
while(rs.next()) ///If your query result is single row, use if instead of while
{
a = rs.getString(1);
b = rs.getString(2);
c = rs.getString(3);
System.out.println(a+" "+b+" "+c);
}
String sql = "CREATE TABLE newtable " + "(id INTEGER not NULL, " + "first VARCHAR(255), " + "PRIMARY KEY ( id ))";
stmt = con2.prepareStatement(sql);
stmt.executeUpdate(sql);
con1.close();
con2.close();
}catch(Exception e){ System.out.println(e);}
}
}
forName(…)
只是用来强制加载JDBC驱动程序类,所以只需使用它两次。或者干脆把它放在一起,因为从Java6开始,它对于大多数JDBC驱动程序来说都是过时的。我尝试了没有Class.forName()的mysql程序,它给出了一个没有找到合适驱动程序的错误。这是否意味着我安装了较旧版本的java?@prateekk或您使用的是非常旧版本的驱动程序。我将尝试与您联系。泰