2015年11月19日木曜日

Linux上でJavaからMySQL接続

Linux上でJavaからMySQL接続を実施

1. connectorのダウンロード
まずhttp://dev.mysql.com/downloads/connector/よりConnector/J
をダウンロード、展開する。
その中のmysql-connector-java-5.1.37-bin.jarをサーバにFTP等でアップロード。

2. クラスパスの設定
$ vi .bashrc
export CLASSPATH=/usr/local/lib/mysql-connector-java-5.1.37-bin.jar:/usr/local/lib/lpsolve55j.jar:$CLASSPATH
前回の設定分に赤の部分を追加しておく
$ source .bashrc

3. MySQL接続クラスをつける
class MySQL {

        // JDBCドライバの登録
        String driver;
        // データベースの指定
        String server, dbname, url, user, password;
        Connection con;
        Statement stmt;
        ResultSet rs;

        public MySQL() {
                this.driver = "org.gjt.mm.mysql.Driver";
                this.server = "localhost";
                this.dbname = "naisyo";
                this.url = "jdbc:mysql://" + server + "/" + dbname + "?useUnicode=true&characterEncoding=UTF-8";                      this.user = "naisyo";
                this.password = "naisyo";
                try {
                        this.con = DriverManager.getConnection(url, user, password);
                        this.stmt = con.createStatement ();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block                                                     
                        e.printStackTrace();
                }                                                                                                     
                try {
                        Class.forName (driver);                                                                       
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }                                                                                                             
        public void close(){
                try {
                        rs.close();
                        stmt.close();
                        con.close();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

        public ResultSet selectAll(){

                String sql = "SELECT * FROM naisyo";
                ResultSet rs = null;
                try {
                        rs = stmt.executeQuery (sql);
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }  //try catchで囲む
                return rs;
        }

}

main関数から呼び出し
       MySQL mysql = new MySQL();
        ResultSet rs = mysql.selectAll();

        try {
                while(rs.next()){
                        int id = rs.getInt("id");
                        String name = rs.getString("name");
                        System.out.println("ID:" + id);
                        System.out.println("Name:" + name);
                }
        } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
これで表示されれば、データベースとの接続&情報取り出しOK

2015年11月18日水曜日

lp_solveでJavaプログラム実行(配列利用)

lp_solveを利用するときに配列を利用する場合

int constraint[][] = {{-18,-900,370,10},{-74,-230,550,20},{-34,-2090,340,11},{-80,-1410,452,15},{18,900,0,0}};
int object[] = {0,0,370,10};
のように、制約条件と目的関数の係数配列を用意
これをそれぞれ文字列として変数にいれておく

import lpsolve.*;
public class LP {

    public static void main(String[] args) {

        int constraint[][] = {{-18,-900,370,10},{-74,-230,550,20},{-34,-2090,340,11},{-80,-1410,452,15},{18,900,0,0}};
        int object[] = {0,0,370,10};

        try {
            LpSolve solver = LpSolve.makeLp(constraint.length, object.length);//constraints, variables
            solver.setOutputfile("debug");
            String stc = "", sto = "";
            for(int i = 0;i < constraint.length; i++){
                stc = "";
                for(int j = 0; j < constraint[i].length; j++){
                        stc += constraint[i][j];
                        stc += " ";
                }
                if(i == constraint.length -1 )
                        solver.strAddConstraint(stc, LpSolve.EQ,1);
                else
                        solver.strAddConstraint(stc, LpSolve.LE,0);
            }

            for(int i = 0; i < object.length; i++){
                        sto += object[i];
                        sto += " ";
            }
            solver.setMaxim();
            solver.strSetObjFn(sto);
            solver.solve();
            System.out.println("Value of objective function: " + solver.getObjective());
            double var[] = solver.getPtrVariables();
            for(int i = 0; i < var.length; i++){
                System.out.println("var[" + i + "] = " + var[i]);
            }
            solver.deleteLp();
        }
        catch (LpSolveException e) {
            e.printStackTrace();
        }
    }

}

このような形になる。次はDBから値を持ってきて配列にいれて計算を行う。

lp_solveをJavaで実行できるようにする

lp_solveをJavaで実行できるようにする

Javaをインストール
# yum install java

Java用のlp_solveを導入
http://sourceforge.net/projects/lpsolve/files/lpsolve/
から
lp_solve_5.5.2.0_java.zip
lp_solve_5.5.2.0_dev_ux64.tar.gz
をダウンロード。展開後

lp_solve_5.5_java/lib/ux64/liblpsolve55j.so
lp_solve_5.5_java/lib/lpsolve55j.jar
lp_solve_5.5.2.0_dev_ux64/liblpsolve55.so
を/usr/local/libにコピー
# chmod 755 /usr/local/lib/*

ライブラリへの環境変数の設定
ユーザで設定する場合
~]$ vi .bashrc
追加
export CLASSPATH=/usr/local/lib/lpsolve55j.jar:$CLASSPATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

環境変数の適用
~]$ source .bashrc

Javaファイル作成
~]$ vi Demo.java
 [Demo.java] サイトより
import lpsolve.*;

public class Demo {

  public static void main(String[] args) {
    try {
      // Create a problem with 4 variables and 0 constraints
      LpSolve solver = LpSolve.makeLp(0, 4);

      // add constraints
      solver.strAddConstraint("3 2 2 1", LpSolve.LE, 4);
      solver.strAddConstraint("0 4 3 1", LpSolve.GE, 3);

      // set objective function
      solver.strSetObjFn("2 3 -2 3");

      // solve the problem
      solver.solve();

      // print solution
      System.out.println("Value of objective function: " + solver.getObjective());
      double[] var = solver.getPtrVariables();
      for (int i = 0; i < var.length; i++) {
        System.out.println("Value of var[" + i + "] = " + var[i]);
      }

      // delete the problem and free memory
      solver.deleteLp();
    }
    catch (LpSolveException e) {
       e.printStackTrace();
    }
  }

}

~]$ javac Demo.java
~]$ java Demo
で実行できる。



 参考
http://d.hatena.ne.jp/yambi/20090916/1253111261

lp_solveの導入

lp_solveの導入

CentOS6.5にlp_solveをいれる方法
# yum install lpsolve
でインストール

ユーザに切り替えて例題作成
$ vi test.lp
max:370c+10d;
-18a-900b+370c+10d<=0;
-74a-230b+550c+20d<=0;
-34a-2090b+340c+11d<=0;
-80a-1410b+452c+15d<=0;
18a+900b=1;

線形計画法実行
$ lp_solve test.lp

2015年11月5日木曜日

viの文字化けを治す

viで開くと文字化けしている場合があります。
簡単に解消できました。

 vi ~/.vimrc
ファイルがない場合は新規作成

set encoding=utf-8
set fileencodings=iso-2022-jp,sjis,utf-8
を記述する

一度、ログオフしてログインすると反映される。

参考
https://www.softel.co.jp/blogs/tech/archives/2203

2015年11月1日日曜日

閉鎖型待ち行列ネットワークのPHPライブラリ

閉鎖型待ち行列ネットワークのPHPライブラリ

閉鎖型待ち行列ネットワーク全体のJavaプログラムをPHPに変換しました。

JavaからPHPの変換は結構大変。無事出来ました。