前几天一直在用struts2框架做项目,第一次接触框架,记录一下。目前我只做了增删改查操作 ,虽然操作简单,但是项目比较大,我的题目是病历管理系统,可想而知医院的各种病历(门诊、急诊、挂号、检验、处方、手术、护理、医嘱、入院登记,我一共用了20个表,前前后后几十个小模块),工作量也是比较大的。到现在我差不多完成了第一版的系统(增删改查部分),后续的一些细节处理我也会继续记录的(如果有时间的话),今天这部分是连接数据库。另外,本文只适合纯新手观看,如有错误,欢迎指正
JDBC技术原理
JDBC,全称 java database connectivity ,是一套用于执行SQL语句的javaAPI,它提供了访问数据库的接口,以下是JDBC访问数据库的主要步骤
- 加载数据库驱动程序
class.forName("com.mysql.jdbc.driver);
- 定义数据库的连接地址,用户名和密码
String url="jdbc:mysql://host:端口/“数据库名字”,“用户名”,"密码
;
端口名一般是3306,我的用户名是root,密码是123456 - 得到与数据库的连接对象
Connection con=DriverManager.getConnection(url,username,password);
- 声明sql语句
String sql ="select * from drug";
- 得到语句对象
Statement stmt=con.createStatement();
- 执行sql语句
ResultSet rs=stmt.executeQuery();
- 处理sql语句的返回结果
rs.getString(列名);
- 关闭对象
rs.close();stmt.close();con.close();
连接步骤
- 首先要导入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包,导入即可
- 建立连接,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&";
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