Log M0509051 Nurcahya

Anda mungkin juga menyukai

Anda di halaman 1dari 37

LAPORAN TUGAS MANAJEMEN JARINGAN

Konversi Log Server Apache Filtering dan Shorting

NIM Nama Kelas

: M0509051 : Nurcahya Pradana Taufik P. : A- 2009

Jurusan Informatika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sebelas Maret 2012

Deskripsi Program
Program Log Server Apache adalah program yang dibuat untuk membaca file log Apache dan menyimpan hasilnya ke dalam database MySQL serta dapat melakukan filter atau penyaringan untuk beberapa kriteria tertentu dan menyimpannya ke dalam sebuah database baru. Beberapa fungsi tambahan lainnya adalah dengan melakukan searching dan sorting terhadap beberapa kriteria tertentu juga. Untuk tugas ini, kriteria tersebut dibagi menjadi tiga, yakni : IP address, Waktu akses, dan Kode akses 200. Sedangkan untuk proses filtering, saya akan menghapus record data di dalam file log yang mencatat pengaksesan data gambar, video atau yang terdapat kode akses 404.l Program ini dibuat dengan library Java jdk 6 update 20, Netbeans 6.9.1, dan MySQL. Sedangkan untuk localhost control panel, saya menggunakan XAMPP.

Langkah Pengerjaan
1. Aktifkan Apache dan MySQL, pada tugas ini saya menggunakan XAMPP sebagai control panel untuk pengelolaan localhost. 2. Buka phpmyadmin dengan mengetikkan alamat localhost/phpmyadmin pada address bar browser yang digunakan(dalam tugas ini saya menggunakan Google Chrome). 3. Buatlah database dengan nama accesslog menggunakan phpmyadmin. Pembuatan database ini digunakan untuk menyimpan hasil konversi dari file access.log ke dalam sebuah format tabel database.

4. Kemudian import file logaccess.sql yang disertakan pada folder. Isi dari file sql tersebut adalah kode pembuatan tabel

Isi dari file logaccess.sql adalah sebagai berikut : -- phpMyAdmin SQL Dump -- version 3.2.0.1 -- http://www.phpmyadmin.net --- Host: localhost -- Waktu pembuatan: 25. Maret 2011 jam 03:34 -- Versi Server: 5.1.36 -- Versi PHP: 5.3.0 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; --- Database: `accesslog` --- ---------------------------------------------------------- Struktur dari tabel `tabelog0` -CREATE TABLE IF NOT EXISTS `tabelog0` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` varchar(15) NOT NULL, `identd` varchar(20) NOT NULL, `userid` varchar(20) NOT NULL, `day` int(11) NOT NULL, `month` varchar(10) NOT NULL, `year` int(11) NOT NULL, `hour` int(11) NOT NULL, `minute` int(11) NOT NULL, `miliminute` int(11) NOT NULL, `url` mediumblob NOT NULL, `accesscode` int(11) NOT NULL, `ukuran_data` varchar(20) NOT NULL,

PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; --- Dumping data untuk tabel `tabelog0` --- ---------------------------------------------------------- Struktur dari tabel `tabelog1` -CREATE TABLE IF NOT EXISTS `tabelog1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` varchar(15) NOT NULL, `identd` varchar(20) NOT NULL, `userid` varchar(20) NOT NULL, `day` int(11) NOT NULL, `month` varchar(10) NOT NULL, `year` int(11) NOT NULL, `hour` int(11) NOT NULL, `minute` int(11) NOT NULL, `miliminute` int(11) NOT NULL, `url` mediumblob NOT NULL, `accesscode` int(11) NOT NULL, `ukuran_data` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Jika telah selesai proses import, maka dari interface phpmyadmin akan muncul notiikasi seperti berikut. Dengan demikian proses pembuatan database untuk menerima hasil konversi dari file access.log telah selesai.

5. Setelah itu, kita jalankan aplikasi Program Log Apache dengan menggunakan Netbeans 6.9.1. Caranya adalah dengan klik kanan pada project yang telah dibuat atau diload. Kemudian kita klik Run. Maka akan muncul program tersebut dengan interface sebagai berikut

. 6. Ada beberapa fitur yang ditawarkan di dalam program ini. Yang pertama adalah Baca File Log. Baca File Log merupakan suatu fungsi yang akan membaca file log Apache dan menyimpan hasilnya ke dalam database yang telah dibuat tadi. Hasilnya disimpan di dalam tabellog0. Berikut merupakan cara konversi file log tersebut. a. Klik tombol Browse Kemudian cari lokasi file access.log . biasanya tersimpan di dalam C:/XAMPP/Apache/Logs

b. Pilih access.log kemudian klik open

c. Jika kita telah memilih file log, maka secara otomatistombol Baca akan tersedia atau bernilai true. Klik tombol Baca

d. Program akan membaca file log tersebut kemudian menampilkannya pada Result dan menyimpan hasilnya ke dalam database.

