• 締切済み

AndroidアプリからMySQLのデータ取得

こんにちは。 今、androidの勉強をしながらアプリを作成しています。 androidやjavaの知識レベルは、初心者レベルです。 タイトルにもあるように、AndroidアプリからMySQLのデータ取得方法がわかりません。 今現在、eclipse内のエミュレータではデータの取得と表示はできています。 しかしながら、実機でテストをすると、データが取れていません。 なにぶん初心者なので、どこを見れば良いか、何を設定すれば好いか、いきあたりばったりでテストしています。皆様のアドバイス宜しくお願いします。 【開発環境】 windowsXP eclipse3.5 mysql5.1(ユーザー、IP、ポート、データベース、テーブルなどは設定済み) jdbc5.1(構成パスにJDBCは追加済み) 【ソース一部抜粋】 public class Prof extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Connection conn = null; Statement stmt = null; ResultSet rs = null; setContentView(R.layout.prof); TextView set_NameLabel = (TextView) findViewById(R.id.set_nameLabel); TextView set_oldLabel = (TextView) findViewById(R.id.set_oldLabel); TextView set_jobLabel = (TextView) findViewById(R.id.set_jobLabel); TextView set_addLabel = (TextView) findViewById(R.id.set_addLabel); TextView set_homeLabel = (TextView) findViewById(R.id.set_homeLabel); TextView set_hobbyLabel = (TextView) findViewById(R.id.set_hobbyLabel); TextView set_comentLabel = (TextView) findViewById(R.id.set_comentLabel); try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/prof_db","test_01","test_pass"); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * FROM my_prof"); rs.next(); set_NameLabel.setText(rs.getString("prof_name")); set_oldLabel.setText(rs.getString("prof_age")); set_jobLabel.setText(rs.getString("prof_occupation")); set_addLabel.setText(rs.getString("prof_address")); set_homeLabel.setText(rs.getString("prof_home")); set_hobbyLabel.setText(rs.getString("prof_hobby")); set_comentLabel.setText(rs.getString("prof_comment")); conn.close(); rs.close(); stmt.close(); } catch (ClassNotFoundException e){ e.printStackTrace(); } catch ( SQLException e) { e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); } } } 何かしらのアドバイス、解決方法、参考HPなど、ご教授宜しくお願いします。

みんなの回答

  • duron
  • ベストアンサー率77% (73/94)
回答No.2

接続するデータベースサーバーを指定すればいいのではないかとおもいます。 ここでは、開発環境の mysql5.1(ユーザー、IP、ポート、データベース、テーブルなどは設定済み) のIPとポートを設定してみてください。

music-man-69
質問者

お礼

duronさん、回答ありがとうございます。 mysql5.1のIPの設定はここのHPを参考にして設定しました。 http://www.multiburst.net/sometime-php/2009/04/mysql-remote-connect-setting/ ポートはデフォルトで設定してある為、「3306」です。 windowsファイアウォールの例外設定もしてあります。 この設定でとりあえず、テストしてみましたが、出来ませんでした。 もう少し、テストしてみます。回答ありがとうございます。

  • duron
  • ベストアンサー率77% (73/94)
回答No.1

参考URL先の「エミュレータから、データベースサーバーに接続する場合の注意」に Androidのエミュレータは、自身が動いているコンピュータのIPアドレスを10.0.2.2として扱います。 と書かれています。 ですので conn = DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/prof_db","test_01","test_pass"); の部分を、実機で接続する場合の設定にすればよいのではないでしょうか?

参考URL:
http://codezine.jp/article/detail/5598?p=2
music-man-69
質問者

お礼

duronさん、回答ありがとうございます。 ここの参考URLは、私も拝見して、ここを参考にプログラムを作成しました。 「conn = DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/prof_db","test_01","test_pass"); の部分を、実機で接続する場合の設定にすればよいのではないでしょうか?」というのは、IPアドレスなどを実機で接続する設定にすれば良いのでしょうか? その際、実機のIPアドレスなどはどうやって調べるのでしょうか?初心者の為、質問が正しいかも分からないのですが、参考HPなどがあれば宜しくお願いします。

