实验题1 学生信息管理函数。
数据库中的信息参考Exp9.1.txt,这些命令用来创建student表,包含学生的学号、姓名、年龄信息。
① 根据学号,可以查询到学生的姓名和年龄;
② 给定学生的学号、姓名、年龄,在表中追加一行信息;
③ 给定学生的学号,可以从表中删除该学生的信息;
[基本要求] 对上面的每一个功能编写相应的函数,并测试。
【实验思想】本题主要通过数据库的建立和数据库的链接进行相应的一些操作,这里使用了SQL Server数据库,用JDBC的数据库思想完成操作。
【实验过程】
1.建立数据库JavaTest,然后在本数据库中建立一张数据表student,在student表中需要用到题目中要求的三个属性列:学号、姓名、年龄,并且将数据通过Excel表导入到数据库中待用。(数据Excel表附在附录中,为本班同学信息)
2.考虑到本次实验的实验内容比较多,于是每一个方法都是通过函数或是类的方式来实现,这里我具体说一下每一个类和实现方法,不作具体代码的详细分析。在开始之前要首先将外部的jar包导入到当前的工程中。
(1)在当前工程下,右键单击“build path”->“configure build path”->“add external jars”,然后选择要导入的jar文件路径,进行导入,若在当前工程下出现了“referenced libraries”,则是导入成功;否则,查看一下什么原因造成了错误。
(2)类和方法的解释
class ConnectionDemo 这个类实现了从java文件到数据库的链接。
package Program01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionDemo {
private static final String URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JavaTest";
private static final String userName = "sa";
private static final String passWord = "";
public ConnectionDemo(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection connected() throws SQLException{
return DriverManager.getConnection(URL, userName, passWord);
}
}
class SelectFun 这个类完成了查找操作,Select方法为主要实现方法,其中用到了java.sql.PreparedStatement和记录集(数据库中游标的概念)Resultset来进行查询结果的存储,然后按照顺序输出。
package Program01;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class SelectFun {
public static String sql = null;
private static java.sql.PreparedStatement statement;
public SelectFun(){}
public static void Select(String str,String selectSQL,Connection conn){
sql = selectSQL;
try {
statement = conn.prepareStatement(sql);
statement.setString(1, str);
ResultSet rs = statement.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
System.out.print(metaData.getColumnName(1)+" ");
System.out.print(metaData.getColumnName(2)+" ");
System.out.println(metaData.getColumnName(3)+" ");
while(rs.next()){
String no = rs.getString(1);
String name = rs.getString(2);
int age = rs.getInt(3);
System.out.println(""+no+" "+name+" "+age);
}
rs.close();
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class InsertFun 实现数据插入操作的类,其中方法Insert为这里的主要操作函数。这里使用java.sql.PreparedStatement代替Statement,可以动态的进行插入操作。
package Program01;
import java.sql.Connection;
import java.sql.SQLException;
public class InsertFun {
public static String sql = null;
public static void Insert(String No,String name,int age,String insertSQL,Connection conn){
sql = insertSQL;
try {
java.sql.PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, No);
statement.setString(2, name);
statement.setInt(3, age);
statement.executeUpdate();
statement.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
class DeleteFun类实现数据删除操作,和插入操作基本相同,不赘述。
package Program01;
import java.sql.Connection;
import java.sql.SQLException;
public class DeleteFun {
public static String sql = null;
private static java.sql.PreparedStatement statement;
public static void Delete(String No,String deleteSQL,Connection conn){
sql = deleteSQL;
sql = "delete from student where Sno = ?";
try {
statement = conn.prepareStatement(sql);
statement.setString(1, No);
statement.executeUpdate();
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
调用实现方法和主函数的类以及方法体:
package Program01;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Scanner;
import Program01.SelectFun;
public class StudentInfoManage {
// static SelectFun SF = new SelectFun();
static String sql;
public static Connection conn;
public StudentInfoManage(){
ConnectionDemo connection = new ConnectionDemo();
try {
conn = connection.connected();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
StudentInfoManage stuInfoMan = new StudentInfoManage();
sql = "select * from student where Sno = ?";
Scanner scannin = new Scanner(System.in);
System.out.println("请输入你要查询的学生的学号");
String No = scannin.nextLine();
SelectFun.Select(No,sql,conn);
// 查询
System.out.println("请输入要插入的学生的学号");
No = scannin.next();
System.out.println("请输入要插入的学生的姓名");
String name = scannin.next();
System.out.println("请输入要插入的学生的年龄");
int age = scannin.nextInt();
sql ="insert into student(Sno,Sname,Sage) values(?,?,?)";
InsertFun.Insert(No, name, age, sql, conn);
//插入
sql = "delete from student where Sno = ?";
System.out.println("请输入要删除的学生的学号");
No = scannin.next();
DeleteFun.Delete(No, sql, conn);
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}