e. Secara otomatis, hasil juga akan ditampilkan pada tabelog0 di dalam database accesslog. Berikut adalah hasil recordnya di dalam database.

7. Fitur kedua adalah Filter File Log. Filter File Log akan membaca file log Apache, memfilter isinya dengan ketentuan hanya akses yang sukses (kode 200) serta menghilangkan halaman akses ke image (ekstensi png, jpg, ico) dan menyimpan hasilnya ke dalam database accesslog di dalam tabel tabelog1. Berikut adalah bagian yang merepresentasikan proses filtering dimana menggunakan syarat o Kode akses diawali 20 o Tidak boleh berakhiran .gif, .png, .jpg, .bmp, .ico. Kode yang menunjukkan pemenuhan persyaratan tersebut adalah
if(kode_akses.startsWith("20")&& (!url.endsWith(".gif"))&& (!url.endsWith(".png"))&& (!url.endsWith(".jpg"))&& (!url.endsWith(".bmp"))&& (!url.endsWith(".ico"))) { int lastIndex = filterT.getRowCount(); model2.insertRow(lastIndex, data); String str = "INSERT INTO tabelog1 " + "(ip,identd,userid,day,month,year,hour," + "minute,miliminute,url,accesscode,ukuran_data)"+ "VALUES('"+ip+ "','"+strip1+ "','"+strip2+ "','"+d+"','"+M+"','"+yy+ "','"+hh+"','"+mm+"','"+mmm+ "','"+StringEscapeUtils.escapeSql(url)+ "','"+kode_akses+ "','"+size+"');"; statment.executeUpdate(str); jml++; }

Selanjutnya langkah untuk menjalankan fitur ini hampir sama dengan proses membaca file log a. Klik tombol Browse Kemudian cari lokasi file access.log . biasanya tersimpan di dalam C:/XAMPP/Apache/Logs

b. Pilih access.log kemudian klik open

c. Jika kita telah memilih file log, maka secara otomatistombol Baca akan tersedia atau bernilai true. Klik tombol Filter

d. Program akan memfilter file log tersebut kemudian menampilkannya pada Result dan menyimpan hasilnya ke dalam database.

e. Secara otomatis, hasil juga akan ditampilkan pada tabelog1 di dalam database accesslog. Berikut adalah hasil recordnya di dalam database.

8. Fitur yang ketiga adalah adalah Search. fitur search berfungsi untuk melakukan pencarian berdasarkan hasil filtering yang dilakukan. Ada dua pilihan pencarian, yakni berdasarkan IP address dan Waktu Akses. Berikut bagian yang memproses pencarian data,
private void searchData() { DefaultTableModel dm = (DefaultTableModel)searchT.getModel(); dm.getDataVector().removeAllElements(); String[] datas = new String[8]; try { String kriteria = new String(txtLogFile3.getText()); Statement statment = Koneksi.getConnection().createStatement(); String str = "SELECT * FROM tabelog1 WHERE "; if(jRadioButton1.isSelected()) { StringTokenizer kode1 = new StringTokenizer(kriteria,"-"); String[] waktu = new String[3]; waktu[0] = kode1.nextToken(); waktu[1] = kode1.nextToken(); waktu[2] = kode1.nextToken(); str = str.concat("day = '"); str = str.concat(waktu[0]); str = str.concat("' and month = '"); str = str.concat(waktu[1]); str = str.concat("' and year = '"); str = str.concat(waktu[2]); } else { str = str.concat("ip = '"); str = str.concat(kriteria); } str = str.concat("';");

ResultSet rs = statment.executeQuery(str); int jml = 0; while(rs.next()) { datas[0] = rs.getString("ip"); datas[1] = rs.getString("identd"); datas[2] = rs.getString("userid"); datas[3] = rs.getString("day")+""+rs.getString("month")+ "-"+rs.getString("year"); datas[4] = rs.getString("hour")+":"+rs.getString("minute")+ ":"+rs.getString("miliminute"); datas[5] = rs.getString("url"); datas[6] = rs.getString("accesscode"); datas[7] = rs.getString("ukuran_data"); int lastIndex = searchT.getRowCount(); model3.insertRow(lastIndex, datas); jml++; } txtHasil3.setText("Pencarian selesai, didapatkan "+ jml+" entry "); statment.close(); } catch (SQLException ex) { Logger.getLogger(logGUI.class.getName()).log(Level.SEVERE, null, ex); } }

Pencarian berdasarkan IP Addres

Pencarian berdasarkan Waktu Akses

