MySQL 8系 でのJDBC設定

そろそろ、本番環境のMySQLを8系に上げないといけないと思い、開発環境を8系にして、MyBatisで試してたところ、いきなり最初の connect でエラーが出て使えないので、調べてましたところ、

JDBCの設定記述を変えないといけないことがわかり、無事解決しました。

ここで教えて頂く : https://qiita.com/syoki/items/3d82ef00300868353572

< MyBatis Config UNPOOLED 設定例 >


  <properties>     
    
    <!-- 5.7 -->
    <!--<property name="msdriver" value="com.mysql.jdbc.Driver" />--> 
    <!-- 8 -->
    <property name="msdriver" value="com.mysql.cj.jdbc.Driver" />   
    <!-- 5.7 -->  
    <!--<property name="msurl" value="jdbc:mysql://localhost:3306/dbname?characterEncoding=utf8&amp;autoReconnect=true&amp;useSSL=false" />-->
    <!-- 8 -->
    <property name="msurl" value="jdbc:mysql://localhost/dnksg?characterEncoding=utf8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B9&amp;rewriteBatchedStatements=true" />     
    
    <property name="msusername" value="???????" />     
    <property name="mspassword" value="??????????" />   
    

    
  </properties>

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Java逆引きレシピ 第2版 [ 竹添 直樹 ]
価格:3080円(税込、送料無料) (2023/1/25時点)

Javascriptで曜日

たいていの場合、曜日の出力はサーバー側でMySQLのUDFとか、Javaのメソッドで行ってましたが、最初は曜日が必要なかったのですが、後から必要になり、サーバー側入れ替えが面倒とか、権限がないとかの場合もあるので、調べてたら出来ました。

ここで教えて頂く: https://www.nishishi.com/javascript-tips/get-day-of-the-week.html

コード例

今更ながらアローを使い始める。


    // 日本語曜日関数 //
    let getDofWJ = (dt) => {
      let dtobj = new Date(dt);
      let wv = dtobj.getDay();
      return ["日", "月", "火", "水", "木", "金", "土"][wv];
    };

Javascript ES6 のクラスを使ってみる

IE11を使ってる人も多く、まだ変化が多いので、ECMA Scriptは使ってませんでしたが、Win7のサポート終了でIE11からEdgeへの移行もすすむと思いますので、最近、使い始めてみました。

まだ、Javaのクラスと同等な使い方出来なくて、とまどう部分も多いですが、コード量減らすことができて、重宝しております。

< 作ったコード例 >

あちこちに書いたAJaxの処理をクラスに入れてみました。


class MyAjax {
  
  /**
   * コンストラクタ
   * @param {type} url URL
   * @param {type} mapdata リクエストパラメータ
   * @param {type} datatype 応答データタイプ (デフォルトはjson)
   * @param {type} type リクエストメソッド (デフォルトはPOST)
   * @param {type} cache キャッシュ (デフォルトはなし)
   * @param {type} async 非同期 (デフォルトは同期)
   * @returns {MyAjax}
   */
  constructor(url, mapdata, datatype = "json", type = "POST", cache = false, async = false) {
    
    this.url = url;
    this.mapdata = mapdata;
    this.datatype = datatype;
    this.type = type;
    this.cache = cache;
    this.async = async;
  }
  
  // 実行 //
  exec() {
    
    let rtn;
    $.ajax({
      url: this.url,
      type: this.type,
      cache: this.cache,
      dataType: this.datatype,
      async: false,
      data: this.mapdata,
      success: function (jsnortxt) {
        rtn = jsnortxt;
      },
      error: function (xhr, ts, err) {
        rtn = "ERROR";
      }
    });
    return rtn;
  }

}

呼び出し側


// -C 検索
let aJax = new MyAjax("GetJPFromID", {tblid: tblid, mvtp: mvtp});
let katakata = [];
katakata = aJax.exec();

MySQL 漢字時刻文字列整数秒変換関数

Jsonでリクエストされた漢字の時刻を秒数に変換して MySQL に登録する必要あり作ってみましたが、
Javascriptであらかじめ変換してからリクエストすることにしたので、使ってません。
動作確認出来てないですが、必要な方はご利用下さい。

CREATE DEFINER=`root`@`localhost` FUNCTION `fc_intsecond_fromkanji`(
	`kanji` varchar(20)
)
RETURNS int(11)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '漢字時間文字列整数秒数取得'
BEGIN

