Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

[ask] simpan text file (*.txt) ke MySQL

salam kenal master2 JAVA...

gimana nyimpan file text secara langsung ke MySQL...? data saya berupa text di
notepad dengan dengan beberapa field yg dipisahkan oleh tanda "|",
potongan datanya seperti ini >>

image
image


sebelumnya saya sudah googling dapat link http://www.roseindia.net/answers/viewqa ... mysql.html , namun data yg tersimpan belum sesuai harapan saya, karena data tersimpan tidak runtun, hanya sebagian data saja yg tersimpan. berikut codenya >>>

import java.io.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;

public class InsertFileData{
    public static void main(String[]args){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/db_autonomous", "root", "");
        Statement st=con.createStatement();

        //FileInputStream fstream = new FileInputStream("D:\\telex_tab.txt");
        FileInputStream fstream = new FileInputStream("D://Longtele/longtele6baris.txt");
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        ArrayList list=new ArrayList();
        while ((strLine = br.readLine()) != null){
            list.add(strLine);
        }
       
        Iterator itr;
        for (itr=list.iterator(); itr.hasNext(); ) {
            String str=itr.next().toString();
            String [] splitSt =str.split("|");
            String address="",time="",day="",hour="",minute="",second="";
            for (int i = 1 ; i < splitSt.length ; i++) {
                address =   splitSt[1];
                time    =   splitSt[2];
                day     =   splitSt[3];
                hour    =   splitSt[4];
                minute  =   splitSt[5];
                second  =   splitSt[6];
            }

            int k=st.executeUpdate(
                "insert into testlongtele(address, time, day, hour, minute, second)"
                + "values('"+address+"','"+time+"','"+day+"','"+hour+"','"+minute+"','"+second+"')");
        }
    }
        catch(  ClassNotFoundException | SQLException | IOException e){
       
        }
    }
}

berikut hasil penampakan saat di save ke database >>>

image

untuk code diatas, mohon dikoreksi, code apa saja yg perlu saya
tambahkan atau kurangi supaya bisa tersimpan di database-nya sesuai
dengan field-nya masing2...?
mohon pencerahannya

makasih