9. Fitur terakhir adalah Sorting atau pengurutan ada beberapa kriteria pengurutan tabel mana yang akan di urutkan (hanya bisa berdasarkan alamat IP, waktu akses, dan alamat yang di akses) Berikut bagian yang memproses Pengurutan data,
private void sortData(){ DefaultTableModel dm = (DefaultTableModel)sortT.getModel(); dm.getDataVector().removeAllElements(); String[] datao = new String[8]; try { Statement statment = Koneksi.getConnection().createStatement(); String str = "SELECT * FROM tabelog1 ORDER BY "; if(jRadioButton4.isSelected()) { str = str.concat("year DESC, month DESC, day DESC, hour DESC, minute DESC, miliminute DESC;"); } else if(jRadioButton6.isSelected()) { str = str.concat("url DESC;"); } else if(jRadioButton5.isSelected()) { str = str.concat("IP DESC;"); } ResultSet rs1 = statment.executeQuery(str); int jml = 0; while(rs1.next()) { datao[0] = rs1.getString("ip"); datao[1] = rs1.getString("identd"); datao[2] = rs1.getString("userid"); datao[3] = rs1.getString("day")+"-"+rs1.getString("month")+ "-"+rs1.getString("year"); datao[4] = rs1.getString("hour")+":"+rs1.getString("minute")+

":"+rs1.getString("miliminute"); datao[5] = rs1.getString("url"); datao[6] = rs1.getString("accesscode"); datao[7] = rs1.getString("ukuran_data"); int lastIndex = sortT.getRowCount(); model4.insertRow(lastIndex, datao); jml++; } txtHasil4.setText("Data tampil terurut : statment.close(); }

"+jml+" entry.");

catch (SQLException ex) { Logger.getLogger(logGUI.class.getName()).log(Level.SEVERE, null, ex); } }

Sorting Berdasarkan IP Address

Sorting Berdasarkan Waktu Akses

Sorting Berdasarkan Kode Akses 200

Source Code
Koneksi.Java
package logapache; import import import import import com.mysql.jdbc.Driver; java.sql.Connection; java.sql.DriverManager; java.sql.SQLException; javax.swing.JOptionPane;

public class Koneksi { private static Connection koneksi; public Koneksi(){ try { getConnection(); //System.out.println("Koneksi Berhasil"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Gagal terhubung ke database"); } } public static Connection getConnection() throws SQLException { if (koneksi == null) { // panggil Driver MySQL new Driver(); // buat koneksi koneksi = DriverManager.getConnection("jdbc:mysql://localhost:3306/accesslog","r oot",""); } return koneksi; } }

Main.Java
package logapache; public class Main { public static void main(String[] args) { logGUI mg = new logGUI(); mg.setVisible(true); } }

logGUI.Java
package logapache; import import import import import import import import import import import import import import import import import import java.awt.Dimension; java.awt.Toolkit; java.io.BufferedReader; java.io.DataInputStream; java.io.File; java.io.FileInputStream; java.io.InputStreamReader; java.sql.Statement; java.sql.ResultSet; java.sql.SQLException; java.util.logging.Logger; java.util.logging.Level; java.util.StringTokenizer; java.util.Vector; javax.swing.JFileChooser; javax.swing.JOptionPane; javax.swing.table.DefaultTableModel; org.apache.commons.lang.StringEscapeUtils;

public class logGUI extends javax.swing.JFrame { Vector colName = new Vector(); Vector colName2 = new Vector(); Vector colName3 = new Vector(); DefaultTableModel model; DefaultTableModel model2; DefaultTableModel model3; DefaultTableModel model4; Vector allRow = new Vector(); Vector allRow2 = new Vector(); Vector allRow3 = new Vector(); Vector allRow4 = new Vector(); /** Creates new form logGUI */ public logGUI() { initComponents(); setSize(800,600); setTengah(); buttonGroup1.add(jRadioButton1); buttonGroup1.add(jRadioButton2); buttonGroup2.add(jRadioButton4); buttonGroup2.add(jRadioButton5); buttonGroup2.add(jRadioButton6); bindTable(); bBaca.setEnabled(false); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); buttonGroup2 = new javax.swing.ButtonGroup(); pMain = new javax.swing.JPanel(); jTabbedPane1 = new javax.swing.JTabbedPane(); bacaP = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); txtLogFile = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); bacaT = new javax.swing.JTable(); bBaca = new javax.swing.JButton(); bBrowse = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); txtHasil = new javax.swing.JLabel(); filterP = new javax.swing.JPanel(); jLabel7 = new javax.swing.JLabel(); txtLogFile1 = new javax.swing.JTextField(); bBrowse1 = new javax.swing.JButton(); bFilter = new javax.swing.JButton(); jLabel8 = new javax.swing.JLabel(); jLabel9 = new javax.swing.JLabel(); jScrollPane3 = new javax.swing.JScrollPane(); filterT = new javax.swing.JTable(); txtHasil1 = new javax.swing.JLabel(); searcher = new javax.swing.JPanel(); jLabel13 = new javax.swing.JLabel(); txtLogFile3 = new javax.swing.JTextField(); bBrowse3 = new javax.swing.JButton(); jLabel15 = new javax.swing.JLabel(); jScrollPane5 = new javax.swing.JScrollPane(); searchT = new javax.swing.JTable(); txtHasil3 = new javax.swing.JLabel(); jRadioButton1 = new javax.swing.JRadioButton(); jRadioButton2 = new javax.swing.JRadioButton(); sorter = new javax.swing.JPanel(); bBrowse4 = new javax.swing.JButton(); jLabel16 = new javax.swing.JLabel(); jScrollPane6 = new javax.swing.JScrollPane(); sortT = new javax.swing.JTable(); txtHasil4 = new javax.swing.JLabel(); jRadioButton4 = new javax.swing.JRadioButton(); jRadioButton5 = new javax.swing.JRadioButton(); jRadioButton6 = new javax.swing.JRadioButton(); jLabel17 = new javax.swing.JLabel(); pHead = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Program Pengelolaan Log Akses Server"); jLabel4.setText("File Log :"); txtLogFile.setEditable(false); txtLogFile.setFont(new java.awt.Font("Tahoma", 1, 14)); jLabel5.setText("* Membaca file log Apache dan memasukkan hasilnya ke database MySQL"); bacaT.setFont(new java.awt.Font("Tahoma", 0, 14)); bacaT.setModel(new javax.swing.table.DefaultTableModel( /*new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" }*/ )); jScrollPane2.setViewportView(bacaT); bBaca.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logapache/DOC.png"))); // NOI18N bBaca.setText("Baca"); bBaca.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bBacaActionPerformed(evt); } }); bBrowse.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logapache/Folder_blue.p ng"))); // NOI18N bBrowse.setText("Browse"); bBrowse.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bBrowseActionPerformed(evt); } }); jLabel6.setText("Result :"); javax.swing.GroupLayout bacaPLayout = new javax.swing.GroupLayout(bacaP);

