22.4 系统实现
本驾校学员管理系统使用Java语言开发,系统开发环境为Eclipse和MyEclipse。本节将向读者介绍本系统的编码实现。
22.4.1 构建工程
首先,在MyEclipse创建一个Web工程,并将这个Web工程取名为DrivingSchool。按照19.1节的内容将JDBC驱动添加到工程中。然后在工程中的src文件下创建两个包 (Package),分别取名为db、servlet。db包下存放连接和处理MySQL数据库的Java类, servlet包下存放着所有的servlet文件。本工程的所有JSP页面都放在WebRoot文件夹下。
22.4.2访问和操作MySQL数据库的代码
在db包下创建DB.java类。这个Java类中封装了5个方法。这些方法分别是onnectMySQL()方法、query()方法、update()方法、execute()方法和 closeDB()方法。onnectMySQL()方法主要用于连接MySQL数据库;query()方法用于执行SELECT语句;update()方法用于执行INSERT语句、UPDATE语句和DELETE语句;execute()方法可以执行所有的SQL语句;closeDB()方法用于关闭数据库对象。下面分别介绍这几个方法的代码。
1. connectMySQL()方法
connectMySQL()方法的作用是连接MySQL数据库。方法中使用Class.forName()声明驱动,使用getConnection()方法创建Connection对象,使用createStatement()方法创建Statement对象。connectMySQL()方法的主要代码如下:
public void connectMySQL() { String url="jdbc:mysql://59.65.226.15:3306/drivingschooln; //获取JDBC协议和MySQL端口 String user="root"; //获取数据库的用户名 String passwd="huanghuajin"; //获取密码 try { //使用try...catch语句捕获异常 Class.forName("com.mysql.jdbc.Driver"); //指定 JDBC 驱动 conn = DriverManager.getConnection(url, user, passwd); //实例化Connection对象 System.out.println("连接数据库服务器成功"); //输出连接成功的信息 stat=conn.createStatement(); //实例化 Statement 对象 } catch (Exception e) { //捕获异常 e.printStackTrace(); //输出异常信息 } }
因为连接MySQL数据库需要JDBC驱动,所以使用Class.forName ()方法指定com.mysql.jdbc.Driver驱动程序。因为本机器的IP地址为59.65.226.15,所以在url中设置 为这个IP地址。MySQL的端口号为3306。连接MySQL后直接登录到drivingschool数据库中,因为驾校学员管理系统的数据都存储在这个数据库下。这个MySQL数据库的root 用户的密码是“huanghuajin”。
2. query()方法
query()方法用于执行SELECT语句。query()方法中是通过调用executeQuery()方法来执行SELECT语句的。执行完SELECT语句后,executeQuery()方法会返回ResultSet对象。 査询结果都存储在ResultSet对象中。因此,query()函数的类型ResultSet()方法的代码如下:
public ResultSet query(String sql) throws SQLException{ if(sql==null||sql.equals("")){ //判断是否有 SELECT 语句 return null; //如果没有SELECT语句就返回null } rs=stat.executeQuery(sql); //执行 SELECT 语句 return rs; //返回查询结果rs }
executeQuery()方法是Statement类中的方法,需要Statement对象来调用。上述代码中, stat为Statement对象,因此,stat可以调用executeQuery()方法执行SELECT语句。
3. update()方法
update()方法用于执行INSERT语句、UPDATE语句和DELETE语句。update()方法中是通过调用executeUpdate()方法来执行这些SQL语句的。执行完SQL语句后, executeUpdate()方法会返回更新的记录数。因此,update()方法的类型为int类型。 executeUpdate()方法的代码如下:
public int update(String sql) throws SQLException{ int i; //变量i用户存储更新的记录数 if(sql==null ||sql.equals("")){ //判断是否有更新语句 return 0; //没有更新语句时返回0 } i=stat.executeUpdate(sql); //执行更新语句 return i; //返回更新的记录数 }
executeUpdate()方法也是Statement类中的方法,也需要Statement对象来调用因此,上述代码中也使用stmt来调用executeUpdateO方法。
4. executeSQL()方法
executeSQL()方法既可以执行SELECT语句,也可以执行更新数据的SQL语句。executeSQL()方法调用Statement类中的execute()方法来执行SQL语句。execute()方法执行SELECT语句时返回true,执行其他SQL语句时返回false。
执行SELECT语句后,可以通过getResultSet()方法获取查询结果。因为查询结果存储在ResultSet对象中,所以executeSQL()方法的类型为ResultSet。executeSQL()方法的代码如下:
public ResultSet excute(String sql) throws SQLException{ boolean t; //定义布尔型变量t if(sql==null||sql.equals("")){ //判断是否有 SELECT 语句 return null; } t=stat.excute(sql); //将excute()方法的返回值赋给 t //如果t的值为TRUE,则excute()方法中执行了SELECT语句 if(t==true){ rs=stat.getResultSet(); //将查询结果赋值给rs return rs; //返回 rs } //如果t的值不是TRUE,则excute)方法执行了INSERT语句、UPDATE语句或者DELETE语句 else{ int i=stat.getUpdateCount(); //获取更新的记录数 System.out.println("更新的记录数是:"+i); //输出更新的记录数 return null; //返回空值 } }
如果执行SELECT语句,该函数会通过ResultSet对象返回查询结果。如果执行INSERT语句、UPDATE语句和DELETE语句,那么excuteSQL()方法返回null。
5. closeDB()方法
closeDB()方法用于关闭与MySQL数据库有关的对象。这个方法中调用close()方法关闭打开的对象。一般情况下,操作数据库后一定要将打开的对象关闭。closeDB()方法的代码如下:
public void closeDB() throws SQLException{ if(rs!=null){ //判断ResultSet对象是否为空 rs.close(); //关闭 ResultSet 对象 rs=null; } if(stat!=null){ //判断Statement对象是否为空 stat.close(); //关闭Statement对象 stat=null; } if(conn!=null){ //判断Connection对象是否为空 conn.close(); //关闭Connection对象 conn=null; }
closeDB()方法中调用close()方法关闭了ResultSet、Statement对象和Connection对象,并且将它们的值赋为null。
DB.java类的大部分代码与19.5节中的mysqljava类中的代码相同,只有部分代码有所差异。如果读者想了解更多Java连接和操作MySQL数据库的方法,请参照第19章的内容。