win10環境で、vitualboxに作ったCent7OS内のMySQLに接続しようとしたところ、エラーが発生しました。
javaのコードは以下になります
java
1 public String[] setLogin() throws IOException, SAXException, ParserConfigurationException{ 2 String[] address ={"logindb","loginaddress"}; 3 String[] id = {"logindb","root"}; 4 String[] password = {"logindb","password"}; 5 String[] returns = new String[3]; 6 7 try { 8 //プロパティファイルからDB1の接続情報を入手 9 String loginaddress = "jdbc:mysql:" + propertyFileReader(address); 10 String loginid = propertyFileReader(id); 11 String loginpassword = propertyFileReader(password); 12 13 logger.info("接続情報の読み込みが完了しました"); 14 logger.info("接続用のURI:" + loginaddress); 15 logger.info("ログインID:" + loginid); 16 logger.info("ログインアドレス:" + loginpassword); 17 18 19 // MySQLのドライバを指定 20 Class.forName("com.mysql.jdbc.Driver"); 21 22 // DriverManagerクラスのメソッドで接続する 23 Connection conn = DriverManager.getConnection(loginaddress,loginid,loginpassword); 24 25 // SQL送信用インスタンスの作成 26 Statement st = conn.createStatement(); 27 28 //パスワード作成(ランダム8文字) 29 StringBuffer newpassword = new StringBuffer(); 30 //[0-9,A-z]の文字列の配列(ランダム文字作成用) 31 String[] randam = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","U","V","W","X","F","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","u","v","w","x","f","z"}; 32 for(int i = 0 ; i <= 8 ; i++) { 33 int r = new java.util.Random().nextInt(randam.length); 34 newpassword.append(randam[r]); 35 } 36 logger.info(newpassword.toString());//作成したパスワード 37 38 //現在日時の取得 39 LocalDateTime d = LocalDateTime.now(); 40 41 // SQLによってデータを入れる 42 st.executeUpdate("INSERT INTO LOGIN (PASWEORD,INSERTTIME) VALUES( " + newpassword.toString() + ","+ d + ")"); 43 44 // 後始末(インスタンスの正常クローズ) 45 st.close(); 46 conn.close(); 47 48 }catch (Exception e) { 49 e.printStackTrace(); 50 } 51 52 return returns; 53 54 }
エラーが発生しているのはDB接続時の『Connection conn = DriverManager.getConnection(loginaddress,loginid,loginpassword);』の部分です。
エラー内容は以下の通りです
情報: 接続情報の読み込みが完了しました [日 11 04 18:56:11 GMT+09:00 2018] 情報: 接続用のURI:jdbc:mysql://localhost:2222/db1 [日 11 04 18:56:11 GMT+09:00 2018] 情報: ログインID:root [日 11 04 18:56:11 GMT+09:00 2018] 情報: ログインアドレス:Root01; [日 11 04 18:56:11 GMT+09:00 2018] Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (4,739,923 > 65,535). You can change this value on the server by setting the 'max_allowed_packet' variable. at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:107) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at jp.angelargyle.framework.MainFrameWork.setLogin(MainFrameWork.java:373) at jp.angelargyle.testclass.testclass.main(testclass.java:29)
max_allowed_packetが足りないとのことなのでMYSQL側の設定を変更して変更されていることを確認できています。
teraterm
1mysql> show variables like 'max_allowed_packet'; 2+--------------------+-----------+ 3| Variable_name | Value | 4+--------------------+-----------+ 5| max_allowed_packet | 268435456 | 6+--------------------+-----------+ 71 row in set (0.04 sec)
しかし、上のエラーは変わらずどこの設定を変えればいいのかわかりません。
エラーが発生しているのはDB接続時であり、クエリの部分まで到達はしていません。
もし分かれば教えていただけないでしょうか。
追伸
ログインIDをわざと相違(roo)にして送りましたが、同じエラーが出ました。
どうやら、MYSQLまではたどり着いていないようです。
回答2件
あなたの回答
tips
プレビュー