"AND" "OR"
Главная Информер Журнал Форум

Недавно мне досталось задание сделать програмку, чтобы она получала автоматически курс доллара ЦБ и складывала его в базу данных.
И вот как я решил эту проблеммку на Яве. Кстати эта программка в настоящий момент встроена в сервер, исходный код которого приведён чуть раньше, и успешно фунциклирует под моим наблюдением :)

  Листинг 1
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
import java.sql.*;

import ConnectManager;

class Terra implements HttpConstants {

  static void onRBC() throws IOException {

	URL homeRBC = null;
	DataInputStream dis = null;
	String full = new String();

	boolean cont2 = false;
	try {
		homeRBC = new URL("http://www.rbc.ru/out/801.csv");
		dis = new DataInputStream(homeRBC.openStream());

		String line = dis.readLine();
		while(line != null) {
			full += line + "\n";
			line = dis.readLine();
		}
		cont2 = true;
	} catch(IOException e) {
		System.out.println("Error for connection to RBC ...");
	}
	if(cont2==true) {
		String cbr = toUnicode(full);
		int ndx = cbr.indexOf("USD OA ?O,");
		full = cbr.substring(ndx);
		full = full.substring(0,31);

		String cbrDate = full.substring(10);
		cbrDate = cbrDate.substring(0,5);
		String cbrValue = full.substring(16);
		cbrValue = cbrValue.substring(0,7);

		System.out.println(cbrDate);
		System.out.println(cbrValue);

		Connection con = ConnectManager.getConnectionToRBC();
		try {
			PreparedStatement logSt1 = con.prepareStatement("UPDATE rbc SET cbrValue = ? WHERE Name = 'USD'");
			logSt1.setString(1, cbrValue);
			int res = logSt1.executeUpdate();
			logSt1.close();
			PreparedStatement logSt2 = con.prepareStatement("UPDATE rbc SET cbrDate = ? WHERE Name = 'USD'");
			logSt2.setString(1, cbrDate);
			res = logSt2.executeUpdate();
			logSt2.close();
			ConnectManager.closeConnection(con);
		} catch (SQLException ex) {
			System.out.println("Error SQL ...");
		}
	}
  }

  public static void main(String[] a) throws Exception {
	onRBC();
  }
}
  Листинг 2
import java.io.*;
import java.util.*;
import java.net.*;
import java.text.*;
import java.sql.*;

public class ConnectManager {

  public static Connection getConnectionToRBC() throws IOException {
       Connection con = null;
       Locale.setDefault(new Locale("ru","RU"));
       try {
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	con = DriverManager.getConnection("jdbc:odbc:rbc", "", "");
       } catch(Exception ex) {
       }
       return con;
  }

  public static void closeConnection(Connection con) throws IOException {
       try {
	con.close();
       } catch (SQLException e) {
       }
  }

  public static String toUnicode(String str) throws IOException {
       try {
	String charset="windows-1251";
	byte[] buf = new byte[str.length()];
	str.getBytes(0, str.length(), buf, 0);
	return new String(buf);
       } catch(Exception e) {
	return "Error toUnicode";
       }
  }
}

Продолжение следует ....