java中如何实现登录界面与数据库正确连接?

java中如何实现登录界面与数据库正确连接?,第1张

import java.awt.Dimension

import java.awt.GridLayout

import java.awt.Toolkit

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Statement

import javax.swing.JDialog

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPanel

import javax.swing.JPasswordField

import javax.swing.JTextField/*** * @author mzhe**/

class Loginfrm extends JDialog implements ActionListener

{

JLabel l_name,l_pass,l_error

JTextField t_name

JButton b_enter,b_cancle,b_clear

JPanel pan1,pan2,pan3,pan4

JPasswordField t_pass

String sname,spass

int sunit

NetConn sql

Statement sqll

ResultSet rs

Librarybox lbox

int until=0

Loginfrm(JFrame f,String s)

{

//界面布局

super(f,s)

l_name=new JLabel("名字:")

l_pass=new JLabel("密码:")

l_error=new JLabel("请输入用户和密码登录")

t_name=new JTextField("",10)

t_pass=new JPasswordField("",10)

t_pass.setEchoChar('*')

b_enter=new JButton("确定")

b_enter.addActionListener(this)

b_cancle=new JButton("取消")

b_cancle.addActionListener(this)

b_clear=new JButton("清除")

b_clear.addActionListener(this)

pan1=new JPanel()

pan2=new JPanel()

pan3=new JPanel()

pan4=new JPanel()

pan1.add(l_name)

pan1.add(t_name)

pan2.add(l_pass)

pan2.add(t_pass)

pan3.add(l_error)

pan4.add(b_enter)

pan4.add(b_cancle)

pan4.add(b_clear)

setLayout(new GridLayout(4,1))

add(pan1)

add(pan2)

add(pan3)

add(pan4)

//建立数据库连接

sql=new NetConn()

//设置窗口大小

setSize(300,300)

setVisible(false)

//得到屏幕信息以便使框架居中显示

Dimension screeSize = Toolkit.getDefaultToolkit().getScreenSize()

int screeWidth=screeSize.width

int screeHeight=screeSize.height

//得到框架的大小信息

Dimension frameSize=this.getSize()

int x=(screeWidth-frameSize.width)/2

int y=(screeHeight-frameSize.height)/2

this.setLocation(x, y)

}

public void actionPerformed(ActionEvent e)

{

//单击确定按钮的事件处理程序

if(e.getSource()==b_enter)

{

//如果连续登录次数小于4

if(until<=4)

{

//如果用户名或者密码为空,将显示提示信息

if(t_name.getText().equals("")||t_pass.getText().equals(""))

{

l_error.setText("用户名和密码不能为空")

}

else

{

try{

sqll=sql.connect()

//根据用户名查询

rs=sqll.executeQuery("SELECT * FROM users where username="+"'"+t_name.getText()+"'")

//遍历查询得到的结果集

while(rs.next())

{

sname=rs.getString(2)

spass=rs.getString(3)

//得到登录用户的级别

sunit=Integer.parseInt(rs.getString(4))

//如果密码正确

if(t_pass.getText().equals(spass))

{

//判断用户的级别,根据不同的级别,显示不同的菜单

switch(sunit)

{

case 1:{l_error.setText("登录成功")

t_name.setText("")

t_pass.setText("")

lbox=new Librarybox()

lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

lbox.setResizable(false)

lbox.bookfi.setEnabled(true)

lbox.bookse.setEnabled(true)

lbox.bookth.setEnabled(true)

lbox.bookfo.setEnabled(true)

lbox.mi_system_manger.setEnabled(true)

lbox.mi_system_login.setEnabled(false)

lbox.setVisible(true)this.dispose()

break

}

case 2: {

l_error.setText("登录成功")

t_name.setText("")

t_pass.setText("")

lbox=new Librarybox()

lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

lbox.setResizable(false)

lbox.bookfi.setEnabled(false)

lbox.bookse.setEnabled(false)

lbox.bookth.setEnabled(true)

lbox.bookfo.setEnabled(false)

lbox.mi_system_manger.setEnabled(false)

lbox.mi_system_login.setEnabled(false)

lbox.setVisible(true)

this.dispose()break

}

case 3:

{

l_error.setText("登录成功")

t_name.setText("")

t_pass.setText("")

lbox=new Librarybox()

lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

lbox.setResizable(false)

lbox.bookfi.setEnabled(true)

lbox.bookse.setEnabled(false)

lbox.bookth.setEnabled(false)

lbox.bookfo.setEnabled(true)

lbox.mi_system_manger.setEnabled(false)

lbox.mi_system_login.setEnabled(false)

lbox.fi_msglabel_user.setEnabled(false)

lbox.setVisible(true)

this.dispose()

break

}

}

}

else{

l_error.setText("用户名或密码错误!")

until++

}

}

}catch(SQLException e2){

e2.printStackTrace()

}

}

}

//超出登录次数

else{

l_error.setText("你已经超出登录次数")

t_name.setEnabled(false)

t_pass.setEnabled(false)

b_enter.setEnabled(false)

b_clear.setEnabled(false)

}

}//单击清除按钮的事件处理程序

else if(e.getSource()==b_clear)

{

t_name.setText("")

t_pass.setText("")

l_error.setText("请输入用户名和密码登录")

}

//单击取消按钮的事件处理程序

else if(e.getSource()==b_cancle)

{

dispose()

}

}

}