Comments

  • edited March 2013
    http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    tau apa ndak, mysql punya perintah :

    LOAD DATA
    INFILE 'test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY "|"  LINES TERMINATED BY "\n"
    (field_1, field_2, field_3, ... field_n);

    ???

    kagak perlu repot-repot diparsing baris perbaris

    dengan catatan, kalo ngomong data yg berkaitan dgn tanggal
    mysql hanya mau menerima format : "YYYY-MM-DD" ... kagak bisa kalo format lain
  • edited March 2013
    makasih banget atas pencerahannya mas/mbak...:)
    kalau soal format DATE utk MySQL saya sudah tahu sebelumnya...

    sebelum nanya diforum ini, saya juga sudah punya referensi dari web java2s.com yaitu :

    http://www.java2s.com/Code/Java/Database-SQL-JDBC/LoadingaFlatFiletoaMySQLTablefileiscommaseparated.htm

    http://www.java2s.com/Code/Java/Database-SQL-JDBC/LoadingaFlatFiletoaMySQLTablefileisterminatedbyrnusethisstatement.htm

    ini code-nya >>>

         public static void main(String[] argv) throws Exception {
       
        String username     = "root";
        String password     = "";
        String filename     = "D://Longtele/telex.txt";
        String tablename    = "longtele";
          
        Connection koneksi  = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/db_autonomous", username, password);
       
        Statement stmt      = koneksi.createStatement();
      
      /*
       * stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE " + tablename);
    *
       * file is terminated by \r\n, use this statement
      *  stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE "
       *                   + tablename + "FIELDS TERMINATED BY ','");
      */

        stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE "
                + tablename + " FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' "); 
       
      }

    saya mendapatkan error seperti ini >>>

    Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'waktu' at row 1
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3564)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1664)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1583)
        at TextToMySQL.Main.main(Main.java:32)
    Java Result: 1



    mohon pencerahannya sekali lagi mas/mbak, makasih :)

  • struktur table ?
    sample isi file text ?


  • isi text sama seperti yg diatas :)

    Address      | System Time (sec)        | D       | H      | M      | S 
    00471520     | 715018                       | 08     | 06     | 36     | 058     
    00471540     | 715338                       | 08     | 06     | 42     | 018
    00471560     | 715659                        | 08     | 06     | 47     | 039
    00471580     | 715979                        | 08      | 06    | 52     | 059
    004715A0    | 716300                       | 08     | 06     | 58      | 020
    Closing all windows ... finished

    Client closed !


    strukturnya untuk database pake InnoDB dengan tabel tipe field varchar dengan length value utk alamat (10), waktu (10), hari (5), jam (5), menit (5), detik (5).
  • edited March 2013
    mas, lebih baik situ posting sample data apa adanya, copy paste apa adanya

    soalnya, ini cuma contoh, masalah baris baru,
    ada beda antara windows dan linux, "\r\n" (0x0D0A) dan "\n" (0x0A)
    dan ada hal lain yg perlu di cek

    kalo dilihat hasil posting dimari kagak mencerminkan bentuk asli,
    copas aja ke pastebin

    masalah struktur table, copy paste saja apa ada nya dari DDL
    gak cuma butuh liat panjang, tapi juga tipe field nya, termasuk attribut kalo ada
  • maaf mas...

    1. yg saya posting itu isi datanya apa adanya gak ada manipulasi, yg membedakan hanya nama file-nya saja.
    2. saya menggunakan os windows dengan IDE netbeans 7.1.2
    3. soal struktur table DDL saya belum ngerti maksud yg anda utarakan mas.
    4. seperti yg sudah saya posting saya menggunakan database dengan type INNODB
    5. utk coloumn field saya menggunakan type VARCHAR dengan length yg berbeda2
    6. kolom2 tersebut untuk parameter COLLATION,  ATTRIBUT, AUTOINCREMENT, NULL, INDEX, COMMENTS sengaja saya kosongkan parameternya (cuma diisi NAME, TYPE, LENGTH/VALUE).




  • edited March 2013
    ok,

    ada text editor yg bisa liat hexa kode dari file text nya ?
    gw pake ultraedit, bisa dilihat hexa kode nya, cek dolo line terminate nya 0D0A atau cuma 0A

    kalo liat pesan error ini :

    Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'waktu' at row 1

    struktur ini :
    alamat (10), waktu (10), hari (5), jam (5), menit (5), detik (5).

    data ini :
    00471520     | 715018                       | 08     | 06     | 36     | 058     

    kalo gw cek di editor gw, masing2 length nya :
    13, 30, 8, 8, 8, 9

    bener kalo sampai nungul peringatan itu ...
    string sepanjang 30 char, "dipaksa" masuk ke field sepanjang 10 char

    field yg lain mestinya "teriak" juga ...

    paling gampang, lebarkan lagi length field di table nya
    alamat (15), waktu (35), hari (10), jam (10), menit (10), detik (10)

    kalo mau sedikit repot,
    baca ulang link yg gw tunjukin
    ada contoh bagaimana memanipulasi string yg terbaca sebelum masuk table
  • kebetulan saya pake notepad++, dan saya sudah lebarkan length field di table-nya sesuai sarannya.
    data-nya tersimpan dengan baik di database :)

    TAPI dengan catatan line ke 7-9 dihapus, yg berisi kalimat

    Closing all windows ... finished

    Client closed !


    kalau gak dihapus maka akan muncul pesan kesalahan lagi :)

    Exception in thread "main" java.sql.SQLException: Row 7 doesn't contain data for all columns



    sesuai link yg dikasih kira2 kalau pakai command IGNORE number LINES bisa diterapkan gak mas...? soalnya data ini di receive setiap hari dengan jumlah line yg berbeda2 dan selalu diakhiri dengan kalimat Closing all windows ... finished

    baru sekali ini saya nanya di jawab begitu antusias dan sangat detil, sudah banyak forum yg saya ikuti, baru kali ini mendapatkan pencerahan yg baik dan bener :D
    makasih bgt mas :)


  • edited March 2013
    lha kalo situ nanya nya bener ya jawabnya bener

    ralat :
    kagak bisa pake IGNORE
    IGNORE hanya mengabaikan "n" baris awal, bukan terakhir

    bisa dengan membuang 3 baris terakhir sebelum di proses

    http://docs.oracle.com/javase/6/docs/api/java/io/RandomAccessFile.html

    - ambil ukuran file
    - new_size = file_size - length_row_79 (panjang line termasuk karakter baris baru)
    - truncate file, simpan hanya seukuran new_size
  • edited March 2013
    makasi link-nya :)

    tanya lagi :

    kalau diantara field ada data yang dipisahkan oleh spasi seperti contoh dibawah ini gimana mas...?

    Address       | System Time (sec)   | D       | H      | M      | S      | Sw. Reg. C   Sw. Reg. B   Sw. Reg. A |
    00471520     | 715018                    | 08     | 06     | 36     | 058   | 00010000     00000000     00010000 |         
    00471540     | 715338                    | 08     | 06     | 42     | 018   | 00010000     00000000     00010000 |  
    00471560     | 715659                    | 08     | 06     | 47     | 039   | 00010000     00000000     00010000 |
    00471580     | 715979                    | 08     | 06     | 52     | 059   | 00010000     00000000     00010000 |
    004715A0     | 716300                    | 08     | 06     | 58      | 020   | 00010000     00000000     00010000 |

    saya mendapatkan error seperti ini ketika coba load ke tabel

    Exception in thread "main" java.sql.SQLException: Row 1 was truncated; it contained more data than there were input columns

    tabel dibuat dengan length menyesuaikan dengan panjang data [+/- 36]
  • edited March 2013
    wadoh ?

    itu baris kosong nya berarti ada "\n\n" dobel ya ?

    yg kepikiran di gw, itu manipulasi sekalian saat membuang 3 baris terakhir ...

    ambil seluruh isi file (gw kagak tau ini dapet tipe nya binary atau string)
    cast ke string
    search and replace "\n\n" jadi "\n"
    buang 3 baris terakhir (kayanya bakal ada penyesuaian panjang line, soalnya "\n\n" di baris akhir pasti kena juga)
    simpan
    proses
  • kalau diantara field ada data yang dipisahkan oleh spasi seperti contoh dibawah ini gimana mas...?image


    image

    ketika di eksekusi dengan code >>

    public static void main(String[] argv) throws Exception {&nbsp; &nbsp; <br>&nbsp; &nbsp; String username&nbsp; &nbsp; &nbsp;= "root";<br>&nbsp; &nbsp; String password&nbsp; &nbsp; &nbsp;= "";&nbsp; &nbsp; &nbsp;&nbsp; <br>&nbsp; &nbsp; String tablename&nbsp; &nbsp; = "tbl_longtelemetry";<br>&nbsp; &nbsp; String filename&nbsp; &nbsp; &nbsp;= "D://tele20130303.txt";&nbsp; &nbsp; &nbsp;&nbsp; <br>&nbsp; &nbsp; Connection koneksi&nbsp; = DriverManager.getConnection(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "jdbc:mysql://localhost:3306/db_autonomous", username, password);<br>&nbsp; &nbsp; <br>&nbsp; &nbsp; Statement stmt&nbsp; &nbsp; &nbsp; = koneksi.createStatement();&nbsp;&nbsp;&nbsp; <br>&nbsp; &nbsp; stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE "<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + tablename + " FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n' ");&nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp; }

    ketika di eksekusi error yg didapat >>> Exception in thread "main" java.sql.SQLException: Row 1 was truncated; it contained more data than there were input columns<br><br>
    tapi kalau data didalam field dihapus semua, hanya menyisahkan header-nya saja
    [Address
    | System Time (sec) | D | H | M | S | Cmd Counter | Sw.
    Reg. C Sw. Reg. B Sw. Reg. A Sw. Reg. F | Main Bus Voltage |],
    data bisa tersimpan kedalam database.

    opini
    saya >>> karena data pd field {Sw. Reg. C Sw. Reg. B Sw.
    Reg. A Sw. Reg. F } berisi data {00010000 00000000 00000000
    01000101 } ada yg berisi spasi, menyebabkan error wktu code di
    run dan code menyebutkan "FIELDS TERMINATED BY '|' ..... CMIIW

    mohon pencerahannya mass, makasih

  • itu format file text nya beda ?

    kalo separator nya spasi : FIELDS TERMINATED BY " "
  • sebenarnya ini baru sebagian data aslinya mas, cuma karena kolom-nya terlalu panjang (ada 20) dan fieldnya ada puluhan dan bahkan beberapa ada yg ratusan. makanya waktu saya posting disini hanya 6 kolom yg saya posting. tapi kolom2 yg lain itu bentuk datanya sama persis seperti kolom2 yg sudah saya posting. yang berbeda hanya pada kolom
    | Sw. Reg. C Sw. Reg. B Sw. Reg. A Sw. Reg. F |

    kolom2 dengan pemisah '|' itu sudah satu kesatuan mas.

    tapi kenapa kalau data2 tsb dihapus, hanya meninggalkan HEADER-nya saja dan dengan   "FIELDS TERMINATED BY '|'  bisa disimpan tanpa terjadi error...???
  • maksudnya format per baris nya kagak konsisten ?

    ada baris data yg seluruhnya pake delimiter "|"

    tapi ada baris data lain yg hanya sebagian pake delimiter "|" dan sebagian pake " "

    ???

    gw mengabaikan header, soalnya pasti dibuang pake IGNORE
  • iya memang seperti tidak konsisten. tapi kalau dilihat lagi datanya itu ada pola-nya.
    semua kolom delimiter-nya pakai '|', hanya saja utk kolom | Sw. Reg. C Sw. Reg. B Sw. Reg. A Sw. Reg. F | memiliki anak dengan delimiter 'spasi'.
    kira2 solusinya bagaimana mas...? tanpa harus me-replace si-spasi dengan si-| ...???

    image
  • edited March 2013
    kalo gw liat sebenernya :
    - spasi bisa dibuang, karena data selalu satu kata (periksa dolo, bener atau kagak)
    - yg jadi masalah, jumlah spasinya kagak sama, dan tidak cuma 1
    - kalo hanya sekedar mereplace spasi jadi "|" pasti berantakan
    - "spasi" itu bisa jadi beneran spasi, bisa jadi tab atau white space lain



    ide nya sih :

    - replace spasi yg lebih dari 1, menjadi cuma 1 spasi, hasil akhir kemungkinan yg ada : " | " dan " "
    00471520     | 715018                    | 08     | 06     | 36     | 058   | 00010000     00000000     00010000 | 
    jadi :
    00471520 | 715018 | 08 | 06 | 36 | 058 | 00010000 00000000 00010000 |

    - replace " | " menjadi "|"
    00471520 | 715018 | 08 | 06 | 36 | 058 | 00010000 00000000 00010000 |
    jadi :
    00471520|715018|08|06|36|058|00010000 00000000 00010000|

    - replace spasi menjadi "|"
    00471520|715018|08|06|36|058|00010000 00000000 00010000|
    jadi :
    00471520|715018|08|06|36|058|00010000|00000000|00010000|



    itu ntar otomatis hasilnya :
    - separator hanya "|"
    - kagak ada spasi tersisa satu pun
    - lebar field db bisa di optimalkan

    yg bisa melakukan tugas di atas itu regex, regular expression

    kira-kira pola regexnya :
    search : "[ \t]+" (multi spasi & tab)
    replace : " " (1 spasi)

    sisanya replace string biasa tanpa regex
    " | " -> "|"
    " " -> "|"

    http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html
  • edited March 2013
    cara lain juga ada ...

    - replace spasi yg lebih dari 1, menjadi cuma 1 spasi, pake regex
    00471520     | 715018                    | 08     | 06     | 36     | 058   | 00010000     00000000     00010000 | 
    jadi :
    00471520 | 715018 | 08 | 06 | 36 | 058 | 00010000 00000000 00010000 |

    - pake model query :

    LOAD DATA
    INFILE 'test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY "|" LINES TERMINATED BY "\n"
    IGNORE 1 LINES
    ( @var_1 , @var_2 , ... , @var_n )
    SET
    field_1 = TRIM( @var_1 ), -- field pertama, sekalian di TRIM()
    field_2 = TRIM( @var_2 ), -- ... dst ...
    ...
    ...
    field_x = SUBSTRING_INDEX(TRIM( @var_n )," ",1), -- ambil string pertama sebelum spasi
    field_y = SUBSTRING_INDEX(SUBSTRING_INDEX(TRIM( @var_n )," ",2)," ",-1), -- ambil string kedua
    field_z = SUBSTRING_INDEX(TRIM( @var_n )," ",-1); -- ambil string ketiga / terakhir
  • edited March 2013
    atau kalo kagak mau mainan regex, cukup pake query :

    LOAD DATA
    INFILE 'test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY "|" LINES TERMINATED BY "\n"
    IGNORE 1 LINES
    ( @var_1 , @var_2 , ... , @var_n )
    SET
    field_1 = TRIM( @var_1 ), -- field pertama, sekalian di TRIM()
    field_2 = TRIM( @var_2 ), -- ... dst ...
    ...
    ...
    field_x = SUBSTRING_INDEX(TRIM( @var_n )," ",1), -- ambil string pertama sebelum spasi
    field_y = SUBSTRING_INDEX(TRIM(SUBSTRING(TRIM( @var_n ),LOCATE(" ",TRIM( @var_n ))))," ",1), -- ambil string kedua
    field_z = SUBSTRING_INDEX(TRIM( @var_n )," ",-1); -- ambil string ketiga / terakhir



    yg terakhir ini dengan syarat :
    yg delimiter spasi cuma mengandung 3 data,
    kalo lebih, ada tambahan lebih banyak pemakaian fungsi LOCATE(), SUBSTRING() dan TRIM()



    penjelasan utk field yg kedua :

    -- ambil string kedua
    -- field_y =
    --
    -- [5] ambil substring sebelum karakter spasi pertama yg ditemukan : "00000000"
    -- SUBSTRING_INDEX(
    --
    --   [4] bersihkan lagi spasi kiri kanan : "00000000[spasi_1]     00010000"
    --   TRIM(
    --
    --     [3] ambil substring, dari [spasi_1] kebelakang : "     00000000     00010000"
    --     SUBSTRING(
    --
    --       [1] bersihkan dolo spasi kiri kanan : "00010000     00000000     00010000"
    --       TRIM( @var_n ),
    --
    --       [2] cari lokasi pertama spasi, dari string yg sdh dibersihkan dari spasi kiri kanan :
    --       "00010000[spasi_1]     00000000     00010000"
    --       LOCATE(" ",TRIM( @var_n ))
    --     )
    --   )
    --   ," ",1
    -- ),



  • terima kasih solusinya mas, walau saya sedikit bingung dengan advice mas diatas :D

    btw, senin kemaren saya sudah bisa menyimpan ke database file ini [8 kolom]image
    file diatas merupakan editan [potongan] dari file asli yg terdiri dari 20 kolom, ini file-nya

    image


    code untuk 8 kolom >>>
     public static void main(String[] argv) throws Exception {
        String username     = "root";
        String password     = "";
        String filename     = "D://longtele8baris.txt";
        String tablename    = "longtele8";
          
        Connection koneksi  = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/db_autonomous", username, password);
       
        Statement stmt      = koneksi.createStatement();  
      
        stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE "
                + tablename + " FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n' IGNORE 2 LINES ");       
      }

    code untuk 20 kolom >>>
    public static void main(String[] argv) throws Exception {
       
        String username     = "root";
        String password     = "";
        String filename     = "D://longtele20baris.txt";
        String tablename    = "longtele20";
          
        Connection koneksi  = DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/db_autonomous", username, password);
       
        Statement stmt      = koneksi.createStatement();  
      
        stmt.executeUpdate("LOAD DATA INFILE \"" + filename + "\" INTO TABLE "
                + tablename + " FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n' IGNORE 2 LINES  ");
            
      }

    utk database telah saya sesuaikan dengan jumlah kolom dan panjang field-nya

    yg saya bingung, kenapa utk yg 8 kolom bisa tersimpan dengan baik, line by line. bahkan saya coba copas
    data tersebut, sehingga 1 file text berisi 1000 baris dapat langsung
    tersimpan dengan baik ke database. dan memang hanya membuat database
    sedikit lemot waktu di buka.

    sedangkan utk yg 20 kolom kenapa error yg saya dapatkan...? [Exception in thread "main" java.sql.SQLException: Row 1 was truncated; it contained more data than there were input columns]...???

    sorry kalau pertanyaan saya banyak dan muter2. tks

  • periksa tanda akhir baris beneran "\r\n" ?

    jangan2 cuma "\n"

    notepad++ bisa utk melihat karakter newline yg dipake
    View -> Show Symbol -> Show End of Line

    kalo yg nungul (CR)(LF) berarti pake "\r\n"
    kalo cuma (LF) pake "\n"



    peringatan nya sih artinya :
    pada baris pertama, jumlah kolom yg terbaca lebih banyak dari jumlah field db yg disediakan
  • sudah saya ikutin advice-nya mas, ternyata cuma LF ('\n") dan masih belum bisa juga :(
    saya juga buka pake excel datanya sudah pas 20 kolom. kenapa ya..?

    dan saya juga nyobain code ini mas,
    public static void main(String[]args){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con  = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/db_autonomous", "root", "");
            Statement st    = con.createStatement();

            //FileInputStream fstream = new FileInputStream("D:\\telex_tab.txt");
            FileInputStream fstream = new FileInputStream("D:\\Longtele/tele20130227.txt");
            DataInputStream in      = new DataInputStream(fstream);
            BufferedReader br       = new BufferedReader(new InputStreamReader(in));
            String strLine;
            ArrayList list          = new ArrayList();
            while ((strLine         = br.readLine()) != null){
                list.add(strLine);
            }
           
            Iterator itr;
            for (itr = list.iterator(); itr.hasNext(); ) {
                String str = itr.next().toString();
                String [] splitSt = str.split("|");
               
                String aa = ""; String bb = "";
                String cc = ""; String dd = "";
                String ee = ""; String ff = "";
                String gg = ""; String hh = "";
                String ii = ""; String jj = "";
                String kk = ""; String ll = "";
                String mm = ""; String nn = "";
                String oo = ""; String pp = "";
                String qq = ""; String rr = "";
                String ss = ""; String tt = "";
               
                for (int i = 0 ; i < splitSt.length ; i++) {
                    aa =   splitSt[0];  bb =   splitSt[1];
                    cc =   splitSt[2];  dd =   splitSt[3];
                    ee =   splitSt[4];  ff =   splitSt[5];
                    gg =   splitSt[6];  hh =   splitSt[7];
                    ii =   splitSt[8];  jj =   splitSt[9];
                    kk =   splitSt[10]; ll =   splitSt[11];
                    mm =   splitSt[12]; nn =   splitSt[13];
                    oo =   splitSt[14]; pp =   splitSt[15];
                    qq =   splitSt[16]; rr =   splitSt[17];
                    ss =   splitSt[18]; tt =   splitSt[19];               
                }
                          
                int k = st.executeUpdate
                    (
                        "insert into longtele20(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) "
                        + "values("
                        + " '"+aa+"','"+bb+"','"+cc+"','"+dd+"','"+ee+"', "
                        + " '"+ff+"','"+gg+"','"+hh+"','"+ii+"','"+jj+"', "
                        + " '"+kk+"','"+ll+"','"+mm+"','"+nn+"','"+oo+"', "
                        + " '"+pp+"','"+qq+"','"+rr+"','"+ss+"','"+tt+"') "
                    );
            }
        }
            catch(Exception e){       
            }
        }

    datanya ke-save ke DB tapi hanya heder-nya saja dan itu pun sepotong2 :(
    image
    mohon pencerahannya mas dan maaf kalau pertanyaannya banyak dan muter2,

    makasih


  • edited March 2013
    kelamaan kalo diparsing di koding, percaya ama gw

    http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/

    Where the Transaction method had maximum throughput of 1,588 inserts per second, Load Data allowed MySQL to process process a staggering 28,108 inserts per second.

    normal transaction cuma max 1.588 insert per detik
    dibanding load file 28.108 insert per detik
    pilih mana ?

    kagak bisa itu pesan error nya apa ?
    salahnya dimana ?

    + sample data 2-3 row awal

    kalo susah posting dimari, posting ke pastebin
  • error-nya masih sama mas >>> Row 1 was truncated; it contained more data than there were input columns :|
  • mana datanya ?
  • ini mas...

    Address | System Time (sec) | D | H | M | S | Cmd Counter | Sw. Reg. C Sw. Reg. B Sw. Reg. A Sw. Reg. F | Main Bus Voltage | System Current | Temp. PCU | Temp. PCDH | Temp. Bat | Temp. MP | Temp. +Z | Temp. -Z | Temp. +X | Temp. -X | Temp. -Y | Temp. S-Band |

    004750A0 | 211688 | 02 | 10 | 48 | 08 | 1182 | 00010000 00000000 00010000 01000101 | 14.7 | 349 | 14 | 9 | 11 | 7 | 8 | 6 | 5 | 6 | 4 | 7 |
    004750C0 | 212014 | 02 | 10 | 53 | 034 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 15 | 9 | 11 | 7 | 7 | 6 | 6 | 6 | 4 | 7 |
    004750E0 | 212341 | 02 | 10 | 59 | 01 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 15 | 9 | 11 | 7 | 7 | 6 | 6 | 6 | 5 | 7 |
    00475100 | 212667 | 02 | 11 | 04 | 027 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 11 | 7 | 8 | 7 | 6 | 7 | 6 | 7 |
    00475120 | 212994 | 02 | 11 | 09 | 054 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 349 | 14 | 9 | 11 | 7 | 9 | 7 | 6 | 7 | 7 | 7 |
    00475140 | 213320 | 02 | 11 | 15 | 020 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 11 | 7 | 9 | 7 | 6 | 7 | 7 | 7 |
    00475160 | 213647 | 02 | 11 | 20 | 047 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 12 | 7 | 9 | 7 | 7 | 7 | 7 | 7 |
    00475180 | 213973 | 02 | 11 | 26 | 013 | 1182 | 00010000 00000000 00010000 01000101 | 14.7 | 338 | 15 | 9 | 12 | 7 | 9 | 7 | 7 | 7 | 6 | 7 |
  • edited March 2013
    sudah gw tebak ...

    kalo di split by "|" perbaris itu bukan 20 kolom, tapi 21 kolom
    terakhir ada karakter "|", biarpun sesudahnya kagak ada data, tetep itu terbaca jadi kolom

    baca ulang posting gw sebelumnya, yg ketiga

    - delimiter baris "\n"
    - delimiter kolom "|"
    - tapi pembacaan di masukan semua ke variabel query
    - isi sebenarnya di atur pake SET
    - delimiter " " juga terbaca, jadi data yg dipisah pake " " bisa langsung dialokasikan ke field yg dituju
    - kalo liat sample data diatas, pembacaan kolom diarahkan ke 21 variabel @var_1 s/d @var_21
    - field di table bisa langsung disiapkan dan didefinisikan : 23 field

    sudah, fokus pake cara ketiga yg gw tulis

    kalo ada masalah, posting pesan error dan posting query yg sudah dicoba dibuat
  • edited March 2013
    oke mas, makasih banyak advice-nya, udah clear :)
  • edited April 2013
    mas, mohon advice-nya donk...

    begini mas, file ini dibawah ini, mau di save ke dlm DB. tapi sebelum di save, mau ditambahin 1 kolom utk UTC yg formatnya (DATETIME yyyy-MM-dd  HH:mm:ss)

    Address | System Time (sec) | D | H | M | S | Cmd
    Counter | Sw. Reg. C Sw. Reg. B Sw. Reg. A Sw. Reg. F | Main
    Bus Voltage | System Current | Temp. PCU | Temp. PCDH |
    Temp. Bat | Temp. MP | Temp. +Z | Temp. -Z |
    Temp. +X | Temp. -X | Temp. -Y | Temp. S-Band |

    004750A0 | 211688 | 02 | 10 | 48 | 08 | 1182 | 00010000 00000000 00010000 01000101 | 14.7 | 349 | 14 | 9 | 11 | 7 | 8 | 6 | 5 | 6 | 4 | 7 |
    004750C0 | 212014 | 02 | 10 | 53 | 034 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 15 | 9 | 11 | 7 | 7 | 6 | 6 | 6 | 4 | 7 |
    004750E0 | 212341 | 02 | 10 | 59 | 01 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 15 | 9 | 11 | 7 | 7 | 6 | 6 | 6 | 5 | 7 |
    00475100 | 212667 | 02 | 11 | 04 | 027 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 11 | 7 | 8 | 7 | 6 | 7 | 6 | 7 |
    00475120 | 212994 | 02 | 11 | 09 | 054 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 349 | 14 | 9 | 11 | 7 | 9 | 7 | 6 | 7 | 7 | 7 |
    00475140 | 213320 | 02 | 11 | 15 | 020 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 11 | 7 | 9 | 7 | 6 | 7 | 7 | 7 |
    00475160 | 213647 | 02 | 11 | 20 | 047 | 1182 | 00010000 00000000 00010000 01000101 | 14.8 | 338 | 14 | 9 | 12 | 7 | 9 | 7 | 7 | 7 | 7 | 7 |
    00475180 | 213973 | 02 | 11 | 26 | 013 | 1182 | 00010000 00000000 00010000 01000101 | 14.7 | 338 | 15 | 9 | 12 | 7 | 9 | 7 | 7 | 7 | 6 | 7 |

    case ini ada hubungannya sama case ini >>> http://www.diskusiweb.com/discussion/43789/ask-java-datetime#Item_7 >>>> hasil akhir dari case ini kan berupa DATETIME spt ini >>> 2013-03-28 12:55:09

    nah, kolom UTC tambahan di DB nantinya merupakan PENJUMLAHAN dari DATETIME [2013-03-28 12:55:09] dengan | D | H | M | S |. kira2 seperti ini mas nantinya

    | D | H | M | S |.       2013-03-28 12:55:09 (x)       kolom UTC yg akan di save ke DB                     
                                  
    02 | 10 | 48 | 08        x + 02 | 10 | 48 | 08              2013-03-30 23:43:17                  
    02 | 10 | 53 | 034      x + 02 | 10 | 53 | 034             2013-03-30 23:48:43
    02 | 10 | 59 | 01        x + 02 | 10 | 59 | 01               dst..
    02 | 11 | 04 | 027       x + 02 | 11 | 04 | 027
    dst...

    kalau dipikiran saya
    1. baca file text trs di save ke temporary file
    2. tentukan DATETIME
    3. baca | D | H | M | S |.  baris perbaris dan jumlahkan DATETIME dengan | D | H | M | S |. sampai baris terakhir
    4. hasil penjumalahan di save ke UTC


    kira2, ada advice lainnya yg mungkin bisa mepersingkat alur kerja, mohon pencerahannya :)

  • struktur table tempat save hasil pembacaan file text di atas kaya apa ?
  • edited April 2013
    imagekira2 spt ini mas >>>

    image


    imageaslinya kn ada 20 kolom, di ADD 1 kolom UTC
  • edited April 2013
    LOAD DATA
    INFILE 'test.txt'
    INTO TABLE test
    FIELDS TERMINATED BY "|" LINES TERMINATED BY "\n"
    IGNORE 1 LINES
    ( @v1 , @v2 , @v3 , @v4 , @v5 , @v6 , @v7 , @v8 , @v9 , @v10 , @v11 , @v12 , @v13 , @v14 , @v15 , @v16 , @v17 , @v18 , @v19 , @v20 , @dummy )
    SET
    field_1 = TRIM( @v1 ),
    field_2 = TRIM( @v2 ),
    field_3 = TRIM( @v3 ),
    field_4 = TRIM( @v4 ),
    field_5 = TRIM( @v5 ),
    field_6 = TRIM( @v6 ),
    field_7 = TRIM( @v7 ),
    field_8 = TRIM( @v8 ),
    field_9 = TRIM( @v9 ),
    field_10 = TRIM( @v10 ),
    field_11 = TRIM( @v11 ),
    field_12 = TRIM( @v12 ),
    field_13 = TRIM( @v13 ),
    field_14 = TRIM( @v14 ),
    field_15 = TRIM( @v15 ),
    field_16 = TRIM( @v16 ),
    field_17 = TRIM( @v17 ),
    field_18 = TRIM( @v18 ),
    field_19 = TRIM( @v19 ),
    field_20 = TRIM( @v20 ),
    UTC = ADDTIME( "2013-03-28 12:55:09", CONCAT( @v3 , " " , @v4 , ":" , @v5 , ":" , @v6 ) );

    itu field_1 s/d field_20 elo ganti sendiri sesuai nama field di table




    btw, tuh field ke-8 kagak jadi di parsing ? :D

    cara di atas pan dari posting-posting sebelumnya sudah gw tulis
    LOAD FILE sembari diproses
    termasuk kalo mau parsing field ke-8
  • edited April 2013
    gak perlu diparsing mas kolom 8, kmren waktu load langsung bisa masuk. lagian datanya itu 1 paket [runtun], jadi emng gak boleh di parse mas.

    btw makasih advice-nya, saya coba dulu


    NB : CONCAT disini bukannya kebalikan SUBSTRING mas...? utk menggabungkan STRING mas...? :D

    stmt.executeUpdate(
                        "LOAD DATA INFILE \"" + "D:/Longtele/tele"
                        + Telemetry.cmbYear .getSelectedItem()
                        + Telemetry.cmbMonth.getSelectedItem()
                        + Telemetry.cmbDay  .getSelectedItem()
                        + ".txt" 
                        + "\" INTO TABLE " + TableTele
                        + " FIELDS TERMINATED BY '|' LINES STARTING BY '0' "
                        + "SET"
                        + "ADDRESS          = TRIM(@v1), SYSTEM_TIME    = TRIM(@v2), DAY            = TRIM(@v3),"
                        + "HOUR             = TRIM(@v4), MINUTE         = TRIM(@v5), SECOND         = TRIM(@v6),"
                        + "COUNTER_CMD      = TRIM(@v7), SWITCH_REG.    = TRIM(@v8), MAINBUS_VOLTAGE= TRIM(@v9),"
                        + "SYSTEM_CURRENT   = TRIM(@v10),PCU_TEMP.      = TRIM(@v11),PCDH_TEMP.     = TRIM(@v12),"
                        + "BATTERY_TEMP.    = TRIM(@v13),MP_TEMP.       = TRIM(@v14),Z+_TEMP.       = TRIM(@v15),"
                        + "Z-_TEMP.         = TRIM(@v16),X+_TEMP.       = TRIM(@v17),X-_TEMP.       = TRIM(@v18),"
                        + "Y-_TEMP.         = TRIM(@v19),S-BAND_TEMP.   = TRIM(@v20), "
                        + "UTC = ADDTIME('2013-03-28 12:55:09', CONCAT(@v3, ' '  ,@v4, ':' ,@v5, ':' ,@v6))"
                        );        
                }

    ada ERROR spt ini >>>

    SEVERE: null
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SETADDRESS          = TRIM(@v1), SYSTEM_TIME    = TRIM(@v2), DAY            = TR' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)






  • edited April 2013
    query nya dicoba dolo pake db gui sebelum dipindah ke java nya

    kalo query di db gui sudah jalan bener
    tapi bermasalah di java ... berarti salah menyusun string query di java

    kalo query di db gui aja sudah gagal
    posting kemari query yg ditulis



    btw, ini nya kok ilang ?

    ( @v1 , @v2 , @v3 , @v4 , @v5 , @v6 , @v7 , @v8 , @v9 , @v10 , @v11 , @v12 , @v13 , @v14 , @v15 , @v16 , @v17 , @v18 , @v19 , @v20 , @dummy )

    itu penting !!!
    itu variabel mysql yg dipake utk menampung hasil parsing text file nya sebelum dikirim ke field yg sebenernya

    lalu ...

    + "SET"
    + "ADDRESS ..."

    itu kalo di sambung beneran kan jadinya : SETADDRESS bukan SET ADDRESS
    kagak ada spasinya ... jangan heran kalo dikomplain di java nya
  • edited April 2013
    sudah saya coba run di DB spt ini >>>

    LOAD DATA INFILE 'D:/Longtele/tele20130401.txt' INTO TABLE tbl_longtelemetry
    FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES
     (@v1, @v2@v3@v4@v5@v6@v7@v8@v9, @v10, @v11, @v12, @v13, @v14, @v15, @v16, @v17, @v18, @v19, @v20, @dummy)
    SET
    ADDRESS = TRIM(@v1),
    SYSTEM_TIME = TRIM(@v2),
    DAY = TRIM(@v3),
    HOUR = TRIM(@v4),
    MINUTE = TRIM(@v5),
    SECOND = TRIM(@v6),
    COUNTER_CMD 
    = TRIM(@v7),
    SWITCH_REG = TRIM(@v8),
    MAINBUS_VOLTAGE= TRIM(@v9),

    SYSTEM_CURRENT = TRIM(@v10),
    PCU_TEMP = TRIM(@v11),
    PCDH_TEMP =
    TRIM(@v12),
    BATTERY_TEMP = TRIM(@v13),
    MP_TEMP = TRIM(@v14),
    Z_PLUS_TEMP
    = TRIM(@v15),
    Z_MINUS_TEMP  = TRIM(@v16),
    X_PLUS_TEMP =
    TRIM(@v17),
    X_MINUS_TEMP = TRIM(@v18),
    Y_MINUS_TEMP = TRIM(@v19),

    S_BAND_TEMP = TRIM(@v20),
    UTC = ADDTIME('2013-03-28 12:55:09', CONCAT(@v3, ' '  ,@v4, ':' ,@v5, ':' ,@v6))


    ada notifikasi spt ini mas >>> #1062 - Duplicate entry '' for key 'PRIMARY'

    padahal di table-nya yg saya set PRIMARY hanya field ADDRESS.
    kenapa yah...?



  • edited April 2013
    ralat pertanyaan mas :)

    potongan awal data TXT diatas kn spt ini :

    Address | System Time (sec) | D | H | M | S |  ... | Temp. S-Band |

    004750A0 | 211688 | 02 | 10 | 48 | 08 |       ...   | 7 |
    004750C0 | 212014 | 02 | 10 | 53 | 034 |      ...   | 7 |
    004750E0 | 212341 | 02 | 10 | 59 | 01 |       ...   | 7 |
    00475100 | 212667 | 02 | 11 | 04 | 027 |      ...   | 7 |
    00475120 | 212994 | 02 | 11 | 09 | 054 |      ...   | 7 |
    00475140 | 213320 | 02 | 11 | 15 | 020 |      ...   | 7 |
    00475160 | 213647 | 02 | 11 | 20 | 047 |      ...   | 7 |
    00475180 | 213973 | 02 | 11 | 26 | 013 |      ...   | 7 |
    dst...

    dari hasil perhitungan DATETIME 2013-03-28 12:55:09, hasil pembahasan pada link ini http://www.diskusiweb.com/discussion/43789/ask-java-datetime#Item_7
    akan ditambahkan dengan System Time baris per baris spt ini

    2013-03-28 12:55:09 + 211688 = 2013-03-30 23:43:17
    2013-03-28 12:55:09 + 212014 = 2013-03-30 23:48:43
    2013-03-28 12:55:09 + 212341 = 2013-03-30 23:54:10
    2013-03-28 12:55:09 + 212667 = 2013-03-30 23:59:36
    dst...


    tentunya hasil perhitungan (yg berwarna biru) diperoleh dari syntax yg mas berikan sebelumnya. yaitu :

                String secondString = "344714";
                long secondVal = Long.parseLong( secondString );

                String dateString = "2013-04-01 12:40:23";
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date dateVal = dateFormat.parse(dateString);

                Date startVal = new Date ( dateVal.getTime() - (secondVal * 1000) );
                
                //DATE to STRING
                SimpleDateFormat dateformatyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String startVal_to_string = dateformatyyyyMMdd.format(startVal);
                
                System.out.println("String :  " + startVal.toString());
                System.out.println("TIME START " + startVal_to_string);  //  2013-03-28 12:55:09


      tentunya hasil perhitungan (yg berwarna hijau) diperoleh dari syntax yg mas berikan sebelumnya. yaitu          
                //save to long tele
                String SystemTimeLongtele   = "212667";
                long SystemTimeLong         = Long.parseLong(SystemTimeLongtele);
                
                Date saveToLongtele = new Date (startVal.getTime() + (SystemTimeLong * 1000) ) ;
                
                //DATE to STRING
                SimpleDateFormat dateformat_yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String saveToLongteleDB = dateformatyyyyMMdd.format(saveToLongtele);
                
                System.out.println(saveToLongteleDB);  ///yg akan di save ke DB // 2013-03-30 23:59:36
                
                
    nah, hasil perhitungan (yg berwarna hijau) akan di save ke file TXT (boleh bikin baru atau ditimpa TXT sebelumnya) dan kemudian ke DB

    kira2 potongan TXT file sebelum di save ke DB menjadi spt ini mas >>>

    Address | System Time (sec) | D | H | M | S |  ... | Temp. S-Band     | UTC

    004750A0 | 211688 | 02 | 10 | 48 | 08 |       ...   | 7             | 2013-03-30 23:43:17
    004750C0 | 212014 | 02 | 10 | 53 | 034 |      ...   | 7           | 2013-03-30 23:48:43
    004750E0 | 212341 | 02 | 10 | 59 | 01 |       ...   | 7            | 2013-03-30 23:54:10
    00475100 | 212667 | 02 | 11 | 04 | 027 |      ...   | 7            | 2013-03-30 23:59:36
    00475120 | 212994 | 02 | 11 | 09 | 054 |      ...   | 7            | dst...
    00475140 | 213320 | 02 | 11 | 15 | 020 |      ...   | 7            |
    00475160 | 213647 | 02 | 11 | 20 | 047 |      ...   | 7            |
    00475180 | 213973 | 02 | 11 | 26 | 013 |      ...   | 7            |
    dst...

    kira2 spt ini alur yg ada dipikiran saya.
    yg jadi masalah saya, bagaimana pengimplementasiannya ke dalam syntax2 java.
    mohon advice-nya mas :)
  • 1-1 ... yg masalah primary sudah beres ?
  • utk PRIMARY sudah beres mas, table-nya di setting gak pake PRIMARY baru bisa nge-load isi file.
    tapi kok bisa error gitu ya klo ada primary key-nya...? btw makasih mas... :)

    nah, tapi metodenya itu kn pake CONCAT, utk menggabungkan STRING. bukan untuk menjumlahkan DATETIME mas... :) hasil isi field UTC semua 2013-03-31 11:55:09

    maunya sih spt pertanyaan RALAT saya di atas :D



  • edited April 2013
    "... tapi metodenya itu kn pake CONCAT, utk menggabungkan STRING. bukan untuk menjumlahkan DATETIME mas ..."

    bukan dong ...
    CONCAT nya cuma buat bikin offset waktunya doang
    yg penjumlahan waktunya ADDTIME nya yg jalan

    itu perhitungan jadi salah, soalnya @v3 , @v4 , @v5 , @v6 masih "kotor" ama spasi
    bisa elo TRIM(), atau pake field yg sudah bersih

    CONCAT( TRIM( @v3 ) , " " , TRIM( @v4 ) , ":" , TRIM( @v5 ) , ":" , TRIM( @v6 ) )

    ... atau ...

    CONCAT( field_3 , " " , field_4 , ":" , field_5 , ":" , field_6 )




    004750A0 | 211688 | 02 | 10 | 48 | 08 |       ...   | 7 |
    004750C0 | 212014 | 02 | 10 | 53 | 034 |      ...   | 7 |
    004750E0 | 212341 | 02 | 10 | 59 | 01 |       ...   | 7 |
    00475100 | 212667 | 02 | 11 | 04 | 027 |      ...   | 7 |
    00475120 | 212994 | 02 | 11 | 09 | 054 |      ...   | 7 |
    00475140 | 213320 | 02 | 11 | 15 | 020 |      ...   | 7 |
    00475160 | 213647 | 02 | 11 | 20 | 047 |      ...   | 7 |
    00475180 | 213973 | 02 | 11 | 26 | 013 |      ...   | 7 |

    mau pake yg merah atau biru, sama saja ...
    itu data yg sama, cuma penulisannya yg beda

    211688 | 02 | 10 | 48 | 08
    211688 detik = 02 hari, 10 jam, 48 menit, 08 detik
  • hehehehe jadi malu :)

    soalnya yg saya baca CONCAT itu >< SUBSTRING mas, sekali lagi makasih penjelasannya

    saya sudah nyobain query ini di MySQL. hasilnya sesuai harapan saya mas >>>

    LOAD DATA INFILE 'D:/Longtele/tele20130401.txt' INTO TABLE tbl_longtelemetry FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 2 LINES
    (@v1, @v2@v3@v4@v5@v6@v7@v8@v9, @v10, @v11, @v12, @v13, @v14, @v15, @v16, @v17, @v18, @v19, @v20, @dummy)
    SET ADDRESS = TRIM(@v1), SYSTEM_TIME = TRIM(@v2), DAY = TRIM(@v3), HOUR = TRIM(@v4), MINUTE = TRIM(@v5), SECOND = TRIM(@v6), COUNTER_CMD  = TRIM(@v7), SWITCH_REG = TRIM(@v8), MAINBUS_VOLTAGE= TRIM(@v9), SYSTEM_CURRENT = TRIM(@v10), PCU_TEMP = TRIM(@v11), PCDH_TEMP = TRIM(@v12), BATTERY_TEMP = TRIM(@v13), MP_TEMP = TRIM(@v14), Z_PLUS_TEMP = TRIM(@v15), Z_MINUS_TEMP  = TRIM(@v16), X_PLUS_TEMP = TRIM(@v17),X_MINUS_TEMP = TRIM(@v18), Y_MINUS_TEMP = TRIM(@v19), S_BAND_TEMP = TRIM(@v20), UTC = ADDTIME('2013-03-28 12:55:09', CONCAT(TRIM(@v3), ' '  ,TRIM(@v4), ':' ,TRIM(@v5), ':' ,TRIM(@v6)))

    tapi waktu di gabungin ke java error yg didapatkan

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TERMINATED BY '|' LINES TERMINATED BY '
    ' IGNORE 2 LINES(@v1, @v2@v3@v4,  ' at line 1


    fyi : saya pakai xampp, phpmyadmin
    • Server: localhost via TCP/IP
    • Software: MySQL
    • Software version: 5.5.16 - MySQL Community Server (GPL)
    • Protocol version: 10
    • User: root@localhost
    • Server charset: UTF-8 Unicode
      (utf8)

    apa perlu update mas..?

  • edited April 2013
    jangan-jangan kaya sebelumnya ... masalah spasi

    periksa antara : ... tbl_longtelemetry[ ]FIELDS ... ada spasinya atau kagak ?

    yg IGNORE LINES nya bisa dihapus kalo kagak butuh
    tapi ( @var ) nya jangan
  • oiya, dugaan anda bener mas. masalah di spasi...

    udh final syntax-nya namun dengan bbrp perubahan pada >>> INTO TABLE tbl_longtelemetry FIELDS TERMINATED BY '|' LINES STARTING BY '0'" tanpa IGNORE mas

    satu pertanyaan lagi mas, di DB kn sebisa mungkin kita tidak boleh menginput data 2 kali agar tidak terjadi pemborosan space. masalah tersebutkan bisa diatasi dengan pemberian PRIMARY KEY pada field tertentu. nah, saya masih memiliki masalh dengan data saya, yaitu baris terakhir data hari ini, merupakan baris awal data besoknya. kn kalau kita save pasti ada notify error karena data sebelumnya udh ada (dlm kasus fieldnya pake PRIMARY KEY). kira2 solusi apa yg bisa dilakukan supaya data ttp bisa tersimpan dengan menggunakan field PRIMARY...?

    contoh data >>>

    DATA HARI INI
    00472080     | 84505                | 00 | 23 | 28 | 025 | 492          |23             |
    004720A0     | 84829                | 00 | 23 | 33 | 049 | 492          |24             |
    004720C0     | 85153                | 00 | 23 | 39 | 013 | 492          |25             |
    004720E0     | 85476                | 00 | 23 | 44 | 036 | 492          | 24             |

    DATA BESOK
    004720E0     | 85476                | 00 | 23 | 44 | 036 | 492          | 24             |
    00472100     | 85800                | 00 | 23 | 50 |  0 | 492             |  25             |
    00472120     | 86124                | 00 | 23 | 55 | 024 | 492          |25             |
    00472140     | 86447                | 01 | 00 | 00 | 047 | 492          |24             |





                      
  • IGNORE aja 1 baris :D
  • nah, saya jg kpikiran gitu mas. pake IF ELSE
    jadi IF baris pertama already exist in DB then IGNORE 3 FILES
    else IGNORE 2 FILES

    soalnyakan baris 1 header, ke 2 kosong :D

    btw makasih bgt atas semua advice n solusinya. tepat bertanya pd ahlinya

  • bos2 and suhu2 yang jago2 mohon bantuannya donk..jadi begini ceritanya.. q punya tabel  dengan field sbb :

    image

    nahh q mau menampilkan nama_calon_karyawan   Hanya yang statusnya Finish.

    contoh yang tampil hanya Alex Jhon dan Jamal, Karena statusnya Semuanya Finish. Brenda Gak tampil karena statusnya ada yang No-Status

    Mohon Pencerahan semuanya thank's...!

  • bisa bikin tret baru kan ?

    posting elo kagak ada hubungannya dgn tret ini
Sign In or Register to comment.