bacaP.setLayout(bacaPLayout); bacaPLayout.setHorizontalGroup( bacaPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, bacaPLayout.createSequentialGroup() .addContainerGap() .addGroup(bacaPLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADIN G, bacaPLayout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(txtLogFile, javax.swing.GroupLayout.DEFAULT_SIZE, 286, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.RELATED) .addComponent(bBrowse) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.RELATED) .addComponent(bBaca)) .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.LEADIN G, bacaPLayout.createSequentialGroup() .addComponent(jLabel6) .addGap(18, 18, 18) .addComponent(txtHasil))) .addContainerGap()) ); bacaPLayout.setVerticalGroup( bacaPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) .addGroup(bacaPLayout.createSequentialGroup() .addContainerGap() .addGroup(bacaPLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(txtLogFile, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bBaca) .addComponent(bBrowse)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.RELATED) .addComponent(jLabel5)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.UNRELATED) .addGroup(bacaPLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(txtHasil)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.UNRELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 373, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Baca File Log", bacaP); jLabel7.setText("File Log :"); txtLogFile1.setEditable(false); txtLogFile1.setFont(new java.awt.Font("Tahoma", 1, 14)); bBrowse1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logapache/Folder_blue.p ng"))); // NOI18N bBrowse1.setText("Browse"); bBrowse1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bBrowse1ActionPerformed(evt); } }); bFilter.setIcon(new javax.swing.ImageIcon(getClass().getResource("/logapache/Defragmentati on.png"))); // NOI18N bFilter.setText("Filter"); bFilter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bFilterActionPerformed(evt); } }); jLabel8.setText("* Memfilter isi file log Apache dan memasukkan hasilnya ke database MySQL"); jLabel9.setText("Result :"); filterT.setFont(new java.awt.Font("Tahoma", 0, 14)); filterT.setModel(new javax.swing.table.DefaultTableModel( /*new Object [][] { {null, null, null, null}, {null, null, null, null},

