こんにちは。
JavaでDB管理アプリを作成しています。
作成の初期段階ではwindows10で作成していたのですが、
PCのハード的な(寿命的な)問題が現れたのでmacbookを購入しました。
windowsPCではXAMPPのMySQLを稼働しDB作成、閲覧、削除、テーブル作成などできていたのですが、
mac環境ではmampでMySQLを稼働してもヌルポインタエラーでDBに接続できません。
mac初心者なのですが、windowsPCとは環境が全くの別物と捉えた方がいいですか?
java
1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.ResultSet; 4import java.sql.Statement; 5 6public class DB_Connection { 7 8 /* DB接続用のメンバ変数 */ 9 Connection con; 10 Statement stmt; 11 ResultSet rs; 12 boolean dbConnFlg = false; 13 14 /* DB接続用の定数 */ 15 static final String DRIVE_NAME = "com.mysql.jdbc.Driver"; 16 static final String DB_NAME = "jdbc:mysql://"; 17 static final String DB_USER = "root"; 18 static final String DB_PASS = "0000"; 19 20 /** 21 * 22 * DBに接続するメソッド 23 * 24 */ 25 public void dbConnect() { 26 try { 27 if (!dbConnFlg) { 28 // DB接続情報 29 Class.forName(DRIVE_NAME).newInstance(); 30 con = DriverManager.getConnection(DB_NAME, DB_USER, DB_PASS); 31 32 // ステートメントの作成 33 stmt = con.createStatement(); 34 35 dbConnFlg = true; 36 System.out.println("DBに接続したよ。"); 37 38 } else { 39 System.out.println("既にDBに接続しています。"); 40 } 41 42 } catch (Exception e) { 43 dbConnFlg = false; 44 System.out.println("予期せぬエラーが発生しました。"); 45 e.printStackTrace(); 46 47 } 48 } 49 50 /** 51 * 52 * DBの操作に必要なデータを保持した変数をクリアにするメソッド 53 * 54 */ 55 public void dbClose() { 56 57 try { 58 59 if (rs != null) { 60 rs.close(); 61 } 62 stmt.close(); 63 con.close(); 64 System.out.println("切断しました"); 65 66 } catch (Exception e) { 67 System.out.println("miss"); 68 e.printStackTrace(); 69 } 70 } 71 72}
接続はこれを使っています。
テストのためにsysoutを書いています。
追記––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
エラーとメインメソッドを記述した物を書きます。
erorr
予期せぬエラーが発生しました。 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:342) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2188) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at db_test.DB_Connection.dbConnect(DB_Connection.java:32) at db_test.Test.main(Test.java:13) Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301) ... 16 more 成功
main
java
1package db_test; 2 3import java.util.ArrayList; 4 5public class Test { 6 7 public static void main(String[] args) { 8 9 ShowDB sdbTest = new ShowDB(); 10 ArrayList<String> alRlt; 11 boolean bTestFlog = true; 12 13 sdbTest.dbConnect(); 14 //bTestFlog = sdbTest.showDB(); 15 16 if (bTestFlog == false) { 17 System.out.println("エラー"); 18 } else { 19 System.out.println("成功"); 20 alRlt = sdbTest.getSDBName(); 21 22 for (String sDNmae : alRlt) { 23 System.out.println(sDNmae); 24 } 25 } 26 } 27}
環境の問題でしょうか?
追記––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
返答が遅くなり申し訳ありません。
ShowDBクラスを書いていませんでした。
winPCではDB_ConnectionのPASSが違うものの、
コンソールログにDB名一覧が表示されます。
Java
1package db_test; 2 3import java.util.ArrayList; 4 5public class ShowDB extends DB_Connection { 6 7 private ArrayList<String> sDBName = new ArrayList<>(); // DB名格納用 8 private boolean bExceptionFlog = true;// 戻り値用のエラー判別のboolean変数 9 10 public boolean showDB() { 11 12 String sSQL = "show databases"; // SQL文の変数 13 String sDBName;// DB名格納用 14 15 this.sDBName.clear(); 16 17 dbConnect(); // ※このクラス実行前に接続している場合は不要 18 19 /* SQL文の実行 */ 20 try { 21 rs = stmt.executeQuery(sSQL); 22 } catch (Exception sql_e) { 23 bExceptionFlog = false; 24 sql_e.printStackTrace(); 25 } 26 27 /* rsに受け取った値を戻り値用のalDBNameに格納 */ 28 try { 29 30 rs = stmt.executeQuery(sSQL); 31 while (rs.next()) { 32 33 sDBName = rs.getString("Database"); 34 this.sDBName.add(sDBName); 35 36 } 37 38 } catch (Exception sql_e) { 39 bExceptionFlog = false; 40 sql_e.printStackTrace(); 41 } 42 43 /* SQL文をクリア */ 44 dbClose(); 45 46 return this.bExceptionFlog; 47 } 48 49 public ArrayList<String> getSDBName() { 50 return this.sDBName; 51 } 52 53}
回答1件
あなたの回答
tips
プレビュー