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

mysql:13103

From: TOMTOM <TOMTOM <tomf1@xxxxxxxxxx>>
Date: Mon, 19 Jun 2006 14:21:07 +0900
Subject: [mysql 13103] Re: : 排他制御????


こんにちは、池田さん、

返信ありがとうございます。

いろいろ、試してみたのですが、
lock tablesが、期待したように、動作するみたいです。
ありがとうございました。


On Mon, 19 Jun 2006 09:46:49 +0900
Tetsuro IKEDA <te.ikeda@xxxxxxxxxx> wrote:

> 池田です。
> 
> > これって、排他制御というのですか。???
> 
> 概ね合っていると思います。
> 
> 以下のコードではINSERT文同士をぶつけようとしていますよね。
> 
> 従ってInnoDBの場合なら、接続を確立した後に分離レベルを
> SERIALIZABLEに変更するとかどうでしょう。
> 
> con = DriverManager.getConnection(url,user,pass);
> con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
> 
> あるいはMyISAMの場合などですが、テーブルロックを使うとか。
> 
> stat.executeUpdate("LOCK TABLES ff WRITE");
> for(int i =0;i<100;i++){
>    ・・・処理・・・
> }
> stat.executeUpdate("UNLOCK TABLES");
> 
> いろいろ動かしながらイメージをつかんでいただければ・・・。
> 
> TOMTOM wrote:
> > こんにちは、
> > 教えて欲しいことがあるのですが、
> > 例えば、二台のパソコンから、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
> > --------
> > --------
> > 
> > よろしくお願いいたします。
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> 
> 
> -- 
> Tetsuro IKEDA
> Sumisho Computer Systems Corp.
> Open Source System Div.
> te.ikeda@xxxxxxxxxx
> TEL +81-3-5166-2420
> FAX +81-3-5166-1189

-- 
溝井 友晴 <tomf1@xxxxxxxxxx>


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

     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: : 排他制御????