Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统

Java实验四 JDBC
使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务:
(1)创建数据库students;
(2)在数据students中创建表scores,包括如下字段:学号、姓名、性别、得分,字段类型自行定义。学号为主键。
接着使用JDBC编写Java程序,完成如下任务:
(1)在表格scores插入5条记录,代表5个学生,三位男生二位女生,各字段内容自定(“得分”字段填入自定分数);
(2)显示5位学生的所有信息;
(3)将三位男生的得分减去5分,将两位女生的成绩加上3分;
(4)从键盘输入不同学号,根据学号显示相应学生的所有信息。

做成了窗口,界面是这样的

1.安装JDBC,配置SqlServer

可以参考之前写的博客:Java使用JDBC连接SQL Server数据库
注意Java的版本,java7、8、12要安装不同的包。
记得重启电脑。

2.写代码

文件目录是这样的

两个文件,

SqlCode.java

SqlCode.java存放静态SQL代码


/*
 * 这里放的是 静态Sql代码
*/

public class SqlCode {
	
	// 在数据students中创建表scores
	static String createTable = ""
			+ "USE students;"
			+ "
"
			+ "CREATE TABLE scores"
			+ "("
			+ "sno int not null,"
			+ "name varchar(20) not null,"
			+ "ssex varchar(10) CHECK(ssex IN('boy','girl')),"
			+ "score int not null,"
			+ "PRIMARY KEY(sno),"
			+ ")";
	
	//在表格scores插入5条记录
	static String insertValues = ""
			+ "USE students"
			+ "
"
			+ "INSERT INTO scores(sno,name,ssex,score) VALUES(1,'DaWang','boy','61')"
			+ "
"
			+ "INSERT INTO scores(sno,name,ssex,score) VALUES(2,'ErWang','girl','62')"
			+ "
"
			+ "INSERT INTO scores(sno,name,ssex,score) VALUES(3,'SanWang','boy','63')"
			+ "
"
			+ "INSERT INTO scores(sno,name,ssex,score) VALUES(4,'siWang','girl','65')"
			+ "
"
			+ "INSERT INTO scores(sno,name,ssex,score) VALUES(5,'wuWang','girl','66')";

	//显示5位学生的所有信息
	static String queryString = ""
			+ "USE students"
			+ "
"
			+ "SELECT TOP 5 * FROM scores"; 
	
	//将三位男生的得分减去5 tucao:男生真累
	static String updateScoreBoy = ""
			+ "USE students"
			+ "
"
			+ "UPDATE scores "
			+ "
"
			+ "SET score = score - 5"
			+ "
"
			+ "WHERE ssex = 'boy'"
			+ "
";
	
	//将两位女生的成绩加上3分
	static String updateScoreGirl = ""
			+ "USE students"
			+ "
"
			+ "UPDATE scores "
			+ "
"
			+ "SET score = score + 3"
			+ "
"
			+ "WHERE ssex = 'girl'"
			+ "
";
	
	//删除某个学号 自己测试数据用的
	static String deleteByIdSql = "USE students"
			+ "
"
			+ "DELETE FROM scores WHERE sno = ";
}

SqlServerStu.java

