struts2框架连接MySql数据库

前几天一直在用struts2框架做项目,第一次接触框架,记录一下。目前我只做了增删改查操作 ,虽然操作简单,但是项目比较大,我的题目是病历管理系统,可想而知医院的各种病历(门诊、急诊、挂号、检验、处方、手术、护理、医嘱、入院登记,我一共用了20个表,前前后后几十个小模块),工作量也是比较大的。到现在我差不多完成了第一版的系统(增删改查部分),后续的一些细节处理我也会继续记录的(如果有时间的话),今天这部分是连接数据库。另外,本文只适合纯新手观看,如有错误,欢迎指正

JDBC技术原理

JDBC,全称 java database connectivity ,是一套用于执行SQL语句的javaAPI,它提供了访问数据库的接口,以下是JDBC访问数据库的主要步骤

  1. 加载数据库驱动程序class.forName("com.mysql.jdbc.driver);
  2. 定义数据库的连接地址,用户名和密码String url="jdbc:mysql://host:端口/“数据库名字”,“用户名”,"密码;
    端口名一般是3306,我的用户名是root,密码是123456
  3. 得到与数据库的连接对象
    Connection con=DriverManager.getConnection(url,username,password);
  4. 声明sql语句
    String sql ="select * from drug";
  5. 得到语句对象
    Statement stmt=con.createStatement();
  6. 执行sql语句
    ResultSet rs=stmt.executeQuery();
  7. 处理sql语句的返回结果
    rs.getString(列名);
  8. 关闭对象rs.close();stmt.close();con.close();

连接步骤

  1. 首先要导入struts2的jar包和mysql的jar包,struts2的jar包之前已经导过了(见上一篇博客),现在需要导入jdbc的jar文件,我用的是之前做项目用过的mysql-connector-java-8.0.16,这个可以直接从官网上下载,导入后需要build path,方法:右击项目–properties–java build path–add external jars–选择jdbc驱动的jar包,导入即可
  2. 建立连接,struts是基于mvc的设计思想,这里我直接将连接代码封装到了一个类DButil里,控制器直接调用这个类,就可以访问数据库,连接代码如下:
package struts2.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class DButil {

	private String driver;
	private String url;
	private String username;
	private String password;
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;
	public void setDriver(String driver) {
		this.driver=driver;
	}
	public void setUrl(String url) {
		this.url=url;
	}
	public void setUsername(String username) {
		this.username=username;
	}
	public void setPassword(String password) {
		this.password=password;
	}
	
	//构造方法,定义驱动程序连接用户名和密码信息
	public DButil() {
		driver="com.mysql.cj.jdbc.Driver";
		url="jdbc:mysql://localhost:3306/bingli?serverTimezone=UTC&amp";
		username="root";
		password="123456";
	}
		
	//获取连接对象
	Connection getConnection() {
		try {
			Class.forName(driver);
			con=DriverManager.getConnection(url,username,password);
		}
		catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		return con;
	}
		
	//获取语句对象
	private PreparedStatement getPrepareStatement(String sql) {
			try {
				pstmt=getConnection().prepareStatement(sql);
			}
			catch(SQLException e) {
				e.printStackTrace();
			}
			return pstmt;
	}
			
	//给pstmt的SQL语句设置参数(要求参数以数组形式给出)
	private void setParams(String sql,String[] params) {
		pstmt=this.getPrepareStatement(sql);
			try {
				for(int i=0;i<params.length;i++)
				try {
					pstmt.setString(i+1, params[i]);
				 }
				 catch(SQLException e) {
					e.printStackTrace();
				}
			}
			catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	
		//执行数据库查询操作时将结果封装到List对象中
		public List getList(String sql,String[] params) {
			List list=new ArrayList();
			try {
				this.setParams(sql, params);
				ResultSet rs=pstmt.executeQuery();
				ResultSetMetaData rsmd=rs.getMetaData();
				while(rs.next()) {
					Map m=new HashMap();
					for(int i=1;i<=rsmd.getColumnCount();i++) {
						String colName=rsmd.getColumnName(i);
						m.put(colName, rs.getString(colName));
					}
					list.add(m);
				}
			}
			catch(SQLException e) {
				e.printStackTrace();
			}
			finally {
				close();
			}
			return list;
		}
			
		//执行数据库查询操作时将返回的结果封装到map对象中
		public Map getMap(String sql,String[] params) {
			List list=getList(sql,params);
			if(list.isEmpty())
				return null;
			else 
				return (Map) list.get(0);
		}
			
		//更新数据库时调用的update方法
		public int update(String sql,String[] params) {
			int recNo=0;
			try {
				setParams(sql,params);
				recNo=pstmt.executeUpdate();
			}
			catch(Exception e) {
				e.printStackTrace();
			}
			finally {
				close();
			}
			return recNo;
		}
			
		//关闭对象
		private void close() {
			try {
				if(rs!=null)
					rs.close();
				if(pstmt!=null)
					pstmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e) {
			   }
		}

}

3.连接测试

public String login() {
		
		String sql = "select * from admin where id_admin=? and pw_admin=?";
		String[] params= {ad.getId_admin(),ad.getPw_admin()};
		Map map = db.getMap(sql,params);
        try {
            if (map!=null) 
                return "success";
            else
            return "error";
        } catch (Exception e) {

            e.printStackTrace();
            return "error";
        }
	}

这个是登陆代码,需要一个名为admin的数据库,表中有username和password两个属性,做一个jsp页面,输入用户名密码,调用上边的方法,便可成功进行数据库的访问,和表中数据比对,成功返回success即可登录,用户名和密码不一致则失败返回error

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值