関連するQ&A

  • javaでデータベース(mysql)からデータを取得しJTableにinsertする方法が分かりません。

    JLabelになら分かるのですがJTableのほうがよく分からないのです。 また、どのように記述すればよいのでしょうか? 参考までにJLabelの方を乗せておきます。 すべては自分の勉強不足が原因なのですが、お分かりになる方はお知恵をお貸し下さい。 private void displayData(){ try { MainMenu mainMenu = new MainMenu(); sqlStr = mainMenu.getSendsqlstr(); System.out.println(sqlStr); //ドライバクラスをロードする Class.forName("com.mysql.jdbc.Driver");//org.gjt.mm.mysql.Driverこっちの可能性もあり //MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/nelfsystem", "root", "root"); //ステートメント生成 pstmt = (PreparedStatement) con.prepareStatement(sqlStr); //SQL文実行 rs = pstmt.executeQuery(sqlStr); rs.first(); // 最初の行に移動 jLabel30.setText("" + rs.getInt("member_id")); jLabel31.setText(rs.getString("member_name")); jLabel32.setText(rs.getString("member_furigana")); jLabel33.setText(rs.getString("birth_day")); jLabel34.setText(rs.getString("sex")); jLabel36.setText(rs.getString("telephone")); jLabel37.setText(rs.getString("telephone_2")); jLabel29.setText(rs.getString("zipcode")); jLabel38.setText(rs.getString("address")); jLabel39.setText(rs.getString("address_2")); jLabel41.setText(rs.getString("douki")); jLabel40.setText(rs.getString("e_mail")); jTextArea2.setText(rs.getString("remarks")); } catch(Exception ex){ System.out.println("Error:" + ex.toString() + ex.getMessage()); } }

  • データベースへのアクセスエラーについて

    はじめまして!大学でデータベースを学んでいるのですが、以下のプログラムを実行した際、「式の型が一致しません」というエラーが出ます。またアクセスしているテーブルmeiboにはフィールドに,IDと名前shakai,eigoなどのテーブルには,IDと得点(それぞれの科目の名前)がフィールドにあります。 よろしければ、ご回答よろしくお願いいたします。 import java.io.*; import java.sql.*; public class Ex1 { public static void main(String[] args) { Connection conn = null; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:ex1"); Statement stmt = conn.createStatement(); BufferedReader r = new BufferedReader(new InputStreamReader(System.in), 1); System.out.print("学籍番号を入力してください : "); System.out.flush(); String number = r.readLine(); String select = "SELECT * from meibo,kokugo,sansuu,shakai,rika,eigo " + "where meibo.ID=kokugo.ID=sansuu.ID=shakai.ID=rika.ID=eigo.ID"; ResultSet rs = stmt.executeQuery(select); while(rs.getString("ID")!=number) rs.next(); // System.out.printf("%s\t",rs.getString("name")); System.out.printf("%s\t"," 国語 "+rs.getString("kokugo")); System.out.printf("%s\t"," 算数 "+rs.getString("sansuu")); System.out.printf("%s\t"," 社会 "+rs.getString("shakai")); System.out.printf("%s\t"," 理科 "+rs.getString("rika")); System.out.printf("%s\n"," 英語 "+rs.getString("eigo")); stmt.close(); conn.close(); } catch (Exception e) { System.out.println(e); } } }

  • androidアプリの開発 WebView

    androidアプリの開発について質問です。 現在intentによりデータを受信して表示する事までができたのですが、 受信したデータをWebViewにて表示をすると、 WebView領域にnull というテキストリンクまでもが表示されます。 通常のデータは正常に表示されています。 ちなみに null のテキストリンクをクリックしても ページが表示されませんというエラーが出るだけです。 どなたかご存知の方がいましたらご教授くださいませ。 以下ソース抜粋 if (intent != null) { String tmp = ""; String desc = ""; TextView tv; tv = (TextView) findViewById(R.id.item_detail_title); tmp = intent.getStringExtra("TITLE"); tv.setText(tmp); tv = (TextView) findViewById(R.id.item_detail_descr); tmp = intent.getStringExtra("DESCRIPTION"); tv.setText(tmp); WebView wv = (WebView) findViewById(R.id.Des); desc = WEBVIEW_BEGIN; tmp = intent.getStringExtra("Link"); desc += String.format(WEBVIEW_LINK, tmp, tmp); tmp = intent.getStringExtra("DESCRIPTION"); desc += tmp + WEBVIEW_END; wv.loadDataWithBaseURL("about:blank", desc, "text/html", "utf-8", null); }

    • ベストアンサー
    • Java
  • android studioのlistview

    listviewに他画面から、受け取ったデータを追加する方法について、質問です。 他画面から、データを受け取って、textviewに表示させることは出来たのですが、listに追加することが出来ません。 text = (TextView)findViewById(R.id.++); と text.setText(data.getCharSequenceExtra("key")); という感じでテキストには表示することは可能でした。listに追加していく方法を教えて下さい。 list.add(data.getCharSequenceExtra("key"));じゃ、出来ませよね。。

  • mysqlへの接続が出来ません

    まずは、サンプルプログラミングをコピーして実行してみましたが、上手くいきません。 package Connection; import java.sql.*; public class DBtest { public static void main(String[] args) { //java.sql Connection con = null; Statement stmt = null; ResultSet rs = null; String sqlStr; try { //ドライバクラスをロードする Class.forName("org.gjt.mm.mysql.Driver"); //MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "8080", "password"); //ステートメント生成 stmt = con.createStatement(); //SQL文 sqlStr = "SELECT * FROM TABLE"; //SQL文実行 rs = stmt.executeQuery(sqlStr); //検索結果数だけループ while(rs.next()){ //レコードの値 int id = rs.getInt("ID"); String name = rs.getString("NAME"); //表示 System.out.println(id + ":" + name); } //クローズ rs.close(); stmt.close(); con.close(); } catch (Exception ex) { try { //クローズ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (con != null) con.close(); } catch (Exception e) { } //エラー ex.printStackTrace(); } } } 上記はEclipseでは文法エラーはありません。で実行してみると java.sql.SQLException: Access denied for user '8080'@'localhost' (using password: YES)になります。 サンプルにはDbname、ID,Passとあるので実際のDbnameとパスワードを入れているのですが駄目です。 IDは意味が良くわからないので8080を入れてみました。 どなたか教えて下さい。お願いします。 尚、当方全くの初心者です宜しくお願い致します。

    • ベストアンサー
    • Java
  • データベースから取得したデータを配列に格納できません。

    jTableにSQL文の結果を表示させようとして結果を以下のように配列に 格納しようとしました。 public String[][] Serch(){ int i=0; String[][] rowData; String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=helloTable.mdb"; try { // ドライバクラスをロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // データベースへ接続 Connection con = DriverManager.getConnection(str, "", ""); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM ハローテーブル"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ // NOを取得 String no = String.valueOf(rs.getInt("NO")); // 言語を取得 String lang = rs.getString("言語"); // メッセージを取得 String msg = rs.getString("メッセージ"); rowData[i][0] = no; rowData[i][1] = lang; rowData[i][2] = msg; i++; } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return rowData; } このメソッドで得た配列を表示させようとすると以下の結果が表示されます。 java.lang.NullPointerException 正常なSQL文の結果は以下の通りです。 1 日本語 こんにちは世界 2 英語 Hello World 3 ドイツ語 Hallo Welt 配列の行数はSQL文の結果の行数に合わせたかったのですがうまくいきません。 どのように直せばSQL文の結果を配列にすべて格納できるでしょうか?

    • ベストアンサー
    • Java
  • android getFromLocationが?

    Android初心者です。 下記コードでエラーとなり、解決策が見当たらず、非常に困っています。 どなたがご教授をお願いします。 public class MapViewSample extends MapActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView)findViewById(R.id.MapView01); mapView.setClickable(true); mapView.setBuiltInZoomControls(true); ConcreteOverlay overlay = new ConcreteOverlay(this); List<Overlay> overlayList = mapView.getOverlays(); overlayList.add(overlay); } protected boolean isRouteDisplayed() { return false; } private class ConcreteOverlay extends Overlay { GeoPoint mGeoPoint; Geocoder mGeocoder; ConcreteOverlay(Context context) { mGeocoder = new Geocoder(context, Locale.JAPAN); } public boolean onTap(GeoPoint point, MapView mapView) { mGeoPoint = point; try { TextView textView = (TextView)findViewById(R.id.TextView01); boolean success = false; ★ここでエラー⇒ List<Address>addressList = mGeocoder.getFromLocation(point.getLatitudeE6()/1E6, point.getLongitudeE6()/1E6, 5); for (Iterator<Address> it=addressList.iterator(); it.hasNext();) { Address address = it.next(); String country = address.getCountryName(); String admin = address.getAdminArea(); String locality = address.getLocality(); if(country != null && admin != null & locality != null) { textView.setText(country + admin + locality); success = true; break; } } if(!success) textView.setText("Error"); textView.invalidate(); } catch (Exception e){ Toast.makeText(getApplicationContext(), "ErrorToast", 1000).show(); } return super.onTap(point, mapView); } public void draw(Canvas canvas, MapView mapView, boolean shadow) {          ・・・省略・・・ } } }

    • ベストアンサー
    • Java
  • データベースへ接続してからのデータ追加方法

    掲示板を作成しているのですが、DAOクラスの使いかたがいまいちわかりません。 public ArrayList<textbeen> findAll(){ //スレッド一覧を保持するリスト ArrayList<textbeen> list = new ArrayList<textbeen>(); Connection con = null; try{ //データベースに接続 con = createConnection(); //データベースにSQL文を送信 String sql = "select * from TEXT"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String name = rs.getString("KB_NAME"); String title = rs.getString("KB_TITLE"); String mail = rs.getString("KB_MAIL"); String text = rs.getString("KB_TEXT"); String pass = rs.getString("KB_TITLE_PASS"); textbeen thread = new textbeen(name, title, mail, text, pass); //TO(Threadオブジェクト)を、保持するリストに追加 list.add(thread); } //スレッド一覧を返す。 return list; }catch(Exception e){ e.printStackTrace(); return null; }finally{ //データベースからの切断 closeConnection(con); } } public void create(textbeen emp){ Connection con = null; try{ //データベースに接続 con = createConnection(); //データベースにSQL文を送信 String sql = "insert into TEXT values(?, ?, ?, ? ,?)"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, emp.getName()); stmt.setString(2, emp.getTitle()); stmt.setString(3, emp.getMail()); stmt.setString(4, emp.getText()); stmt.setString(5, emp.getPassword()); stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ //データベースからの切断 closeConnection(con); } } 以上のようにTextDAOクラスを作り、MVCモデルに従ってサーブレットからJSPにて追加用のページを表示したいのですが、どうすればDAOクラスのメソッドを使えるのかがわかりません。DAOクラスは入門書に書いてあったのを名前だけ変えたりして使っております。 すでにtextbeen.javaファイルにてsetName()やgetName()などは定義しております。 宜しく御願い致します。

    • ベストアンサー
    • Java
  • パッケージ org.gjt.mm.mysqlは存在しません

    いつもお世話になっております。 javaから、sqlを操作するプログラムを作っているのですが、 コンパイル時に「パッケージ org.gjt.mm.mysqlは存在しません」と、 エラーが発生してしまいます。 ソースコード----------------------- import java.sql.*; import org.gjt.mm.mysql.Driver; public class HelloWorldJDBCMySQL { public static void main(String[] args) { String user = "password"; String pass = "password"; try { // ドライバクラスをロード // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合 Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合 // データベースへ接続 // Connection con = // DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合 // MySQLの場合 String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url,user,pass); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM test"; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // nameを取得 String no = rs.getString("name"); // addressを取得 String lang = rs.getString("address"); // メッセージを取得 //String msg = rs.getString("MESSAGE"); // 表示 System.out.println(no + " " + lang ); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } ----------------------------------- 環境変数--------------------------- CLASSPATH .;C:\sample4\WEB-INF\lib\mysql-connector-java-5.1.12-bin.jar ----------------------------------- どなたか、ご教授いただけますでしょうか?

    • ベストアンサー
    • Java
  • Andoroidアプリ作成で・・・

    yahoo知恵袋の方でも質問させてもらってますが、こちらでも質問させていただきます。 Eclipse IndigoのEclipse IDE for Java DevelopersでAndroid2.3.3をターゲットに作成しています。 SDカードに保存されているtxtファイルからstring型としてデータを1行ずつ読み取り、int型に変換して処理を行った後、TextViewに格納するために再びstring型に変換しようとしているのですが開始直後にエラーで停止し、うまくいきません。 変換の仕方などいろいろ試しているのですが、str2をを以下のように変更したところ正常に「2234」が出てくるので、ファイルから読み込んだ数値の変換がおかしいのかなと思っています。 string str2 = "1234"; ファイルからの読み込みは正常にできており、以下のようにセットすればきちんと「5」が出てきます。 m_text01.setText(List[0]); どう対処すればいいのかわからず途方に暮れていますのでよかったら回答お願いします。 以下はソースコードです。 ----------------------------------- javaファイルの内容(抜粋) ----------------------------------- private String List[] = {"","","","","",""}; private TextView m_text01; public void onCreate(Bundle savedInstanceState) { m_text01 = (TextView)findViewById(R.id.TextView01); String str = ""; int i = 0; File directory = Environment.getExternalStorageDirectory(); String readFilePath = directory.getAbsolutePath() + "/アプリ名/data.txt"; BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(readFilePath)); str = reader.readLine(); while (str != null) { List[i] = str; i++; str = reader.readLine(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // ここでstring型で読み込まれたデータをint型に変換する String str2 = List[0] int num = Integer.valueOf(str2).intValue(); // int型に変換したデータを用いて演算を行う // (1000を足すことに意味はないが計算ができたか確かめるため) num = num+1000; // 計算が終わったらデータをstring型に戻す String str3 =String.valueOf(num); // TextViewにセット m_text01.setText(str3); } ----------------------------------- ---------------- data.txtの中身 ---------------- 5 4 3 2 1 0 ---------------

    • ベストアンサー
    • Java

専門家に質問してみよう