SqlServerStu.java文件就是主文件,使用JDBC来操作数据库了,最后还是做成了花里胡哨的窗口。。一共450行 (´ཀ`」 ∠)


class sqlServer{
	
	private Connection connection = null; //连接接口实例
	private Statement statmment = null; //执行静态sql的接口实例
	private PreparedStatement preStatement = null; //执行动态sql的接口实例
	private ResultSet resSet = null; // sql查询的返回数据集合
	
	String dbName = "students"; //数据库名
	String tbName = "scores"; //数据表名 没必要其实
	String url = "jdbc:sqlserver://127.0.0.1:1433"; //sqlserver连接地址url
	String userName = "sa";  //sqlserver的账号名 要在SMSS安全性里面设置
	String passWord = "root"; //sqlserver的账号的密码 要在SMSS安全性里面设置
	
	//下面就是按课题要求写的一些静态代码(String字符串类型,在SqlCode.java文件中的全局变量)
	String createTableSql = SqlCode.createTable;
	String insertSql = SqlCode.insertValues;
	String queryAllSql = SqlCode.queryString;
	String updateBoySql = SqlCode.updateScoreBoy;
	String updateGrilSql = SqlCode.updateScoreGirl;
	String delByIdSql = SqlCode.deleteByIdSql;

	//无参构造函数 初始化建立连接
	public sqlServer() {
		// TODO Auto-generated constructor stub
		try {
			//加载数据库驱动
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			//DriverManager接口获取连接
			this.connection = DriverManager.getConnection(url,userName,passWord);
			//获取 执行数据库静态SQL语法的接口
			this.statmment = connection.createStatement();
			if(connection != null) {
				System.out.println("连接成功!");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//有参构造函数 urlParam初始化建立连接
	public sqlServer(String urlParam) {
		// TODO Auto-generated constructor stub
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			this.connection = DriverManager.getConnection(urlParam);
			this.statmment = connection.createStatement();
			if(connection != null) {
				System.out.println("连接成功!");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//关闭连接
	public void close() throws SQLException {
		if(resSet != null) {
			resSet.close();
		}
		if(statmment != null) {
			statmment.close();
		}
		if(preStatement != null) {
			preStatement.close();
		}
		if(connection != null) {
			System.out.println("关闭连接!");
			connection.close();
		}
	}
	
	//打印输出 ResultSet集合中的数据
	public void rsPrint(ResultSet rS) throws SQLException {
		if(rS == null) return;
		System.out.println("");
		System.out.println("sno"+"|   name"+"   | ssex"+"  | score");
		while(rS.next()) {
			int sno = rS.getInt("sno");
			String name = rS.getString("name");
			String ssex = rS.getString("ssex");
			int score = rS.getInt("score");
			System.out.println(sno+"  |  "+name+"  |  "+ssex+"  |  "+score);
		}
	}
	
	//返回ResultSet集合
	public ResultSet queryBySno(int snoId) throws SQLException {
		String queryByIdString = ""
				+ "USE students"
				+ "
"
				+ "SELECT * FROM scores"
				+ "
"
				+ "WHERE scores.sno = ?"
				+ "";
		this.preStatement = connection.prepareStatement(queryByIdString);
		preStatement.setInt(1, snoId);
		return preStatement.executeQuery();
	}

	//查询全部
	public ResultSet queryAll(String querySql) throws SQLException {
		return statmment.executeQuery(querySql);
	}

	//创建数据库
	public void generalExc(String sql) throws SQLException {
		preStatement = connection.prepareStatement(sql);
		preStatement.executeUpdate();
	}
	
	//创建数据库
	public void createDataBase(String dbName) throws SQLException {
		String createSql = "CREATE DATABASE "+dbName;
		preStatement = connection.prepareStatement(createSql);
//		preStatement.setString(1, dbName);
		preStatement.executeUpdate();
		System.out.println("创建数据库"+dbName+"成功!");
	}
	
	//删除数据库
	public void delDataBase(String dbName) throws SQLException {
		String deleteSql = "DROP DATABASE "+dbName;
		preStatement = connection.prepareStatement(deleteSql);
//		preStatement.setString(1, dbName);
		preStatement.executeUpdate();
		System.out.println("删除数据库"+dbName+"成功!");
	}
	
	//通过sno学号删除 数据表中的记录
	public void delById(int sno) throws SQLException {
		preStatement = connection.prepareStatement(delByIdSql + sno);
		preStatement.executeUpdate();
		System.out.println("删除记录"+"成功!");
	}
	
	//创建数据表
	public void createTable(String createSql) throws SQLException {
		statmment.execute(createSql);
		System.out.println("创建数据表"+"成功!");
	}
	
	//插入数据到数据表
	public void insertValue(String insertSql) throws SQLException {
		statmment.execute(insertSql);
		System.out.println("删除数据表"+"成功!");
	}
	
	//更新数据表中的数据
	public void updateValue(String updateSql) throws SQLException {
		statmment.execute(updateSql);
		System.out.println("更新完成!");
	}
	
	//scanner输入指定学号,查询学生信息
	public void inputSnoAndQuery() throws SQLException {
		Scanner inputScanner = new Scanner(System.in);
		int snoId = inputScanner.nextInt();
		rsPrint(queryBySno(snoId));
	}

	//返回值:把ResultSet集合中的数据转换成String类型  (因为后面展示到窗口文本域需要string类型)
	public String returnString(ResultSet rS) throws SQLException {
		// TODO Auto-generated method stub
		StringBuffer myBuffer = new StringBuffer();
		int line = 0;
		while(rS.next()) {
			if(line == 0) {
				line++;
				myBuffer.append("查询结果如下: "+"
");
//				myBuffer.append("sno"+"|   name"+"   | ssex"+"  | score"+"
");
			}
			int sno = rS.getInt("sno");
			String name = rS.getString("name");
			String ssex = rS.getString("ssex");
			int score = rS.getInt("score");
			myBuffer.append(sno+"  |  "+name+"  |  "+ssex+"  |  "+score+"
");
		}
		if(line == 0) myBuffer.append("");
		return myBuffer.toString();
	}
	
}

class window{
	//组件
	public JFrame sqlWindowFrame;
	public JPanel PanelSouth;
	public JPanel PanelNorth;
	public JTextArea textArea;
	public JScrollPane scrollPane;
	public JTextField inpuTextField;
	
	//一系列按钮
	public JButton customQueryBtn; //执行自定义sql代码的查询按钮
	public JButton noResultBtn; //执行没有返回值的sql代码的按钮 比如:create insert delete 这些
	public JButton createDBBtn; //创建数据库按钮
	public JButton createTBBtn; //创建数据表按钮
	public JButton insertBtn; //添加数据按钮
	public JButton showBtn; //展示5个学生数据的按钮
	public JButton updateBtn; //更新数据的按钮 男-5 女+3
	public JButton querySnoBtn; //通过学号查询的按钮
	public JLabel labelSouth; //底部标签 
	public JLabel labelNorth; //顶部标签
	
	public sqlServer myServer; //把sqlServer作为内部类
	
	//窗口构造函数  主要用来初始化组件
	public window() {
		// TODO Auto-generated constructor stub
		this.sqlWindowFrame = new JFrame("by fishers _(´ཀ`」 ∠)_"); //设置窗体 名字为notePad
		this.sqlWindowFrame.setLayout(new BorderLayout()); //边界布局方式
		this.sqlWindowFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭框
		this.sqlWindowFrame.setSize(800,500);
		
		this.textArea = new JTextArea();
		this.scrollPane = new JScrollPane(textArea);
		
		this.inpuTextField = new JTextField(30);
		this.customQueryBtn = new JButton("执行查询");
		this.noResultBtn = new JButton("执行无返回值的sql");
		this.createDBBtn = new JButton("创建数据库");
		this.createTBBtn = new JButton("创建数据表");
		this.insertBtn = new JButton("添加数据");
		this.showBtn = new JButton("展示数据");
		this.updateBtn = new JButton("更新数据");
		this.querySnoBtn = new JButton("查询学号");
		this.PanelSouth = new JPanel();
		this.PanelNorth = new JPanel();
		this.labelSouth = new JLabel("输入sql语法: ");
		this.labelNorth = new JLabel("内置功能区: ");
		this.myServer = new sqlServer();
		textArea.setFont(new Font("宋体",Font.PLAIN,20));
		textArea.setEditable(false); //设置文本域组件不可以编辑
		itemAdd();
		addListen();
	}
	
	//添加组件都写在这里
	public void itemAdd() {
		
		PanelSouth.add(labelSouth);
		PanelSouth.add(inpuTextField);
		PanelSouth.add(customQueryBtn);
		PanelSouth.add(noResultBtn);
		PanelSouth.add(noResultBtn);
		PanelNorth.add(labelNorth);
		PanelNorth.add(createDBBtn);
		PanelNorth.add(createTBBtn);
		PanelNorth.add(insertBtn);
		PanelNorth.add(showBtn);
		PanelNorth.add(updateBtn);
		PanelNorth.add(querySnoBtn);	
		
		sqlWindowFrame.add(scrollPane,BorderLayout.CENTER);
		sqlWindowFrame.add(PanelSouth,BorderLayout.SOUTH);
		sqlWindowFrame.add(PanelNorth,BorderLayout.NORTH);
		sqlWindowFrame.setVisible(true);
	}
	
	//监听方法都写在这里
	public void addListen() {
		//监听自定义查询按钮
		customQueryBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String textString = inpuTextField.getText();
				System.out.println(textString);
				if(textString != null) {
					try {
//						myServer.rsPrint(myServer.queryAll(textString));
						String queryAns = myServer.returnString(myServer.queryAll(textString));
						System.out.println(queryAns);
						textArea.setText(queryAns);
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});

		//监听没有返回值的按钮
		noResultBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String textString = inpuTextField.getText();
				System.out.println(textString);
				if(textString != null) {
					try {
						myServer.generalExc(textString);
						textArea.setText("执行完成!");
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});

		//监听创建数据库按钮
		createDBBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					myServer.createDataBase("students");
					textArea.setText("创建数据库完成!");
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					textArea.setText("创建数据库失败,请检查语法是否正确!或当前连接已经存在该数据库!");
					e1.printStackTrace();
				}
			}
		});
		
		//监听创建数据表的按钮
		createTBBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					myServer.createTable(myServer.createTableSql);
					textArea.setText("创建数据表完成!");
				} catch (SQLException e1) {
					textArea.setText("创建数据表失败,请检查语法是否正确!或当前数据库中已经存在该数据表!");
					e1.printStackTrace();
				}
			}
		});
		
		//监听插入数据的按钮
		insertBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					myServer.insertValue(myServer.insertSql);
					textArea.setText("添加数据完成!");
				} catch (SQLException e1) {
					textArea.setText("添加数据失败,请检查语法是否正确!或当前数据库中已经存在该数据!");
					e1.printStackTrace();
				}
			}
		});
		
		//监听展示数据的按钮
		showBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					String queryAns = myServer.returnString(myServer.queryAll(myServer.queryAllSql));
					System.out.println(queryAns);
					textArea.setText(queryAns);
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
		});
		
		//监听更新数据的按钮
		updateBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					myServer.updateValue(myServer.updateBoySql);
					myServer.updateValue(myServer.updateGrilSql);
					textArea.setText("更新数据完成!");
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					textArea.setText("更新数据失败,请检查语法是否正确!");
					e1.printStackTrace();
				}
			}
		});
		
		//监听通过学号查询数据的按钮
		querySnoBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {
					int sno = Integer.valueOf(inpuTextField.getText());
					String queryAns = myServer.returnString(myServer.queryBySno(sno));
//					if(queryAns == " " || queryAns == null) queryAns = "未查到该学生信息";
//					System.out.println(queryAns);
					textArea.setText(queryAns);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					textArea.setText("查询失败,请检查语法是否正确");
					e1.printStackTrace();
				}
			}
		});
	}
}

//主进程启动
public class SqlServerStu {
	public static void main(String []args) throws SQLException {
//		String urlParam = "jdbc:sqlserver://127.0.0.1:1433?user=sa&password=root"; //这个连接url好像不能用啊
//		sqlServer myServer = new sqlServer();
//		myServer.createDataBase("students"); //创建数据库
//		myServer.createTable(myServer.createTableSql); //创建数据表
//		myServer.insertValue(myServer.insertSql); //增
//		myServer.rsPrint(myServer.queryAll(myServer.queryAllSql)); //查
//		myServer.rsPrint(myServer.queryBySno(2)); //查
//		myServer.updateValue(myServer.updateBoySql); //改
//		myServer.delById(1); //删
//		myServer.rsPrint(myServer.queryAll(myServer.queryAllSql)); //查
//		myServer.delDataBase("students"); //删
//		myServer.close(); //关闭连接
//		myServer.inputSnoAndQuery();
//		myServer.updateValue(myServer.updateBoySql);
//		myServer.delDataBase("students");
//		myServer.createDataBase("qwertest12");
		window myWindow = new window(); //最后还是做成了窗口 orz
	}
}
//凑够450行

做数据库实验也是可以的??

原文地址:https://www.cnblogs.com/fisherss/p/11831089.html