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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Q&A

1回答

3015閲覧

TCP/IPで受信したデータをMySQLに格納する

toukibi

総合スコア27

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

0グッド

0クリップ

投稿2015/12/24 06:58

編集2022/01/12 10:55

###前提・実現したいこと
Android端末とPC間でTCP通信を行い、受信したものをデータベースに格納するプログラムを開発したいのですが、うまくいきません。UDP通信も試したのですがそちらではうまく格納できました。
内容は変わっていないはずなのですがうまくいかない理由がさっぱり非常に困っています。どうか助けてください。
エラー文ではデータ容量が設定より多いという意味のようですが、UDPで格納できた時と送信しているものは変えていいませんし、テーブルのカラムもいじっていません。
TCP通信を通すとデータ量が変わるなどがあるのでしょうか?
格納しているデータはAndroid端末が取得したアクセスポイント情報で、MACアドレスやSSID,電波強度などの情報です。
それをsplitで分割して、配列の番号で振り分けて代入しているというものです。
どうぞよろしくお願いいたします。

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

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'tateyoko' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3868)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2546)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541)
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469)
at sqls.MServer.run(TCPWrite.java:78)

###ソースコード

java

1import java.io.IOException; 2import java.io.InputStream; 3import java.io.OutputStream; 4import java.net.ServerSocket; 5import java.net.Socket; 6import java.sql.Connection; 7import java.sql.DriverManager; 8import java.sql.SQLException; 9import java.sql.Statement; 10 11public class TCPWrite { 12 public static final int SERVER_PORT = 5431; 13 public static final int PACKET_SIZE = 1024; 14 15 public static void main(String[] args) { 16 ServerSocket serverSocket = null; 17 try { 18 serverSocket = new ServerSocket(SERVER_PORT); 19 System.out.println("WriteServerが起動しました(port=" 20 + serverSocket.getLocalPort() + ")"); 21 while (true) { 22 Socket socket = serverSocket.accept(); 23 new MServer(socket).start(); 24 } 25 } catch (IOException e) { 26 e.printStackTrace(); 27 }finally { 28 try { 29 if (serverSocket != null) { 30 serverSocket.close(); 31 } 32 } catch (IOException e) {} 33 } 34 } 35 36} 37 38class MServer extends Thread { 39 private static final int BUFSIZE = 1024; // 受信バッファサイズ 40 private Socket socket; 41 42 private static String url = "jdbc:mysql://192.168.82.89:3306/wifi_db"; 43 private static String driver = "com.mysql.jdbc.Driver"; 44 private static String id = "wifi"; 45 private static String pass = "neuro"; 46 private static Statement st; 47 private static String msg = "scan_tbl"; 48 49 50 public MServer(Socket socket) { 51 this.socket = socket; 52 //System.out.println("接続されました " 53 // + socket.getRemoteSocketAddress()); 54 } 55 56 public void run() { 57 try { 58 int rcevsize; 59 byte[] buf = new byte[BUFSIZE]; 60 InputStream in = socket.getInputStream(); 61 OutputStream out = socket.getOutputStream(); 62 Class.forName(driver); 63 Connection con = DriverManager.getConnection(url,id,pass); 64 st = con.createStatement(); 65 while ((rcevsize = in.read(buf)) != -1) { 66 String str = new String(buf); 67 System.out.println(str); 68 if(str.equals(msg)){ 69 String sql = "TRUNCATE " + str ; 70 st.executeUpdate(sql); 71 System.out.println("テーブル " + str +" の中身を削除しました"); 72 }else{ 73 String wifi[] = str.split(","); 74 String sql = "INSERT INTO " + "`"+wifi[0]+"`" +"(`macaddress`,`ssid`,`level`,`time`,`coord`,`direction`,`angle`,`tateyoko`)" 75 + "VALUES('" + wifi[1] + "','" + wifi[2] + "','" + wifi[3] + "','"+ wifi[4] + "','" + wifi[5] + "','" + wifi[6] + "','"+ wifi[7]+ "','"+ wifi[8] +"')"; 76 st.executeUpdate(sql); 77 out.write(buf, 0, buf.length); 78 } 79 } 80 }catch (IOException e) { 81 e.printStackTrace(); 82 }catch(SQLException e){ 83 e.printStackTrace(); 84 }catch(ClassNotFoundException e){ 85 System.out.println("ドライバが見つかりません"); 86 }finally { 87 try { 88 if (socket != null) { 89 socket.close(); 90 } 91 } catch (IOException e) { 92 System.out.println("切断されました " 93 + socket.getRemoteSocketAddress()); 94 } 95 } 96 } 97 98}

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

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

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

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

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

guest

回答1

0

'tateyoko' カラムに対して、定義したサイズより大きいデータで登録したから、このエラーが出てます。
テーブル定義とwifi[8]の値を確認してください。

投稿2015/12/24 07:12

YiLi

総合スコア96

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問