本例采用的是mysql数据库,通过JDBC连接,需要使用mysql-connector驱动;另外需要将sql查询的结果集封装至对象中,即ORM,把关系型数据库的表结构映射到对象上,因此需要编写实体类。
本次演示的仅针对具体功能,上下例子没有关联性。另外,本文属于编程新手,使用的方法很简单,没有框架,技术大牛请忽略。
一、DBUtil
Util是工具类,一般用来描述和业务逻辑没有关系的数据处理,这里用来封装数据库连接。
public class DBUtil {
//连接数据库地址
private static final String URL="jdbc:mysql://localhost:3306/testdb";
//用户名
private static final String UNAME="user";
//密码
private static final String PWD="password";
private static Connection conn=null;
static {
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取数据库的连接
conn=DriverManager.getConnection(URL,UNAME,PWD);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
return conn;
}
public static void close(ResultSet rs,Statement stat,Connection conn){
try {
if(rs!=null)rs.close();
if(stat!=null)stat.close();
if(conn!=null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
二、实体类
这里用来对应封装sql结果集
public class Sku implements Serializable{
//实体类
private static final long serialVersionUID=1L;
//唯一主键
private Integer id;
private String sku;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id=id;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku=sku;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
三、查询操作
这里仅演示全部查询(没有条件)
//查询所有数据
public List<Sku> findAll() throws SQLException {//返回Sku对象的list,将查询结果封装至该实体类
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Sku s = null;
List<Sku> skus = new ArrayList<Sku>();
String sql = "select * from testdb where type=1";
try{
conn = DBUtil.getConnection();//调用数据库连接
ps = conn.prepareStatement(sql);//执行sql语句
rs = ps.executeQuery();//得到结果集
while(rs.next()){//将结果集的每条记录循环封装至对象实例
s = new Sku();//实例化对象
s.setId(rs.getInt(1));//通过set方法对对象属性赋值
s.setSku(rs.getString(2));
s.setName(rs.getString(3));
skus.add(s);//将实例添加到对象list的中,list的中的count就是查询的结果数
}
}catch(SQLException e){
e.printStackTrace();
throw new SQLException("查询所有数据失败");
}
return skus;//返回对象list
}
四、插入操作
//添加方法(写入数据库)
public void add(SkuCode sc) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
String sql = "insert into testdb(l1,l2,l3,l4,l5,sku,createtime,type)values(?,?,?,?,?,?,?,1)";
try{
conn = DBUtil.getConnection();
ps = conn.prepareStatement(sql);
ps.setString(1, sc.getL1());//通过实体类的get方法将变量赋值给sql语句
ps.setString(2, sc.getL2());
ps.setString(3, sc.getL3());
ps.setString(4, sc.getL4());
ps.setString(5, sc.getL5());
ps.setString(6, sc.getSku());
ps.setString(7, sc.getCreatetime());
ps.executeUpdate();//执行sql语句
}catch(SQLException e){
e.printStackTrace();
throw new SQLException("添加数据失败");
}
}
五、删除操作
//删除方法(写入数据库)
public void del(Code c) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
String sql = "delete from testdb where id in (?)";//根据id删除
try{
conn = DBUtil.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, c.getId());
ps.execute();
}catch(SQLException e){
e.printStackTrace();
throw new SQLException("删除sku码失败");
}
}
六、总结
增删改查方法实现的原理大多数相同,主要是跟业务结合,参数通过action使用post从页面传到后台。
主要的思路就是调用数据库连接,写sql语句,将页面的传来的参数赋值到sql语句中,然后执行;另外就是实体类,表结构映射到对象,返回对象list。