[前][次][番号順一覧][スレッド一覧]

mysql:13101

From: TOMTOM <TOMTOM <tomf1@xxxxxxxxxx>>
Date: Mon, 19 Jun 2006 09:27:31 +0900
Subject: [mysql 13101] 排他制御????


こんにちは、
教えて欲しいことがあるのですが、
例えば、二台のパソコンから、mysqlにデータを
追加している時、一方のパソコンが、追加している時は、
他方は、待機して、追加が終わったとき、
待機していた方が、追加更新を始めるようにしたいのです。
これって、排他制御というのですか。???

パソコンが一台しか、無いので、
javaで、スレット処理を利用して、あたかも、二台から、アクセス
しているようなコードにして、実行したのですが、
二つのスレットが交互にアクセスしているみたいで、
どうの様にしたら、期待した、
アクセスになるか、以下のプログラムを
どのように、改造したらいいのか、教えてください。


環境 win xp
      jdk 1.5
      mysql 5.0
      connector 3.1.11

*******************************************
package threadsql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author 
 */
class tsql extends Thread {
    Connection con=null;
    Statement stat = null;
    String data=null;
    
    public tsql(String url,String user,String pass,String data) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(url,user,pass);
            stat = con.createStatement();
            con.setAutoCommit(false);
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        this.data=data;
        
    }

    public void run() {
        String sql = "insert into ff values('"+data+"')";
        for(int i =0;i<100;i++){
            try {
                
                int k = stat.executeUpdate(sql);
                System.out.println(data+"  "+ i);
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        try {
            con.commit();
            stat.close();
            con.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
    }
    
}
public class threadsql {
    
    /** Creates a new instance of threadsql */
    public threadsql() {
        String url="jdbc:mysql://localhost/test";
        String user = "root";
        String pass = "*********";
        String data ="user1";
        tsql t1 = new tsql(url,user,pass,data);

        String url1="jdbc:mysql://prim/test";
        String user1 = "user2";
        String pass1 = "*********";
        String data1 ="user2";
        tsql t2 = new tsql(url1,user1,pass1,data1);
        
        
        t1.start();
        t2.start();

    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new threadsql();
        // TODO code application logic here
    }
    
}

*****************************************************
実行結果、

user1  0
user2  0
user1  1
user2  1
user1  2
user2  2
user1  3
user2  3
--------

これを、以下の様な、実行結果にしたいのです。

user1  0
user1  1
user1  2
user1  3
--------
--------
user2  0
user2  1
user2  2
user2  3
--------
--------

よろしくお願いいたします。






[前][次][番号順一覧][スレッド一覧]

->   13101 2006-06-19 09:27 [TOMTOM <tomf1@xxxxxx] 排他制御????                        
     13102 2006-06-19 09:46 ┗[Tetsuro IKEDA <te.ik]                                       
     13103 2006-06-19 14:21  ┗[TOMTOM <tomf1@xxxxxx] Re: : 排他制御????