2016-07-25 20 views
1

私は3つのJFramesを持つ基本的なプログラムを開発しています。ログイン、登録、ログインに成功した後に開くダッシュボード。しかし、ユーザー名とパスワードを入力してログインボタンをクリックすると、エラーが表示されます。ここで JavaとMySqlのSQL構文エラーSELECTクエリ

はエラーです:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' password='1234'' at line 1

そして、ここに私のコードです:どのように私はstackoverflowのフォーラムを検索し、与えられた可能性のある解決策を行ってきました

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

import com.mysql.jdbc.Statement; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.ImageIcon; 
import java.awt.Font; 
import javax.swing.JTextField; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.awt.event.ActionEvent; 

public class Login extends JFrame { 

private JPanel contentPane; 
private JTextField txtUsrName; 
private JTextField txtPAss; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Login frame = new Login(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Login() { 
    setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
    setBounds(100, 100, 450, 348); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JLabel lblLogin = new JLabel("Welcome To TechApp"); 
    lblLogin.setFont(new Font("Tekton Pro", Font.PLAIN, 18)); 
    lblLogin.setBounds(135, 19, 163, 28); 
    contentPane.add(lblLogin); 

    JLabel lblUsername = new JLabel("UserName:"); 
    lblUsername.setFont(new Font("Alaska", Font.PLAIN, 15)); 
    lblUsername.setBounds(174, 58, 88, 28); 
    contentPane.add(lblUsername); 

    txtUsrName = new JTextField(); 
    txtUsrName.setBounds(145, 90, 132, 20); 
    contentPane.add(txtUsrName); 
    txtUsrName.setColumns(10); 

    JLabel lblPassword = new JLabel("Password:"); 
    lblPassword.setFont(new Font("Alaska", Font.PLAIN, 15)); 
    lblPassword.setBounds(182, 118, 95, 46); 
    contentPane.add(lblPassword); 

    txtPAss = new JTextField(); 
    txtPAss.setColumns(10); 
    txtPAss.setBounds(145, 156, 132, 20); 
    contentPane.add(txtPAss); 

    JButton btnNewButton = new JButton("login"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 


      String _username = txtUsrName.getText(); 
      String _password = txtPAss.getText(); 
      String url = "jdbc:mysql://127.0.0.1:3306/javabase"; 
      String user = "java"; 
      String passw = "password"; 

      try{ 
       // 1.Get a connection To Database 
       Connection myConn = DriverManager.getConnection(url, user, passw); 

       // 2.Create a statement 
       Statement myStmt = (Statement) myConn.createStatement(); 

       // 3.Execute SQL Query 
       String sql = "SELECT userame, password FROM registration WHERE userame='"+_username+"', password='"+_password+"' "; 
       ResultSet result = myStmt.executeQuery(sql); 
       //myStmt.executeUpdate(sql); 

       int count = 0; 
       while(result.next()){ 
        count = count + 1; 
       } 
       if(count == 1){ 
        Dashboard frame = new Dashboard(); 
        frame.setVisible(true); 
       } 
       else if(count > 1){ 
        JOptionPane.showMessageDialog(null, "Duplicate User! Access Denied!"); 
       } 
       else{ 
        JOptionPane.showMessageDialog(null, "User Not Found!"); 
       } 


      } 
      catch(Exception ex) 
      { 
       ex.printStackTrace(); 
      } 





     } 
    }); 
    btnNewButton.setBounds(169, 202, 89, 49); 
    contentPane.add(btnNewButton); 

    JButton btnRegister = new JButton("Register"); 
    btnRegister.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      Main frame = new Main(); 
      frame.setVisible(true); 
     } 
    }); 
    btnRegister.setBounds(168, 264, 89, 23); 
    contentPane.add(btnRegister); 

    JLabel lblNewLabel = new JLabel(""); 
    lblNewLabel.setFont(new Font("Alaska", Font.PLAIN, 16)); 
    lblNewLabel.setIcon(new ImageIcon("D:\\ExploitGate\\MAS-9831-Offwhite2.jpg")); 
    lblNewLabel.setBounds(0, 0, 434, 310); 
    contentPane.add(lblNewLabel); 
} 
} 

here 誰もが私を導いてくださいすることができこのエラーを処理しますか? ありがとうございました:)

+0

に対して脆弱だということに注意してください+ _password + "'"; ' - " password "値の最後に閉じた' ''文字がないことを確認します。 – Castaglia

答えて

1

ANDではなく、WHERE句の間にカンマ,を使用していました。

文字列sql = "SELECTユーザー名、パスワードFROM登録ユーザー名= '' + _ユーザー名+ '' ANDパスワード= '' + _パスワード+ ''";

+0

ありがとうございました:)問題を解決しました。 –

+0

大歓迎です。 –

3

上記のコードはすべて基本的に役に立たないです。あなたはwhere句の引数を区切るために,を使用していない

... WHERE userame='"+_username+"', password='"+_password+"' "; 
           ^--- 

:それは、この1行だ意味し、SQLの構文エラーです。ブール演算を使用します。 ";ではなく、`パスワード="` 'andor、等...

そして、あなたは私はあなたが= ' "+ _パスワード+"'' `パスワードを使用する必要があると思うsql injection attacks

+0

ありがとうございました:)問題を解決しました。 –

+0

はい、私は知っています、私はちょうどJavaでデータベース接続を学んだ。だから今私はセキュリティのものに焦点を当てます。ありがとうtho :) –