{null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" }*/ )); jScrollPane3.setViewportView(filterT); javax.swing.GroupLayout filterPLayout = new javax.swing.GroupLayout(filterP); filterP.setLayout(filterPLayout); filterPLayout.setHorizontalGroup( filterPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE ADING) .addGroup(filterPLayout.createSequentialGroup() .addContainerGap() .addGroup(filterPLayout.createParallelGroup(javax.swin g.GroupLayout.Alignment.LEADING) .addGroup(filterPLayout.createSequentialGroup() .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(txtHasil1)) .addComponent(jLabel8) .addGroup(filterPLayout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(txtLogFile1, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.RELATED) .addComponent(bBrowse1) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.RELATED) .addComponent(bFilter))) .addContainerGap()) .addGroup(filterPLayout.createParallelGroup(javax.swing.Gr oupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, filterPLayout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE) .addContainerGap())) ); filterPLayout.setVerticalGroup( filterPLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LE ADING) .addGroup(filterPLayout.createSequentialGroup()

.addContainerGap() .addGroup(filterPLayout.createParallelGroup(javax.swin g.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(txtLogFile1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bFilter) .addComponent(bBrowse1)) .addGap(5, 5, 5) .addComponent(jLabel8) .addGap(12, 12, 12) .addGroup(filterPLayout.createParallelGroup(javax.swin g.GroupLayout.Alignment.BASELINE) .addComponent(jLabel9) .addComponent(txtHasil1)) .addContainerGap(384, Short.MAX_VALUE)) .addGroup(filterPLayout.createParallelGroup(javax.swing.Gr oupLayout.Alignment.LEADING) .addGroup(filterPLayout.createSequentialGroup() .addGap(101, 101, 101) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE))) ); jTabbedPane1.addTab("Filter File Log", filterP); jLabel13.setText("Kriteria:"); txtLogFile3.setFont(new java.awt.Font("Tahoma", 1, 14)); txtLogFile3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txtLogFile3ActionPerformed(evt); } }); bBrowse3.setText("Search"); bBrowse3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bBrowse3ActionPerformed(evt); } }); jLabel15.setText("Result :"); searchT.setFont(new java.awt.Font("Tahoma", 0, 14)); searchT.setModel(new javax.swing.table.DefaultTableModel( /*new Object [][] { {null, null, null, null},

{null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" }*/ )); jScrollPane5.setViewportView(searchT); jRadioButton1.setText("Waktu Akses"); jRadioButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton1ActionPerformed(evt); } }); jRadioButton2.setText("IP Address"); jRadioButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton2ActionPerformed(evt); } }); javax.swing.GroupLayout searcherLayout = new javax.swing.GroupLayout(searcher); searcher.setLayout(searcherLayout); searcherLayout.setHorizontalGroup( searcherLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(searcherLayout.createSequentialGroup() .addGroup(searcherLayout.createParallelGroup(javax.swi ng.GroupLayout.Alignment.LEADING) .addGroup(searcherLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(txtLogFile3, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.RELATED) .addComponent(bBrowse3) .addGap(93, 93, 93)) .addGroup(searcherLayout.createSequentialGroup() .addGap(19, 19, 19) .addComponent(jRadioButton2)

.addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(jRadioButton1)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILI NG, searcherLayout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)) .addGroup(searcherLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel15) .addPreferredGap(javax.swing.LayoutStyle.Compo nentPlacement.UNRELATED) .addComponent(txtHasil3, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); searcherLayout.setVerticalGroup( searcherLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) .addGroup(searcherLayout.createSequentialGroup() .addContainerGap() .addGroup(searcherLayout.createParallelGroup(javax.swi ng.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(txtLogFile3, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(bBrowse3)) .addGap(2, 2, 2) .addGroup(searcherLayout.createParallelGroup(javax.swi ng.GroupLayout.Alignment.BASELINE) .addComponent(jRadioButton2) .addComponent(jRadioButton1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.RELATED) .addGroup(searcherLayout.createParallelGroup(javax.swi ng.GroupLayout.Alignment.TRAILING) .addComponent(jLabel15) .addComponent(txtHasil3, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.RELATED) .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE) .addContainerGap()) ); jTabbedPane1.addTab("Search", searcher);

bBrowse4.setText("Sort"); bBrowse4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bBrowse4ActionPerformed(evt); } }); jLabel16.setText("Result :"); sortT.setFont(new java.awt.Font("Tahoma", 0, 14)); sortT.setModel(new javax.swing.table.DefaultTableModel( /*new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" }*/ )); jScrollPane6.setViewportView(sortT);

txtHasil4.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); jRadioButton4.setText("Waktu Akses"); jRadioButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton4ActionPerformed(evt); } }); jRadioButton5.setText("IP Address"); jRadioButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton5ActionPerformed(evt); } }); jRadioButton6.setText("Kode 200"); jRadioButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButton6ActionPerformed(evt); }

}); jLabel17.setText("Kriteria:"); javax.swing.GroupLayout sorterLayout = new javax.swing.GroupLayout(sorter); sorter.setLayout(sorterLayout); sorterLayout.setHorizontalGroup( sorterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(sorterLayout.createSequentialGroup() .addGroup(sorterLayout.createParallelGroup(javax.swing .GroupLayout.Alignment.LEADING) .addGroup(sorterLayout.createSequentialGroup() .addGap(29, 29, 29) .addComponent(jLabel17)) .addGroup(sorterLayout.createSequentialGroup() .addGap(19, 19, 19) .addGroup(sorterLayout.createParallelGroup(jav ax.swing.GroupLayout.Alignment.LEADING) .addGroup(sorterLayout.createSequentialGro up() .addComponent(jLabel16) .addPreferredGap(javax.swing.LayoutSty le.ComponentPlacement.RELATED) .addComponent(txtHasil4, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(sorterLayout.createSequentialGro up() .addComponent(jRadioButton5) .addPreferredGap(javax.swing.LayoutSty le.ComponentPlacement.RELATED) .addComponent(jRadioButton4) .addPreferredGap(javax.swing.LayoutSty le.ComponentPlacement.RELATED) .addComponent(jRadioButton6) .addPreferredGap(javax.swing.LayoutSty le.ComponentPlacement.RELATED) .addComponent(bBrowse4, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addContainerGap(228, Short.MAX_VALUE)) .addGroup(sorterLayout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane6, javax.swing.GroupLayout.DEFAULT_SIZE, 539, Short.MAX_VALUE)) ); sorterLayout.setVerticalGroup( sorterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING)

.addGroup(sorterLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel17) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.RELATED) .addGroup(sorterLayout.createParallelGroup(javax.swing .GroupLayout.Alignment.BASELINE) .addComponent(jRadioButton5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jRadioButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jRadioButton6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(bBrowse4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlac ement.RELATED) .addGroup(sorterLayout.createParallelGroup(javax.swing .GroupLayout.Alignment.LEADING, false) .addComponent(txtHasil4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel16, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(18, 18, 18) .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 370, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); jTabbedPane1.addTab("Sorting", sorter); javax.swing.GroupLayout pMainLayout = new javax.swing.GroupLayout(pMain); pMain.setLayout(pMainLayout); pMainLayout.setHorizontalGroup( pMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 554, Short.MAX_VALUE) ); pMainLayout.setVerticalGroup( pMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) .addComponent(jTabbedPane1) );

getContentPane().add(pMain, java.awt.BorderLayout.CENTER); pHead.setEnabled(false); jLabel1.setFont(new java.awt.Font("Tahoma", 0, 24)); jLabel1.setText("Program Log Apache"); pHead.add(jLabel1); getContentPane().add(pHead, java.awt.BorderLayout.PAGE_START); pack(); }// </editor-fold> private void bBrowseActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String nF = null; class loGfilter extends javax.swing.filechooser.FileFilter { public boolean accept(File f) { return f.isDirectory() || f.getName().toLowerCase().endsWith(".log"); } public String getDescription() { return "log files"; } } JFileChooser JFC1 = new JFileChooser(); JFC1.setFileFilter(new loGfilter()); JFC1.showOpenDialog(jTabbedPane1); try { nF = JFC1.getSelectedFile().toString(); }catch(Exception e) { System.out.println(e.getMessage()); } if(nF.endsWith(".log")) { txtLogFile.setText(JFC1.getSelectedFile().toString()); bBaca.setEnabled(true); } else { JOptionPane.showMessageDialog(rootPane, "Ekstensi berkas yang Anda pilih tidak didukung\nPilih berkas yang berekstensi .log", "Perhatian", WIDTH); bBaca.setEnabled(false); txtLogFile.setText(null); } } private void bBacaActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: bacaFile();

} private void bBrowse1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String nF = null; class loGfilter extends javax.swing.filechooser.FileFilter { public boolean accept(File f) { return f.isDirectory() || f.getName().toLowerCase().endsWith(".log"); } public String getDescription() { return "log files"; } } JFileChooser JFC1 = new JFileChooser(); JFC1.setFileFilter(new loGfilter()); JFC1.showOpenDialog(jTabbedPane1); try { nF = JFC1.getSelectedFile().toString(); }catch(Exception e) { System.out.println(e.getMessage()); } if(nF.endsWith(".log")) { txtLogFile1.setText(JFC1.getSelectedFile().toString()); bFilter.setEnabled(true); } else { JOptionPane.showMessageDialog(rootPane, "Ekstensi berkas yang Anda pilih tidak didukung\nPilih berkas yang berekstensi .log", "Perhatian", WIDTH); bFilter.setEnabled(false); txtLogFile1.setText(null); } } private void bFilterActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: filterFile(); bFilter.setEnabled(true); } private void bBrowse3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: searchData(); } private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }

