首先连接数据库操作,我将数据库连接和释放封装成了一个类;
package example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//数据库连接打包成一个类,用此类创建对象,在构造函数中传入Connection对象,即完成对数据库的连接
public class connectMyData{
private static String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static String DB_URL = "jdbc:mysql://localhost:3306/javaobject";
private static String USER = "sa"; //sa用户是我自己创建的
private static String PASS = "123456";
public static Connection getConection() {
Connection conn = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn) {
try {
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.这里很明显要用到多态的知识,于是再创建了一个计算体积的类,同时在里面实现多态求的底面积。
package example;
//实现多态,在computerV方法中传入的参数是哪个子类型就会调用哪个子类的底面计算体积。
public class computer {
double gao;
computer(double gao){
this.gao = gao;
}
double computerV(Inter dimian){
return dimian.bottom()*gao;
}
}
3.创建对象,将对象信息存到数据库,再取出信息对对象进行属性进行赋值(信息重建),最后通过去取出的信息构建好对象之后计算体积:
package example;
import java.sql.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class use {
//主函数入口
public static void main(String[] args) {
// TODO Auto-generated method stub
yuanzhu yz = new yuanzhu(3); //创建一个圆柱底面对象
sanlengzhu slz = new sanlengzhu(1,2,3);//创建一个三棱柱底面对象,很明显两边之和不大于第三边,下面体积答案会是0.
zhisilengzhu zslz = new zhisilengzhu(1,2);//创建一个直四棱柱底面对象
yuanzhu yz_2 = null; //创建三个需要从数据库获取信息对其进行插入数据的底面对象
sanlengzhu slz_2 =null;
zhisilengzhu zslz_2 =null;
//连接数据库需要创建的三个接口对象
Connection conn = null;
PreparedStatement preStmt = null;
ResultSet rs = null;
//下面是数据库操作,包含连接数据库,插入对象数据,获取对象数据
try {
//连接数据库对象
conn = connectMyData.getConection();
// 执行向数据库插入圆柱底面对象yz
String insertYuanZhu_yz = "insert into yuanzhu(objectname,bian) values(?,?)";
preStmt = conn.prepareStatement(insertYuanZhu_yz);
preStmt.setString(1, "yz");
preStmt.setDouble(2, yz.bian);
int result1 = preStmt.executeUpdate();
if(result1 > 0)
System.out.println("数据库插入圆柱柱底面对象yz成功!!!");
else
System.out.println("插入数据库失败");
//执行向数据库插入三棱柱底面对象slz
String insertSanLengZhu_slz ="insert into sanlengzhu(objectname,a,b,c) values(?,?,?,?)";
preStmt = conn.prepareStatement(insertSanLengZhu_slz);
preStmt.setString(1, "slz");
preStmt.setDouble(2, slz.a);
preStmt.setDouble(3, slz.b);
preStmt.setDouble(4, slz.c);
int result2 = preStmt.executeUpdate();
if(result2 > 0)
System.out.println("数据库插入三棱柱底面对象slz成功!!!");
//执行向数据库插入直四棱柱底面对象zslz
String insertZhiSiLengZhu_zslz ="insert into zhisilengzhu(objectname,a,b) values(?,?,?)";
preStmt = conn.prepareStatement(insertZhiSiLengZhu_zslz);
preStmt.setString(1, "zslz");
preStmt.setDouble(2, slz.a);
preStmt.setDouble(3, slz.b);
int result3 = preStmt.executeUpdate();
if(result3 > 0)
System.out.println("数据库插入直四棱柱底面对象zslz成功!!!!");
else
System.out.println("插入失败");
//执行向数据库查询获取曾经叫yz的圆柱底面对象信息
String selectYuanZhu1 = "select bian from yuanzhu where objectname='yz'";
preStmt = conn.prepareStatement(selectYuanZhu1);
rs = preStmt.executeQuery();
// 展开结果集数据库,用取出三棱柱对象slz的信息对slz_2对象属性赋值
//System.out.println(rs.getRow());判断数据指针到哪一条,从0开始
while(rs.next()){
// 通过字段检索
double bian = rs.getDouble("bian");
// 赋值
yz_2 = new yuanzhu(bian);
System.out.println("输出一下yz_2的边:"+yz_2.bian);
}
//执行向数据库查询曾经叫slz的底面对象信息
String selectSanLengZhu1 = "select a,b,c from sanlengzhu where objectname='slz'";
preStmt = conn.prepareStatement(selectSanLengZhu1);
rs = preStmt.executeQuery(selectSanLengZhu1);
while(rs.next()) {
double a = rs.getDouble("a");
double b = rs.getDouble("b");
double c = rs.getDouble("c");
slz_2 = new sanlengzhu(a,b,c);
System.out.println("输出一下slz_2的边a:"+slz.a);
}
//执行向数据库查询并获取曾经叫zslz的底面对象信息
String selectZhiSiLengZhu1 = "select a,b from zhisilengzhu where objectname='zslz'";
preStmt =conn.prepareStatement(selectZhiSiLengZhu1);
rs = preStmt.executeQuery(selectZhiSiLengZhu1);
while(rs.next()) {
double a = rs.getDouble("a");
double b = rs.getDouble("b");
zslz_2 = new zhisilengzhu(a,b);
System.out.println("输出一下zslz_2的边a:" + zslz_2.a);
}
// 完成后关闭数据库连接
rs.close();
preStmt.close();
conn.close();
}catch(SQLException se){
// 处理 JDBC 错误
se.printStackTrace();
}catch(Exception e){
// 处理 Class.forName 错误
e.printStackTrace(); //这些都是异常处理不用管
}finally{
// 关闭资源
try{
if(preStmt!=null) preStmt.close();
}catch(SQLException se2){
}// 什么都不做
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
//开始用获取的数据库对象yz_2,slz_2,zslz_2来通过computer类计算三种类型柱体的体积了。
computer graphV =new computer(1);//假设柱体的高都为1
System.out.println("此圆柱的体积为:"+graphV.computerV(yz_2));
System.out.println("此三棱柱的体积为:"+graphV.computerV(slz_2));
System.out.println("此直四棱柱的体积为:"+graphV.computerV(zslz_2));
}
}