DECLARE CNT_SEP TINYINT DEFAULT 0;
DECLARE HMSTXT VARCHAR(20) DEFAULT '';
DECLARE FMTTXT VARCHAR(20) DEFAULT '';
DECLARE CHKNUM TINYINT DEFAULT 0;
DECLARE TP     VARCHAR(3) DEFAULT '';
DECLARE H SMALLINT DEFAULT 0;
DECLARE M TINYINT DEFAULT 0;
DECLARE S TINYINT DEFAULT 0;


SET HMSTXT = REPLACE(REPLACE(REPLACE(kanji, '時間', 'H'), '分', 'M'), '秒', 'S');
SET FMTTXT = REPLACE(REPLACE(REPLACE(kanji, '時間', ':'), '分', ':'), '秒', '');

SET TP = 
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(HMSTXT, '0', ''),
'1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', '')
;


insert into tst (fld0, fld1) values (HMSTXT, TP);

IF (TP = 'HMS') THEN
  SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 3, ':') AS UNSIGNED);
END IF;

/**/ 
IF (TP = 'HS') THEN
  SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;
IF (TP = 'HM') THEN
	SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;
IF (TP = 'MS') THEN
  SET M = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
	SET S = CAST(fc_delim_idxtxt(FMTTXT, 2, ':') AS UNSIGNED);
END IF;

/**/ 
IF (TP = 'H') THEN
	SET H = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
END IF;
IF (TP = 'M') THEN
	SET M = CAST(fc_delim_idxtxt(FMTTXT, 1, ':') AS UNSIGNED);
END IF;
IF (TP = 'S') THEN
  SET S = CAST(FMTTXT AS UNSIGNED);
END IF;

	 
RETURN H * 3600 + M * 60 + S;


END

Javascript クラスの static がブラウザによってはエラーとなる

JavascriptのES6クラスについては、IE11で動作しない、ブラウザによっては動かないのがあるなどの理由で、利用をためらってましたが、

Windows10の普及でIE11もなくなると思うので使い始めました。

同じような重複したコードが排除出来て、うれしいですが、まだ仕様が確定してないのか、動かない部分ありましたので、備忘録しておきます。

Vilaldy, Brave, Firefox で動かなかったコード (Edge, Chromeでは動く)


static STATICTEXT = "スタティック";

 

動いたコード


static STATICTEXT () {
return "スタティック";
}

MySQL ストアドファンクションから文字コード指定を消してパフォーマンス改善

MySQLの5.7から8に移行中での出来事で、ストアドが2秒程度で結果が返ってたのが、20秒程度かかってしまうので、

先日行った OSC2019 Tokyo Fall でMySQLのブースにいた人に聞いてみて、直してみると、改善できました。

全角文字を扱わない場合、文字コードは指定しない方がいいです。

< Old >

| fc_chgdvessel | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `fc_chgdvessel`(
`vslnm` varchar(50)
) RETURNS varchar(36) CHARSET utf8
COMMENT '船名記号スペース変換関数'
begin

return REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(vslnm, ' ', ''), '-', ''), '.', ''), '_', ''), '(', ''), ')', ''), '.', '');

end | utf8mb4 | utf8mb4_general_ci | utf8_general_ci |

< New >

| fc_chgdvessel | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `fc_chgdvessel`(
`vslnm` varchar(50)
) RETURNS varchar(36)
COMMENT '船名記号スペース変換関数'
begin

return REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(vslnm, ' ', ''), '-', ''), '.', ''), '_', ''), '(', ''), ')', ''), '.', '');

end | utf8mb4 | utf8mb4_general_ci | utf8_general_ci |

CentOS8 dnfでインストール出来ないパッケージ 2019-11

さくらのVPSでCentOS8がインストール出来るので、先月、インストールしてみました。

< インストールした主なパッケージ >

PHP7

MySQL8

LibreOffice

tiger-vncserver

postfix

inotify-tools

mailx

AdoptOpenJDK

Oracle OpenJDK

など

< まだdnfになく、rpmでインストール >

nkf

==> MySQLのCSV出力で必須

< 未インストール >

davfs2

==> 半分あきらめ、WebDavはマウントせず、都度、curlを使用中

==> 2020-05-16 あったのでインストール出来ました

swatch

==> logmonをgitからダウンロードして代替

geany

==> 2020-05-16 あったのでインストール出来ました

ssmtp

MATE Desktop