private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void bBrowse4ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: sortData(); } private void jRadioButton4ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jRadioButton5ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jRadioButton6ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void txtLogFile3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } // Variables declaration - do not modify private javax.swing.JButton bBaca; private javax.swing.JButton bBrowse; private javax.swing.JButton bBrowse1; private javax.swing.JButton bBrowse3; private javax.swing.JButton bBrowse4; private javax.swing.JButton bFilter; private javax.swing.JPanel bacaP; private javax.swing.JTable bacaT; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.ButtonGroup buttonGroup2; private javax.swing.JPanel filterP; private javax.swing.JTable filterT; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel17; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6;

private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JRadioButton jRadioButton1; private javax.swing.JRadioButton jRadioButton2; private javax.swing.JRadioButton jRadioButton4; private javax.swing.JRadioButton jRadioButton5; private javax.swing.JRadioButton jRadioButton6; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane5; private javax.swing.JScrollPane jScrollPane6; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JPanel pHead; private javax.swing.JPanel pMain; private javax.swing.JTable searchT; private javax.swing.JPanel searcher; private javax.swing.JTable sortT; private javax.swing.JPanel sorter; private javax.swing.JLabel txtHasil; private javax.swing.JLabel txtHasil1; private javax.swing.JLabel txtHasil3; private javax.swing.JLabel txtHasil4; private javax.swing.JTextField txtLogFile; private javax.swing.JTextField txtLogFile1; private javax.swing.JTextField txtLogFile3; // End of variables declaration private void setTengah() { //set letak di tengah layar Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); } //method untuk membuat tampilan tabel di tab baca file log private void bindTable() { colName.addElement("IP"); colName.addElement("Identd"); colName.addElement("UserID"); colName.addElement("Tgl. Akses"); colName.addElement("Wkt. Akses"); colName.addElement("URL"); colName.addElement("Kode Akses"); colName.addElement("Ukuran Data"); model = getDefaultTableModel();

