質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

新しいXAMPPで従来のWebアプリを動かすには

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,065

score 132

 前提・実現したいこと

新しいXAMPP7.2.1をインストールしましたが、MySQLがmariaDBになっており、従来のjavaでつくったWebアプリケーションではDBにつながらないようです。
JDBCドライバーをmariaDBのものに変更してみましたが、うまくいきませんでした。加えて、javaの開発環境も4.7にしたので、WTPが標準的になっており、よくわかりません。
システムはEclipse4.2に載っていた「シンプルBlog」というものです。ソースコード(サーブレットとjspは除く)は下に記載しましたが、初心者同然ですので、ソースのどこが悪いか指摘していただけるとありがたいです。

 発生している問題・エラーメッセージ

エラーメッセージは表示されませんが、DBの中を表示しません。

エラーメッセージ

 該当のソースコード

Topic.java

package blog;

import java.util.Date;

/**

  • トピックのビーン
    */
    public class Topic {

/ 連番 */ private int id;     / タイトル */
private String title;
/ 内容 */ private String content; / 投稿日 */
private Date postDate;

public String toString(){
return super.toString()
+ ",id=" + id
+ ",title=" + title
+ ",content=" + content
+ ",postDate=" + postDate
;
}

//
//単純なセッタ、ゲッタ
//
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPostDate() {
return postDate;
}
public void setPostDate(Date postDate) {
this.postDate = postDate;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

ConnectionManager.java

package blog;

import java.sql.*;

/**

  • �V���v���ȃR�l�N�V�����Ǘ��N���X
    • @author Shinji Miyamoto
      */
      public class ConnectionManager {

/**

  • JDBC�h���C�o�[�̃N���X��
    */
    final static String DRIVER = "com.mysql.jdbc.Driver";

/**

  • �f�[�^�x�[�X��URL
    */
    final static String URL = "jdbc:mysql://localhost:3306/mydb";

/**

  • �f�[�^�x�[�X�̃��[�U
    */
    final static String USER = "root";

/**

  • �f�[�^�x�[�X�̃p�X���[�h
    */
    final static String PASS = "";

/**

  • Conncection���擾���܂��B
    */
    public static Connection getConnection()
    throws SQLException {

try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new IllegalStateException(
"fail to class load : "
+ e.getMessage());
}

Connection con = DriverManager.getConnection(URL,
USER, PASS);

return con;
}
}

BlogController.java

package blog;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**

  • Blogを操作するビジネスロジック
    • @author Shinji Miyamoto
      */
      public class BlogController {

/**

  • シングルトンのインスタンス
    */
    private static BlogController controller = new BlogController();

/**

  • このクラスのインスタンスを取得します。
    • @return BlogControllerのインスタンス
      */
      public static BlogController getInstance() {
      return controller;
      }

private BlogController() {
}

/**

  • トピックをポスト(登録)します。
    • @param topic
  •            トピック
    */
    public void postTopic(Topic topic) {
    String sql = "INSERT INTO TOPIC(TITLE, CONTENT)"
    + " VALUES(" + "'" + topic.getTitle() + "'"
    + ",'" + topic.getContent() + "'" + ")";

Connection con = null;
Statement smt = null;
try {
con = ConnectionManager.getConnection();
smt = con.createStatement();
smt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (smt != null) {
try {
smt.close();
} catch (Exception ignore) {
}
}
if (con != null) {
try {
con.close();
} catch (Exception ignore) {
}
}
}
}

/**

  • 最近の(というか全部の)トピックを取得します。
    • @return トピックのリスト
      */
      public List<Topic> getTopics() {

String sql = "SELECT * FROM TOPIC";
List<Topic> topics = new ArrayList<Topic>();

Connection con = null;
Statement smt = null;
ResultSet rs = null;
try {
con = ConnectionManager.getConnection();
smt = con.createStatement();
rs = smt.executeQuery(sql);
while (rs.next()) {
Topic topic = new Topic();
topic.setId(rs.getInt("ID"));
topic.setPostDate(rs
.getTimestamp("POST_DATE"));
topic.setTitle(rs.getString("TITLE"));
topic.setContent(rs.getString("CONTENT"));
topics.add(topic);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception ignore) {
}
}
if (smt != null) {
try {
smt.close();
} catch (Exception ignore) {
}
}            
if (con != null) {
try {
con.close();
} catch (Exception ignore) {
}
}
}

return topics;
}

public static void main(String[] args) {
BlogController ctrl = BlogController.getInstance();
List<Topic> topics = ctrl.getTopics();
for (int i = 0; i < topics.size(); i++) {
System.out.println(topics.get(i));
}

System.out.println("END");
}

}

 試したこと

JDBC指定をmariaDBにしてみましたが反応なし。

 補足情報(FW/ツールのバージョンなど)

TOMCATのバージョンは9.04です。jdkも9.04です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • casaganai

    2018/01/31 12:29

    sudo mysql -u rootで次のエラーを表示します。ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

    キャンセル

  • unz.hori

    2018/01/31 12:55

    該当のエラーメッセージで検索したところ、(http://mitsuba.hateblo.jp/entry/20110226/1298732743)の情報がありました。WordPressが動いているとのことでdaemonは上がっていると思いますがお試しください。

    キャンセル

  • unz.hori

    2018/01/31 12:56

    あー、他にも該当エラーメッセージで検索すると色々と情報があるので新し目のやつを参照するといいかもしれません。

    キャンセル

回答 1

checkベストアンサー

+1

ソースコードに書かれてるJDBCドライバのクラス名と接続URLがMySQLのままです。

ドライバ名は「org.mariadb.jdbc.Driver」、
接続URLは「jdbc:mariadb://」から始まります。

他にもWTPを使いたいのであれば、プロジェクトのプロパティを開き、プロジェクトのファセットを選びます。
その後、Eclipseから参照しているTomcatのバージョンを指定してサーバを作成し、サーバにプロジェクトを搭載すれば動作はするでしょう。

ただ、JDBCドライバのクラスパス設定やjarファイルの配置はプロジェクトにて行うものなので、通常のWebアプリケーションであれば、WEB-INF/lib の中に必要なjarファイルを配置するものです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/12 14:56

    ご指摘の点は自分でもやってみましたがDBに拒絶されてしまいました。そこでmy.cnfを変更してみると接続されるようになりました。しかし、投稿してみると文字化けになって返ってきます。そこでXAMPPを5.6.3にダウングレードしましたがここでも接続できず、さらに1.8.3にダウングレード、utf8にすると正常に動きました。動いたのは動きましたがmariadbでutf8mb4を使う当初の目論見から外れた結果となりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る