Giriş Programı Sorun


package Proje;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class loginin {
	JLabel bg;
	
	JFrame win; //
	JPanel log;
	JButton log_in;
	JLabel us; //
	JTextField u; // 
	JLabel pass; //
	JPasswordField p; //
	JLabel createa;
	
	JPanel reg;
	JPasswordField p_re;
	JButton register;

	
	
	public loginin() {		
		//pencere	
		this.win = new JFrame("Şifre Tutucu");
		win.setSize(800,500);
		win.setLayout(null);
		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		win.setResizable(false);

		
		//login pencere
		
		this.u = new JTextField();
		u.setBounds(330, 110, 130, 30);
		u.setFont(new Font("Arial",Font.BOLD,13));
		
		this.p = new JPasswordField();
		p.setBounds(330, 145, 130, 30);
		
		this.us = new JLabel("Kullanıcı adı: ");
		us.setBounds(250, 110,90, 30);
		
		this.pass = new JLabel("Şifre: ");
		pass.setBounds(290, 145,90, 30);
		
		this.log_in = new JButton("Giriş Yap");
		log_in.setBounds(342, 180, 100, 25);
		log_in.setBackground(new Color(51, 153, 255));
		log_in.setForeground(Color.white);
		log_in.setBorderPainted(false);
		
		log_in.addActionListener((ActionEvent e) -> {
			girisislemleri();
		});
		
		this.createa = new JLabel("Yeni bir hesap oluştur");
		createa.setBounds(445, 193, 200, 10);
		createa.setForeground(Color.RED);
		createa.setFont(new Font("Arial", Font.ITALIC, 10));
		
		win.add(u);
		win.add(p);
		win.add(us);
		win.add(pass);
		win.add(log_in);
		win.add(createa);
		win.setVisible(true);
		
		
		

		
		
		
		
		
	}
	
	
	public void girisislemleri() {
		// veritabani islemleri
		String pp =String.valueOf(p.getPassword());
		String url = "jdbc:sqlite:C:\\Users\\talha\\Desktop\\girisprog\\users.db";
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url);
			System.out.println("Bağlanıldı!");
			String sql = "select * from usersdata";
			
			try {
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery(sql);
				
				while(rs.next()) {
					if(u.getText() == rs.getString("nick") && pp == rs.getString("password")) {
						System.out.println("Giriş Yapıldı!");
					}
					
					else {
						System.out.println("Giriş yapılamadı tekrar deneyin!");
					}
				}
				
				
			}catch(Exception e) {
				
			}
			
			
			
			
		}catch(SQLException e){
			System.out.println(e.getMessage());	
		}
		
	}

Giriş uygulaması yapmaya çalışıyorum(program herhangi bir hata vermiyor) Kullanıdan aldığım verileri veritabanı ile karşılaştırıyorum ama her seferinde giriş başarılı değil diğer kullanici adi ve sifreyi dogru girmeme ragmen.

while(rs.next()) {
					if(u.getText() == rs.getString("nick") && pp == rs.getString("password")) {
						System.out.println("Giriş Yapıldı!");
					}
					
					else {
						System.out.println("Giriş yapılamadı tekrar deneyin!");
					}

Belki de siz hata vermesinin önüne geçiyorsunuzdur.


Niçin bu kontrolü SQL ile yapmıyorsunuz?

1 Beğeni

Ya kardeşim bak ben sana diyorum ki büyük ihtimal ile şu satırlarda bir yanlışlık yapıyorum:

while(rs.next()) {
					if(u.getText() == rs.getString("nick") && pp == rs.getString("password")) {
						System.out.println("Giriş Yapıldı!");
					}
					
					else {
						System.out.println("Giriş yapılamadı tekrar deneyin!");
					}

Sen bana direkt söylesene, de ki şu şunu çıkart ya da şunu ekle bunu demek bu kadar zor mu ?

Normalde benim için en kolayı bu ancak Java bilmiyorum, ayrıca size en az katkı sağlayacak da bu. Geçen sorununuzda da söylediğim halde bu konuda bir şey yapmadınız:

Burası herhangi bir hatanın size ulaşmasını engelliyor, bir hata olduysa bile hiçbir şey yapılmadan program çalışmaya devam ediyor.

SQL ile yapabileceğiniz bir şeyi kod ile yapmaya çalışıyorsunuz.
Algoritmada sıkıntı var. En az bir kullanıcı adı ve şifre tutarsa Giriş yapıldı denmesi lazım ama tutmadığı her durumda Giriş yapılamadı .. deniyor.

3 Beğeni

Degil, ama para veya rica ile bu programi birine yazdirmak da zor degil.

Neden hepimiz zor/daha zor/abuk yollari seciyoruz? :slight_smile:

Ben de yazılımda belli bir seviyede olduğunu tahmin ettiğim arkadaşların, karşılaştıkları problemleri çözerken yeni bir soru sormayı son çare olarak görmelerini sağlamak istiyorum. Böylece hem kendi sorunlarınızı daha rahat çözer hem de başkalarına yardım edebilirsiniz.

2 Beğeni

Sahsi goruslerin coguna dogruluk/yanlislik degerlendirmesinin yapilamayacagini dusunmekle beraber buna katilmiyorum.

Seri is yapmayi seven birisi olarak seri is yapabilecek seviyeye gelmeyi, 4-5 isi seri bir sekilde yapmaktan daha onemli tutmani beklerdim. :slight_smile:

4 Beğeni

Şu blok arasında hatayı ekrana yazdırıp buraya yazarsan hatanın sebebini görüp birşeyler söyleyebiliriz. Hatanın hangi satırlarda olduğunu tahmin etmek zor, ek olarak hata var dediğin satırlarda ne tür bir hata olduğunu kestirmek zor. O yüzden hata bloklarını boş bırakmadan doldurman gerekir.

1 Beğeni
	}catch(Exception e) {
				System.out.println("Hata oluştu: "+e.getMessage());	
			}

Böyle olacak dimi ? Soruyorum çünkü bir hata vermedi.

Evet öyle olacak. Hata vermediyse kodun ara yerlerinde ekrana çıktı yazdırın ki beklediğiniz verilerin gelip gelmediğini görmüş olursunuz. Mesela while döngüsünün içerisinde veritabanından gelen verileri de ekrana yazdırın, karşılaştırdığınız verileri de ekrana yazdırın. Eşit olup olmadıklarını konsoldan inceleyin. Kısaca manuel debug yapın…

1 Beğeni
System.out.println("Nick: "+u.getText());
System.out.println("Veritabanı Nick: "+rs.getString("nick"));
System.out.println("Şifre: "+pp);
System.out.println("Veritabi Sifre: "+rs.getString("password"));

Şöyle bir ekleme yaptım dediğiniz gibi çııktıda bu şekilde:

Bağlanıldı!
Nick: Talha
Veritabanı Nick: Talha
Şifre: 123456
Veritabi Sifre: 123456
Giriş yapılamadı tekrar deneyin!

Nick: Talha
Veritabanı Nick: Mehmet
Şifre: 123456
Veritabi Sifre: 1234
Giriş yapılamadı tekrar deneyin!

O zaman son bir deneme olarak String karşılaştırmasını == ile değil de

bir_string.equalsIgnoreCase(diger_string) şeklinde yapın.

1 Beğeni

Amin, hepimiz kurtuluruz bu günlerden inşallah. Rica ederim, String’leri karşılaştırırken == değil bahsettiğim metodu kullanman gerektiğini anlamışsındır artık :smiley:

1 Beğeni