model2 = getDefaultTableModel(); model3 = getDefaultTableModel(); model4 = getDefaultTableModel(); bacaT.setModel(model); filterT.setModel(model2); searchT.setModel(model3); sortT.setModel(model4); } //mengatur model tabel private DefaultTableModel getDefaultTableModel() { return new DefaultTableModel(allRow,colName){ boolean[] canEdit = new boolean[] { false,false,false,false,false }; @Override public boolean isCellEditable(int rowIndex,int columnIndex) { return canEdit [columnIndex]; } }; } //method untuk membaca file log private void bacaFile() { String[] data = new String[8]; try { //open file FileInputStream fstream = new FileInputStream(txtLogFile.getText()); //get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine = null; Statement statment = Koneksi.getConnection().createStatement(); statment.executeUpdate("TRUNCATE TABLE tabelog0"); int jml = 0; //read file line by line while((strLine = br.readLine()) != null) { //print content StringTokenizer kode0 = new StringTokenizer(strLine, " "); String ip = kode0.nextToken(); String strip1 = kode0.nextToken(); String strip2 = kode0.nextToken(); String time0 = kode0.nextToken(); String time = time0.substring(1); StringTokenizer kode1 = new StringTokenizer(time, "/"); String d = kode1.nextToken();

String M = kode1.nextToken(); String y = kode1.nextToken(); StringTokenizer kode2 = new StringTokenizer(y, ":"); String yy = kode2.nextToken(); String hh = kode2.nextToken(); String mm = kode2.nextToken(); String mmm = kode2.nextToken(); String strip3 = kode0.nextToken(); String strip4 = kode0.nextToken(); String url = kode0.nextToken(); String vhttp = kode0.nextToken(); String kode_akses = kode0.nextToken(); String size = kode0.nextToken(); data[0] = ip; data[1] = strip1; data[2] = strip2; data[3] = d+"-"+M+"-"+yy; data[4] = hh+":"+mm+":"+mmm; data[5] = url; data[6] = kode_akses; data[7] = size; int lastIndex = bacaT.getRowCount(); model.insertRow(lastIndex, data); String str = "INSERT INTO tabelog0 (ip,identd,userid,day,month,year,hour,minute,miliminute,url,accesscode ,ukuran_data) VALUES('"+ip+"','"+strip1+"','"+strip2+"','"+d+"','"+M+"','"+yy+"','"+ hh+"','"+mm+"','"+mmm+"','"+StringEscapeUtils.escapeSql(url)+"','"+kod e_akses+"','"+size+"');"; statment.executeUpdate(str); jml++; } txtHasil.setText("Pembacaan file log selesai, didapatkan "+jml+" entry"); //close statment.close(); in.close(); } catch(Exception e) { System.out.println("Error : "+e.getMessage()); } } private void filterFile() { String[] data = new String[8]; try { //open file FileInputStream fstream = new FileInputStream(txtLogFile1.getText()); //get the object of DataInputStream DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strLine = null;

Statement statment = Koneksi.getConnection().createStatement(); statment.executeUpdate("TRUNCATE TABLE tabelog1"); int jml = 0; //read file line by line while((strLine = br.readLine()) != null) { //print content StringTokenizer kode0 = new StringTokenizer(strLine, " "); String ip = kode0.nextToken(); String strip1 = kode0.nextToken(); String strip2 = kode0.nextToken(); String time0 = kode0.nextToken(); String time = time0.substring(1); StringTokenizer kode1 = new StringTokenizer(time, "/"); String d = kode1.nextToken(); String M = kode1.nextToken(); String y = kode1.nextToken(); StringTokenizer kode2 = new StringTokenizer(y, ":"); String yy = kode2.nextToken(); String hh = kode2.nextToken(); String mm = kode2.nextToken(); String mmm = kode2.nextToken(); String strip3 = kode0.nextToken(); String strip4 = kode0.nextToken(); String url = kode0.nextToken(); String vhttp = kode0.nextToken(); String kode_akses = kode0.nextToken(); String size = kode0.nextToken(); data[0] = ip; data[1] = strip1; data[2] = strip2; data[3] = d+"-"+M+"-"+yy; data[4] = hh+":"+mm+":"+mmm; data[5] = url; data[6] = kode_akses; data[7] = size; if(kode_akses.startsWith("20")&& (!url.endsWith(".gif"))&& (!url.endsWith(".png"))&& (!url.endsWith(".jpg"))&& (!url.endsWith(".bmp"))&& (!url.endsWith(".ico"))) { int lastIndex = filterT.getRowCount(); model2.insertRow(lastIndex, data); String str = "INSERT INTO tabelog1 " + "(ip,identd,userid,day,month,year,hour," + "minute,miliminute,url,accesscode,ukuran_data)" + "VALUES('"+ip+ "','"+strip1+

