Java的数据库操作,上学期末的课设是用到的,然而老师把JDBC连接mysql数据库的代码和配置文件已经给好了,那时对它可以说是只有一点点印象。
今天跟着书走一边敲一边,总算是有所进步。
数据库表的创建和初始数据的操作,都是在数据库的前端管理工具Navicat里进行的,创建的表如下:
主要注意点就是id设置成主键之后,一定要选择红色箭头的三个选项,需要哪个点哪个。不然只有那个key钥匙,不仅在表里面输入数据时你会迷茫,而且JDBC里面也会出现问题。
接下来就是:
package Java的数据库操作;import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import javax.print.attribute.standard.PDLOverrideSupported;/** 上学期最后课程设计用了这个,然后当时是老师给好的* 今天来自己动手过一遍,看一遍,练习一遍* 这个是数据库连接操作时,需要的类,并且注意,这是父类* 所以说后面需要使用到关于数据库操作的类,都是要继承此父类的* 这个父类负责打开数据库连接,关闭数据库操作对象*/public class DBConnection {//连接属性定义区,言下之意就是这些属性都是和数据库有关咯private final static String CLS="com.mysql.jdbc.Driver"; private final static String URL="jdbc:mysql://localhost:3306/amis";private final static String UESR="root";private final static String PWD="y888888";//公共数据库操作对象,这些是Java里面的功能吗?进一步说是java的jdbc中的功能public static Connection conn=null; //连接对象public static Statement stmt=null; //命令集对象public static PreparedStatement pStmt=null; //预编译命令集对象public static ResultSet rs=null; //结果集对象//打开连接的方法public static void getConnection() {try {Class.forName(CLS); //加载驱动类conn=DriverManager.getConnection(URL, UESR, PWD); //打开连接} catch (Exception e) {System.out.println("连接失败");e.printStackTrace();}}//关闭所有的数据库操作对象的方法public static void closeAll() {try {if (rs!=null){rs.close();rs=null;}if (stmt!=null){stmt.close();stmt=null;}if (pStmt!=null){pStmt.close();pStmt=null;}if (conn!=null){conn.close();conn=null;}} catch (Exception e) {e.printStackTrace();}}}
注释里面已经说了说,这里我来说说四个公共数据库操作对象,
Connection是每次需要开始操作连接对象而使用的
Statement和PreparedStatement,现在就我来说,这两个就是需要获取数据库内容,对内容进行操作所,而诞生的,是两个功能类。
http://www.jb51.net/article/76950.htm 这里对这俩进行了较详细的讲解,如果想深入了解的可以看看。
ResultSet,数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。http://blog.csdn.net/ustcxjt/article/details/7289345
在数据库连接父类建立完成之后,就开始对对象类进行创建,这样才知道在具体数据库操作的时候要干什么
package Java的数据库操作;
/** 此类就是一个对象类:会员*/
public class Academician {private int id;private String stuName;private String stuDept;private String stuClass;private String inDt;private String outDt;private String tell;private boolean BLeave;public Academician(){}public Academician(int i,String n,String d,String c,String in,String o,String t,boolean b){this.id=i;this.stuName=n;this.stuDept=d;this.stuClass=c;this.inDt=in;this.outDt=o;this.tell=t;this.BLeave=b;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getStuDept() {return stuDept;}public void setStuDept(String stuDept) {this.stuDept = stuDept;}public String getStuClass() {return stuClass;}public void setStuClass(String stuClass) {this.stuClass = stuClass;}public String getInDt() {return inDt;}public void setInDt(String inDt) {this.inDt = inDt;}public String getOutDt() {return outDt;}public void setOutDt(String outDt) {this.outDt = outDt;}public String getTell() {return tell;}public void setTell(String tell) {this.tell = tell;}public boolean isBLeave() {return BLeave;}public void setBLeave(boolean bLeave) {BLeave = bLeave;}}
然而今天get了一个方法,就是不在繁琐的自己创建set、get方法,eclipse里面是会有多的小功能。
在类文件编辑界面中右击-》选择Source-》选择Generate Getters and Setters,之后你就会明白了。
然后就对你的需要进行的操作,创建以下
package Java的数据库操作;import java.beans.Statement;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.List;/** 这个就是继承了数据库操作的父类* 对数据库中的会员信息进行操作,代码中也就是对会员信息类进行一系列配合sql语句的操作*/
public class AcademicianDao extends DBConnection{//使用命令集获取所有会员信息的方法public List<Academician> getAllAcademician() {List<Academician> list=new ArrayList<Academician>();try {getConnection();stmt=conn.createStatement();String sql="select * from Academician";rs=stmt.executeQuery(sql);while (rs.next()){Academician item=new Academician();item.setId(rs.getInt("id"));item.setStuName(rs.getString("stuName"));item.setStuDept(rs.getString("stuDept"));item.setStuClass(rs.getString("stuClass"));item.setInDt(rs.getString("inDt"));item.setOutDt(rs.getString("outDt"));item.setTell(rs.getString("tell"));item.setBLeave(rs.getBoolean("bleave"));list.add(item);}} catch (Exception e) {e.printStackTrace();} finally {closeAll();}return list;}//添加会员信息的方法public int addAcademician(Academician item) {int iRow=0;try {getConnection();String sql="insert into Academician(id,stuName,stuDept,stuClass,inDt,outDt,tell,bleave) values(?,?,?,?,?,?,?,?)";pStmt=conn.prepareStatement(sql);pStmt.setInt(1, item.getId());pStmt.setString(2, item.getStuName());pStmt.setString(3, item.getStuDept());pStmt.setString(4, item.getStuClass());pStmt.setString(5, item.getInDt());pStmt.setString(6, item.getOutDt());pStmt.setString(7, item.getTell());pStmt.setBoolean(8, item.isBLeave());iRow=pStmt.executeUpdate(); //更新数据库} catch (Exception e) {e.printStackTrace();}finally {closeAll();}return iRow;}//修改会员信息的方法public int editAcademician(Academician item) {int iRow=0;try {getConnection();String sql="update Academician set stuName=?,stuDept=?,stuClass=?,inDt=?,outDt=?,"+"tell=?,bleave=? where id=?";pStmt=conn.prepareStatement(sql);pStmt.setString(1, item.getStuName());pStmt.setString(2, item.getStuDept());pStmt.setString(3, item.getStuClass());pStmt.setString(4, item.getInDt());pStmt.setString(5, item.getOutDt());pStmt.setString(6, item.getTell());pStmt.setBoolean(7, item.isBLeave());pStmt.setInt(8, item.getId());iRow=pStmt.executeUpdate(); //更新数据库} catch (Exception e) {e.printStackTrace();}finally {closeAll();}return iRow;}//删除会员信息的方法public int delAcademician(int id) {int iRow=0;try {getConnection();String sql="delete from Academician where id=?";pStmt=conn.prepareStatement(sql);pStmt.setInt(1, id);iRow=pStmt.executeUpdate();} catch (Exception e) {e.printStackTrace();}finally {closeAll();}return iRow;}
}
在这里,你将看到父类中四个公共操作对象的使用,同样也可以看到sql语句和java的结合之处在哪里。
当然,这里学习的只是一种方法,上学期末的课设里面今天一看,他喵的还是另外一种。部分例子如下:
package xupt.se.ttms.dao;import java.util.LinkedList;
import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException;
import xupt.se.ttms.idao.iStudioDAO;
import xupt.se.ttms.model.Studio;
import xupt.se.util.DBUtil;public class StudioDAO implements iStudioDAO {@Overridepublic int insert(Studio stu) {try {String sql = "insert into studio(studio_name, studio_row_count, studio_col_count, studio_introduction )"+ " values('"+ stu.getName()+ "', "+ stu.getRowCount()+ ", " + stu.getColCount() + ", '" + stu.getIntroduction()+ "' )";DBUtil db = new DBUtil();db.openConnection();ResultSet rst = db.getInsertObjectIDs(sql);if (rst!=null && rst.first()) {stu.setID(rst.getInt(1));}db.close(rst);db.close();return 1;} catch (Exception e) {e.printStackTrace();}return 0;}@Overridepublic int update(Studio stu) {int rtn=0;try {String sql = "update studio set " + " studio_name ='"+ stu.getName() + "', " + " studio_row_count = "+ stu.getRowCount() + ", " + " studio_col_count = "+ stu.getColCount() + ", " + " studio_introduction = '"+ stu.getIntroduction() + "' ";sql += " where studio_id = " + stu.getID();DBUtil db = new DBUtil();db.openConnection();rtn =db.execCommand(sql);db.close();} catch (Exception e) {e.printStackTrace();}return rtn;}@Overridepublic int delete(int ID) {int rtn=0; try{String sql = "delete from studio ";sql += " where studio_id = " + ID;DBUtil db = new DBUtil();db.openConnection();rtn=db.execCommand(sql);db.close();} catch (Exception e) {e.printStackTrace();}return rtn; }@Overridepublic List<Studio> select(String condt) {List<Studio> stuList = null;stuList=new LinkedList<Studio>();try {String sql = "select studio_id, studio_name, studio_row_count, studio_col_count, studio_introduction from studio ";condt.trim();if(!condt.isEmpty())sql+= " where " + condt;DBUtil db = new DBUtil();if(!db.openConnection()){System.out.print("fail to connect database");return null;}ResultSet rst = db.execQuery(sql);if (rst!=null) {while(rst.next()){Studio stu=new Studio();stu.setID(rst.getInt("studio_id"));stu.setName(rst.getString("studio_name"));stu.setRowCount(rst.getInt("studio_row_count"));stu.setColCount(rst.getInt("studio_col_count"));stu.setIntroduction(rst.getString("studio_introduction"));stuList.add(stu);}}db.close(rst);db.close();} catch (Exception e) {e.printStackTrace();}finally{}return stuList;}
}
所以说还有其它方法来完成数据库和java的连接和具体实现功能,但是总得思路不要错。
最后,就是测试用例的main和运行结果
package Java的数据库操作;import java.util.List;public class testAMis {public static void main(String[] args) {AcademicianDao dao=new AcademicianDao();System.out.println("会员列表信息如下");showAcademician(dao.getAllAcademician());Academician item=new Academician(2, "c", "c1", "c2", "2016-01-01 00:00:00", null, "18991237658", false);dao.addAcademician(item);item=new Academician(3, "d", "d1", "d2", "2016-02-01 00:00:00", null, "15698123546", false);dao.addAcademician(item);System.out.println("添加后会员列表信息如下");showAcademician(dao.getAllAcademician());item.setId(3);item.setOutDt("2018-01-01 00:00:00");item.setBLeave(true);dao.editAcademician(item);System.out.println("修改后会员列表信息如下");showAcademician(dao.getAllAcademician());dao.delAcademician(2);System.out.println("删除后会员列表信息如下");showAcademician(dao.getAllAcademician());}private static void showAcademician(List<Academician> allAcademician) {System.out.println("id\t会员名\t所在院系\t所在班级\t入会时间\t离会时间\t联系电话\t是否在会");for (Academician item:allAcademician){System.out.println(item.getId()+"\t"+item.getStuName()+"\t"+item.getStuDept()+"\t"+item.getStuClass()+"\t"+item.getInDt()+"\t"+item.getOutDt()+"\t"+item.getTell()+"\t"+get_str_from_bleave(item.isBLeave()));}}public static String get_str_from_bleave(boolean bleave) {String s="在会中";if (bleave){s="离会";}return s;}}
总之今天就是对JDBC有了进一步认识,我认为就是我们现在需要多认识,多见面,首先要知道有哪些功能,都是干什么,怎么用,java里面的优势和劣势可以说同时出现在这里,优势就是确实只要知道怎么用,以后随时可以用,但劣势就是要掌握的好多。
因为,积累,沉淀,学习乃当前之道。



