第一步:创建一个查询过程,因为在登录时要根据用户名查询用户密码

此步要用到pl/sql编程知识,代码如下:

create or replace procedure sel_user(uname in varchar2,pass out varchar2) is

begin

select users.password into pass from users where users.username=uname and rownum = 1

end

第二步:编写登录页面(login.java)(采用纯java+servlet编写)

//login.java如下

package cn.hnu

import java.io.IOException

import java.io.PrintWriter

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

public class testhtml extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setContentType("text/htmlcharset=gbk")

try {

PrintWriter pw = resp.getWriter()

pw.println("<html>")

pw.println("<head>")

pw.println("<title>")

pw.println("用户登录")

pw.println("</title>")

pw.println("</head>")

pw.println("<body>")

pw.println("<h1>用户登录</h1>")

pw.println("<hr>")

pw.println("<form method=post action=loginCl>")

pw.println("用户名:<input type=text name=userName><br>")

pw.println("密&nbsp&nbsp码:<input type=password name=password><br>")

pw.println("<input type=submit value=登录>")

pw.println("<input type=reset value=重置>")

pw.println("</form>")

pw.println("</body>")

pw.println("</html>")

} catch (Exception e) {

e.printStackTrace()

// TODO: handle exception

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp)

}

}

第三步:编程成功登录页面(wel.java) //wel.java如下,它主要用于用户正常登录后显示信息给用户

package cn.hnu

import java.io.IOException

import java.io.PrintWriter

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import javax.servlet.http.HttpSession

public class Wel extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

//防止用户非法登录

HttpSession hs = req.getSession()

String s = (String)hs.getAttribute("pass")

if(s == null){

resp.sendRedirect("login")

}

PrintWriter pw = resp.getWriter()

pw.write("welcome,hello")

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp)

}

}

第四步:编写login处理页面(loginCl.java)

package cn.hnu

import java.io.IOException

import java.sql.*

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import javax.servlet.http.HttpSession

public class loginCl extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

String u = req.getParameter("userName")

String p = req.getParameter("password")

//查询数据库

String pa=null

Connection ct = null

CallableStatement cs = null

try {

Class.forName("oracle.jdbc.driver.OracleDriver")

ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle",

"scott", "tiger")

cs = ct.prepareCall("{call sel_user(?,?)}")

cs.setString(1, u)

cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR)

cs.execute()

pa = cs.getString(2)

System.out.println("u=" + u + " p=" + pa)

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace()

} finally {

try {

if (cs != null) {

cs.close()

}

if (ct != null) {

ct.close()

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

//验证用户信息是否合法

if (p.equals(pa)) {

HttpSession hs = req.getSession(true)//防止用户非法登录

hs.setAttribute("pass", "OK")

resp.sendRedirect("wel")

} else {

resp.sendRedirect("login")

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp)

}

}

亲,sql可以换成MySQL

这个没关系的,别的都可以照搬来用


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6817938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存