(第一个jdbc入门项目)java实现的登录系统(mysql实现的)

来源:互联网 发布:import org.apache包 编辑:程序博客网 时间:2024/05/24 05:02
首次接触jdbc编程,本来想写一个成绩查询系统,感觉自己的数据库基础还是很差,所以找啦一个比较简单的登录程序做

但是由于水平有限,自动登录和记住密码功能没有写出来,希望大家指点一下

import javax.swing.*;import java.net.*;import java.awt.event.*;import java.awt.*;import java.sql.*;public class Landing extends JFrame implements ActionListener,ItemListener {private String driver="com.mysql.jdbc.Driver";private String url="jdbc:mysql://127.0.0.1:3306/denglusql";private String user="root";private String pass="yeqing123";//数据库的连接信息private JFrame jf=new JFrame("登录系统");private JLabel jl_user=new JLabel("账号");private JLabel jl_pass=new JLabel("密码");private JButton jb_zhuce=new JButton("注册");private JButton jb_landing=new JButton("登录");private JComboBox jtf_user=new JComboBox();privateJPasswordField jtf_pass=new JPasswordField(); private JPanel jp_certen=new JPanel(null);private JPanel jp_main;private JLabel jb_top=new JLabel();private JLabel jb_base=new JLabel();private JCheckBox jcb_mm=new JCheckBox("记住密码");private JCheckBox jcb_dl=new JCheckBox("自动登录");//一些定义以及实现这个登录功能的组件public void LandingWindows(){try {Class.forName(driver);} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}jb_landing.addActionListener(this);jb_zhuce.addActionListener(this);setcerten();//设置主界面的主要布局adduser();//记住登录的用户名jp_main=new JPanel(new BorderLayout()){@Overridepublic void paintComponent(Graphics g) {Graphics2D g2=(Graphics2D)g; super.paintComponents(g);Image image=Toolkit.getDefaultToolkit().getImage("F:\\JavaMedia\\landing2.jpg");g2.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);}};//通过重写这个方法设置这个主见的背景图片,有很多实现方法,这是比较简单的方法吧,可以通过查阅api得到。jp_main.add(jb_top,BorderLayout.NORTH);jp_main.add(jb_base,BorderLayout.SOUTH);jp_main.add(jp_certen,BorderLayout.CENTER);jb_top.setPreferredSize(new Dimension(jf.getWidth(),30));jb_base.setPreferredSize(new Dimension(jf.getWidth(),25));//通过设置两个空白面板来调整整个布局的位置jf.setContentPane(jp_main);jf.setSize(390,250);Dimension scrp=Toolkit.getDefaultToolkit().getScreenSize();jf.setLocation((scrp.width-jf.getWidth())/2,(scrp.height-jf.getHeight())/2);/*设置它的位置的常用方法吧,先得到它整个屏幕的宽高,然后用这种方法,不管在什么屏幕中都能显示在中间的位置吧*/jf.addWindowListener(new WindowAdapter(){@Overridepublic void windowClosing(WindowEvent arg0) {quit();}//退出ui的实现程序});jf.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);jf.setResizable(false);jf.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==jb_zhuce){zhuce();}if(e.getSource()==jb_landing){denglu();}}public void quit(){int flag=0;String mesg="你确定要退出此登录系统?";flag=JOptionPane.showConfirmDialog(jf,mesg,"提示",JOptionPane.YES_NO_OPTION);if(flag==JOptionPane.YES_OPTION){System.exit(0);}}public void itemStateChanged(ItemEvent e){if(e.getSource()==jcb_mm){getpass();}if(e.getSource()==jcb_dl){denglu();}}public void setcerten(){jp_certen.setOpaque(false);  //这个方法很重要,一定要设置false,才能显示出完整的背景图片jl_user.setBounds(80,15,60,20);jl_pass.setBounds(80,55,60,20);jtf_user.setBounds(130,10,150,30);jtf_pass.setBounds(130,50,150,30);jcb_mm.setBounds(90, 90, 80, 20);jcb_mm.addItemListener(this);jcb_dl.setBounds(190,90,80,20);jcb_mm.addItemListener(this);jb_zhuce.setBounds(230,120,70,30);jb_landing.setBounds(80,120,70,30);jp_certen.add(jl_user);jl_user.setForeground(Color.red);jp_certen.add(jtf_user);jtf_user.setEditable(true);jp_certen.add(jl_pass);jl_pass.setForeground(Color.red);jp_certen.add(jcb_mm);jp_certen.add(jcb_dl);jp_certen.add(jtf_pass);jp_certen.add(jb_landing);jp_certen.add(jb_zhuce);}//主要的布局程序类public void zhuce(){String z_user=String.valueOf(jtf_user.getSelectedItem());String z_pass=String.valueOf(jtf_pass.getPassword());String sql;if(z_user.trim().equals("")||z_pass.equals("")){JOptionPane.showMessageDialog(jf,"账号或密码不能为空!!!","提醒",JOptionPane.INFORMATION_MESSAGE);}else{Connection conn=null;PreparedStatement psta=null;ResultSet rs=null;  try { sql="select j_user from denglu where j_user=?";  conn=DriverManager.getConnection(url,user,pass);psta=conn.prepareStatement(sql);//prepareStatement比Statement强大啦很多psta.setString(1,z_user);rs=psta.executeQuery();if(rs.next()){JOptionPane.showMessageDialog(jf, "该用户已注册,请重新输入用户名!!","提醒!",JOptionPane.INFORMATION_MESSAGE);}else{ if(z_pass.length()>=6){sql="insert into denglu(j_user,j_pass) values(?,?)";psta.setString(1,z_user);psta.setString(2,z_pass);conn=DriverManager.getConnection(url,user,pass);psta=conn.prepareStatement(sql);psta.executeUpdate();JOptionPane.showMessageDialog(jf,"注册成功,请登录!!!");} else{ JOptionPane.showMessageDialog(jf,"密码须大于六位!!!","提醒!",JOptionPane.INFORMATION_MESSAGE); }} } catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}   finally{  try {  if(rs!=null){rs.close();rs=null;}    if(psta!=null){  psta.close();  psta=null;  }    if(conn!=null){  conn.close();  conn=null;  }  } catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();    }  }  }  }//实现注册功能的类,通过使用insert into语句把数据加入到数据库中,实现注册功能 public void adduser(){String a_user=String.valueOf(jtf_user.getSelectedItem());String a_pass=String.valueOf(jtf_pass.getPassword());String sql="select j_user from denglu;";try {Connection conn=DriverManager.getConnection(url,user,pass);PreparedStatement sta=conn.prepareStatement(sql);ResultSet rs=sta.executeQuery();rs.afterLast();int i=0;String s=null;while(rs.previous()&&i<4){i++;s=rs.getString("j_user");jtf_user.addItem(s);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//通过查找数据库来实现的记住前四个用户名的功能public void getpass(){String g_user=String.valueOf(jtf_user.getSelectedItem());String g_pass=String.valueOf(jtf_pass.getPassword());String sql="select j_user,j_pass from denglu where j_user=?";Connection conn=null;PreparedStatement  psta=null;ResultSetrs=null;try { conn=DriverManager.getConnection(url,user,pass); psta=conn.prepareStatement(sql); psta.setString(1,g_user); rs=psta.executeQuery();String s=null;while(rs.next()){s=rs.getString("j_pass");}jtf_user.addItem(s);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try{if(rs!=null){rs.close();rs=null;}if(psta!=null){psta.close();psta=null;}if(conn!=null){conn.close();conn=null;}}catch (SQLException e){e.printStackTrace();}}}public void denglu(){String d_user=String.valueOf(jtf_user.getSelectedItem());String d_pass=String.valueOf(jtf_pass.getPassword());String sql="select j_user,j_pass from denglu where j_user=?";if(d_user.equals("")||d_pass.equals("")){JOptionPane.showMessageDialog(jf,"登录密码或账户不能为空!!!!","警告,提醒!!!",JOptionPane.INFORMATION_MESSAGE);}else{Connection conn=null;PreparedStatement psta=null;ResultSet rs=null;try {conn=DriverManager.getConnection(url,user,pass);psta=conn.prepareStatement(sql);psta.setString(1,d_user);rs=psta.executeQuery();if(rs.next()){if(d_pass.equals(rs.getString(2))){JOptionPane.showMessageDialog(jf,"登录成功");System.exit(0);}else{JOptionPane.showMessageDialog(jf,"密码输入错误!!!","提醒!!警告!!!",JOptionPane.ERROR_MESSAGE);}}else{JOptionPane.showMessageDialog(jf,"用户名不存在,请重新输入或注册一个账户!!!","提醒!!!",JOptionPane.INFORMATION_MESSAGE);}}catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try{ if(rs!=null){ rs.close(); rs=null; }  if(psta!=null){ psta.close(); psta=null; }  if(conn!=null){ conn.close(); conn=null; }}    catch(SQLException e){ e.printStackTrace(); }}}}  public static void main(String[] args) {new Landing().LandingWindows();}}


2 0
原创粉丝点击