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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

1回答

1965閲覧

Twitter4Jで取得した値をMySQLに格納したい

q_calm

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2017/02/11 18:17

Twitter4Jで特定のツイートを取得し、MySQLへ格納したいのですが文字列のまま格納されてしまいます。
https://oshiete.goo.ne.jp/qa/3055587.html こちらのサイトを参考に、
String sql = "insert into twitter values ('"+ tweet.getUser().getScreenName() + "','" + tweet.getText() +"','" + tweet.getCreatedAt() +"')";
int num = stmt.executeUpdate(sql);
といった、'や",+で繋げることも試しましたがcannot find symbolとエラーが出ます。
どうすればよいでしょうか?
まだまだJavaを触れ始めたばかりで、間違った記述も多いと思います。よろしければここも間違っているなど、ご指摘ください。
今回はこちらのサイトを参考に作っています。
http://www.javadrive.jp/servlet/database/index8.html
http://www.mwsoft.jp/programming/java/twitter4j.html

【TweetInsert.java】
import java.io.;
import javax.servlet.
;
import javax.servlet.http.;
import java.sql.
;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

public class TweetInsert extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>TweetをMySQLへ格納</title>"); out.println("</head>"); out.println("<body>"); Connection conn = null; String url = "jdbc:mysql://localhost/test"; String user = "root"; String password = "root"; try { // 初期化 Twitter twitter = new TwitterFactory().getInstance(); Query query = new Query(); // 検索ワードをセット query.setQuery("#寿司" OR "#カレー"); // 検索実行 QueryResult result = twitter.search(query); // 検索結果の表示 for (Status tweet : result.getTweets()) { out.println(tweet.getUser().getScreenName()); out.println(tweet.getText()); out.println(tweet.getCreatedAt()); } Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql = "insert into twitter values (?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "tweet.getUser().getScreenName()"); pstmt.setString(2, "tweet.getText()"); pstmt.setString(3, "tweet.getCreatedAt()"); pstmt.executeUpdate(); sql = "select * from test"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { String User = rs.getString("User"); String Text = rs.getString("Text"); String CreatedAt = rs.getString("CreatedAt"); out.println("<p>"); out.println("User:" + User + ", Text:" + Text + ", CreatedAt:" + CreatedAt); out.println("</p>"); } rs.close(); stmt.close(); } catch (ClassNotFoundException e) { out.println("ClassNotFoundException:" + e.getMessage()); } catch (SQLException e) { out.println("SQLException:" + e.getMessage()); } catch (Exception e) { out.println("Exception:" + e.getMessage()); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { out.println("SQLException:" + e.getMessage()); } } out.println("</body>"); out.println("</html>"); }

}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ソースは整形してください。

やりたいこととしては、

java

1// 検索ワードをセット 2query.setQuery("#寿司" OR "#カレー"); 3// 検索実行 4QueryResult result = twitter.search(query);

で取得したデータ全てを格納したいということで大丈夫でしょうか?

であれば、

java

1// 検索結果の表示 2for (Status tweet : result.getTweets()) { 3out.println(tweet.getUser().getScreenName()); 4out.println(tweet.getText()); 5out.println(tweet.getCreatedAt()); 6}

のfor文の中でないとtweetという変数にアクセスできません。
変数 スコープ 拡張for文 とかで調べてみてください。

java

1// 検索ワードをセット 2query.setQuery("#寿司" OR "#カレー"); 3// 検索実行 4QueryResult result = twitter.search(query); 5 6// 先にドライバの準備をする 7Class.forName("com.mysql.jdbc.Driver").newInstance(); 8conn = DriverManager.getConnection(url, user, password); 9 10Statement stmt = conn.createStatement(); 11 12// 検索結果の表示 13for (Status tweet : result.getTweets()) { 14out.println(tweet.getUser().getScreenName()); 15out.println(tweet.getText()); 16out.println(tweet.getCreatedAt()); 17 18// for のなかで実行 19 20String sql = "insert into twitter values (?,?,?)"; 21PreparedStatement pstmt = conn.prepareStatement(sql); 22pstmt.setString(1, tweet.getUser().getScreenName()); 23pstmt.setString(2, tweet.getText()); 24pstmt.setString(3, tweet.getCreatedAt()); 25pstmt.executeUpdate(); 26} 27

とすればとりあえずは動きそうです。

投稿2017/02/12 03:37

7tsuno

総合スコア310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問