"','"+strip2+ "','"+d+"','"+M+"','"+yy+ "','"+hh+"','"+mm+"','"+mmm+ "','"+StringEscapeUtils.escapeSql(url)+ "','"+kode_akses+ "','"+size+"');"; statment.executeUpdate(str); jml++; } } txtHasil1.setText("Pembacaan file log selesai, didapatkan "+jml+" entry setelah filtering"); //close statment.close(); in.close(); } catch(Exception e) { System.out.println("Error : "+e.getMessage()); } } private void searchData() { DefaultTableModel dm = (DefaultTableModel)searchT.getModel(); dm.getDataVector().removeAllElements(); String[] datas = new String[8]; try { String kriteria = new String(txtLogFile3.getText()); Statement statment = Koneksi.getConnection().createStatement(); String str = "SELECT * FROM tabelog1 WHERE "; if(jRadioButton1.isSelected()) { StringTokenizer kode1 = new StringTokenizer(kriteria,"-"); String[] waktu = new String[3]; waktu[0] = kode1.nextToken(); waktu[1] = kode1.nextToken(); waktu[2] = kode1.nextToken(); str = str.concat("day = '"); str = str.concat(waktu[0]); str = str.concat("' and month = '"); str = str.concat(waktu[1]); str = str.concat("' and year = '"); str = str.concat(waktu[2]); } else { str = str.concat("ip = '"); str = str.concat(kriteria); } str = str.concat("';");

ResultSet rs = statment.executeQuery(str); int jml = 0; while(rs.next()) { datas[0] = rs.getString("ip"); datas[1] = rs.getString("identd"); datas[2] = rs.getString("userid"); datas[3] = rs.getString("day")+""+rs.getString("month")+ "-"+rs.getString("year"); datas[4] = rs.getString("hour")+":"+rs.getString("minute")+ ":"+rs.getString("miliminute"); datas[5] = rs.getString("url"); datas[6] = rs.getString("accesscode"); datas[7] = rs.getString("ukuran_data"); int lastIndex = searchT.getRowCount(); model3.insertRow(lastIndex, datas); jml++; } txtHasil3.setText("Pencarian selesai, didapatkan "+ jml+" entry "); statment.close(); } catch (SQLException ex) { Logger.getLogger(logGUI.class.getName()).log(Level.SEVERE, null, ex); } } private void sortData(){ DefaultTableModel dm = (DefaultTableModel)sortT.getModel(); dm.getDataVector().removeAllElements(); String[] datao = new String[8]; try { Statement statment = Koneksi.getConnection().createStatement(); String str = "SELECT * FROM tabelog1 ORDER BY "; if(jRadioButton4.isSelected()) { str = str.concat("year DESC, month DESC, day DESC, hour DESC, minute DESC, miliminute DESC;"); } else if(jRadioButton6.isSelected()) { str = str.concat("accesscode DESC;"); } else if(jRadioButton5.isSelected())

{ str = str.concat("IP DESC;"); } ResultSet rs1 = statment.executeQuery(str); int jml = 0; while(rs1.next()) { datao[0] = rs1.getString("ip"); datao[1] = rs1.getString("identd"); datao[2] = rs1.getString("userid"); datao[3] = rs1.getString("day")+""+rs1.getString("month")+ "-"+rs1.getString("year"); datao[4] = rs1.getString("hour")+":"+rs1.getString("minute")+ ":"+rs1.getString("miliminute"); datao[5] = rs1.getString("url"); datao[6] = rs1.getString("accesscode"); datao[7] = rs1.getString("ukuran_data"); int lastIndex = sortT.getRowCount(); model4.insertRow(lastIndex, datao); jml++; } txtHasil4.setText("Data tampil terurut : "+jml+" entry."); statment.close(); } catch (SQLException ex) { Logger.getLogger(logGUI.class.getName()).log(Level.SEVERE, null, ex); } } //mengatur model tabel private DefaultTableModel getDefaultTableModel2() { return new DefaultTableModel(allRow3,colName2){ boolean[] canEdit = new boolean[] { false,false }; @Override public boolean isCellEditable(int rowIndex,int columnIndex) { return canEdit [columnIndex]; } }; } //mengatur model tabel private DefaultTableModel getDefaultTableModel3() { return new DefaultTableModel(allRow4,colName3){ boolean[] canEdit = new boolean[] { false,false

}; @Override public boolean isCellEditable(int rowIndex,int columnIndex) { return canEdit [columnIndex]; } }; } }

Anda mungkin juga menyukai