1.StuManager.java文件(实现查询任务,添加学生信息和删除学生信息的功能)
/**
* 完成学生管理系统
* 1.查询任务
* 2.添加一个学生
* 3.删除一个学生
*/
package com.test1;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class StuManager extends JFrame implements ActionListener {
//定义一些组件
JPanel jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4;
JTable jt;
JScrollPane jsp;
JTextField jtf;
StuModel sm;
//定义操作数据库需要的东西
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
public static void main(String[] args) {
StuManager test3 = new StuManager();
}
//构造函数
public StuManager() {
//1.上面的界
jp1 = new JPanel();
jtf = new JTextField(10);
jb1 = new JButton("查询");
jb1.addActionListener(this);
jl1 = new JLabel("请输入名字:");
//把各个空间加入到jp1
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);
//2.下面的界
jp2 = new JPanel();
jb2 = new JButton("添加");
jb2.addActionListener(this);
jb3 = new JButton("修改");
jb3.addActionListener(this);
jb4 = new JButton("删除");
jb4.addActionListener(this);
//把各个空间加入到jp2中
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
//创建一个数据模型对象
StuModel sm = new StuModel();
//初始化JTable
jt = new JTable(sm);
//初始化jsp JScrollPane
jsp = new JScrollPane(jt);
//把jsp放入到jframe
this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");
//给窗口设置一个标题
this.setTitle("学生管理系统");
//给窗口设置一个大小
this.setSize(500, 500);
//禁止用户改变窗口的大小
//this.setResizable(false);
//设置窗口的初始位置
this.setLocationRelativeTo(null);
//this.setLocation(300, 300);
//设置当关闭窗口时,保证JVM也关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示
this.setVisible(true);
}
//对查询按钮响应
public void actionPerformed(ActionEvent e) {
//判断哪个按钮被点击
if(e.getSource()==jb1) {
System.out.println("用户希望查询");
//因 为把对表的数据封装到模型里。我们就可以简单完成查询
String name = this.jtf.getText().trim();
//写一个SQL语句
String sql = "select * from stu where stuName='"+name+"'";
//构建新的数据模型类,并更新
sm = new StuModel(sql);
//更新JTable
jt.setModel(sm);
}
//当用户点击添加
else if(e.getSource()==jb2)
{
StuAdddialog sa = new StuAdddialog(this, "添加学生", true);
//构建新的数据模型类,并更新
sm = new StuModel();
//更新JTable
jt.setModel(sm);
System.out.println("成功添加一位新同学");
}else if(e.getSource()==jb3)
{
StuModel sm=new StuModel();
int rownum =this.jt.getSelectedRow();
if(rownum==-1) { //提示
JOptionPane. showMessageDialog (this, "请选择一行");
return;//代表不要再往下面走了,谁调用就返回给谁 }
//显示修改对话框
}
new StuUpdDialog(this,"修改学生信息",true,sm,rownum);
//构建新的数据模型类,并更新
sm = new StuModel();
//更新JTable
jt.setModel(sm);
}
else if(e.getSource()==jb4)
{
//用户删除记录
//1.得到学生的ID号
//getSelectedRow会返回用户点中的行
//如果该 用户一行都没选择,则返回-1
int rowNum = this.jt.getSelectedRow();
if(rowNum==-1)
{
//提示
JOptionPane.showMessageDialog(this, "请选择一行");
return;
}
//得到学生的编号
//没String会返回一个object需要用String强转
sm = new StuModel();
String stuId=(String)sm.getValueAt(rowNum, 0);
//连接数据库,完成删除任务
//定义操作数据库需要的东西
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ct = DriverManager.getConnection("jdbc:sqlserver://本机的ID;databaseName=XueSheng","sa","123456");
ps=ct.prepareStatement("delete from stu where stuId=?");
ps.setString(1, stuId);
ps.executeUpdate();
} catch (Exception e2) {
e2.printStackTrace();
}finally {
//关闭资源
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
//更新数据模型
//构建新的数据模型类,并更新
sm = new StuModel();
//更新JTable
jt.setModel(sm);
System.out.println("成功删除一名学生信息");
}
}
}
2.StuAdddialog.java文件(增添功能的具体实现)
/**
* 增添功能
*/
package com.test1;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class StuAdddialog extends JDialog implements ActionListener {
//定义我需要的swing组件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;
//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
public StuAdddialog(Frame owner,String title,boolean modal)
{
super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
jl1=new JLabel("学号");
jl2=new JLabel("名字");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");
jl6=new JLabel("系别");
//文本框
jtf1=new JTextField();
jtf2=new JTextField();
jtf3=new JTextField();
jtf4=new JTextField();
jtf5=new JTextField();
jtf6=new JTextField();
jb1=new JButton("添加");
//注册监听
jb1.addActionListener(this);
jb2=new JButton("取消");
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));
//添加组件
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);
jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);
jp2.add(jtf6);
jp3.add(jb1);
jp3.add(jb2);
this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
//jb2.addActionListener(this);
//展现
this.setSize(300, 250);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//用户点击添加按钮后的响应动作
if(e.getSource()==jb1){
//连接数据库
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
PreparedStatement ps=null;
//连接数据库
try {
//1、加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("加载驱动成功");
//2.创建连接对象:
String url = "jdbc:sqlserver://本机的ID;databaseName=XueSheng";
//注册驱动程序,打开连接对象
conn = DriverManager.getConnection(url,"sa","123456");
System.out.println("数据库连接成功");
//与编译语句对象
String strsql="insert into stu values(?,?,?,?,?,?)";
ps=conn.prepareStatement(strsql);
//给参数赋值
ps.setString(1,jtf1.getText());
ps.setString(2,jtf2.getText());
ps.setString(3,jtf3.getText());
ps.setInt(4,Integer.parseInt(jtf4.getText()));
ps.setString(5,jtf5.getText());
ps.setString(6,jtf6.getText());
//4.执行操作
ps.executeUpdate();
//关闭添加学生的对话框:
this.dispose();
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
else if(e.getSource()==jb2){
this.dispose();
}
}
}
3.StuModel.java文件(学生模型)
/**
* 这是我的一个stu表的模型
* 可以把对student表的各种操作封装的该模型
*/
package com.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*;
public class StuModel extends AbstractTableModel{
//JTable里的用法Vector
//rowData用来存放行数据
//columnNames存放列名
Vector rowData, columnNames;
//定义操作数据库需要的东西
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
public void init(String sql)
{
if(sql.equals(""))
{
sql = "select * from stu";
}
//中间
columnNames = new Vector();
//设置列名:
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");
rowData = new Vector();
//从数据库中提取信息
try {
//1.加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("加载驱动成功");
//2.得到连接
ct = DriverManager.getConnection("jdbc:sqlserver://本机的ID;databaseName=XueSheng","sa","123456");
System.out.println("数据库连接成功");
//3.发送sql语句
ps=ct.prepareStatement(sql);
//4.执行
rs=ps.executeQuery();
while(rs.next()) {
Vector hang = new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
//加入到rowData
rowData.add(hang);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭
try {
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
//通过传过的SQL语句来获得数据模型
public StuModel(String sql)
{
this.init(sql);
}
//构造函数,用于初始化我们的数据模型
public StuModel() {
this.init("");
}
//得到共有多少列
public int getColumnCount() {
// TODO Auto-generated method stub
return this.columnNames.size();
}
public String getColumnName(int arg0) {
// TODO Auto-generated method stub
return (String)this.columnNames.get(arg0);
}
//得到共有多少行
public int getRowCount() {
// TODO Auto-generated method stub
return this.rowData.size();
}
//得到某行某列的数据
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
}
}
4.StuUpdDialog.java(修改学生信息任务)
package com.test1;
/*
* 修改已经存在的学生信息
* */
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.*;
import java.sql.*;
public class StuUpdDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLabel jl1, jl2,jl3, jl4, jl5 ,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;
//构造函数 Frame 代表父窗口口,title 代表窗口的名字,model指定是模式窗口,还是非模式的窗口
public StuUpdDialog(Frame owner,String title,boolean model,StuModel sm,int rownum) {
super(owner,title, model); //调用父类构造 方法,达到模式对话框效果
jl1=new JLabel("学号");
jl2=new JLabel("姓名");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");
jl6=new JLabel("系别");
jtf1=new JTextField();
//初始化数据
jtf1.setText((String)sm.getValueAt(rownum, 0));
//让jtf1不能修改
jtf1.setEditable(false);
jtf2=new JTextField();
jtf2.setText((String)sm.getValueAt(rownum, 1));
jtf3=new JTextField();
jtf3.setText((String)sm.getValueAt(rownum, 2));
jtf4=new JTextField();
jtf4.setText(sm.getValueAt(rownum, 3).toString());
jtf5=new JTextField();
jtf5.setText((String)sm.getValueAt(rownum, 4));
jtf6=new JTextField();
jtf6.setText((String)sm.getValueAt(rownum, 5));
jb1=new JButton ("修改");
jb2=new JButton ("取消");
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));
//添加组件
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);
jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);
jp2.add(jtf6);
jp3.add(jb1);
jp3.add(jb2);
this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
//注册监听
jb1.addActionListener(this);
jb2.addActionListener(this); //展现
this.setSize(400,300); //
this.setLocation(200,150);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb1) { //对用户点击添加按钮后的响应动作 //连接数据库
Connection ct =null;
PreparedStatement ps =null;
try {
//加载驱动
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// String url="jdbc:sqlserver://localhost:1433;databaseName=HIRO";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://本机的ID;databaseName=XueSheng";
ct=DriverManager.getConnection(url,"sa","123456");
//预编译的都是通过添加参数的方式来赋值
System.out.println("已连接数据库");
ps=ct.prepareStatement("update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept =? where stuId=?");
ps.setString(1, this.jtf2.getText());
ps.setString(2, this.jtf3.getText());
ps.setString(3, this.jtf4.getText()); //
ps.setInt(3,Integer.parseInt(this.jtf4.getText()));
ps.setString(4, this.jtf5.getText());
ps.setString(5, this.jtf6.getText());
ps.setString(6, this.jtf1.getText());
int i=ps.executeUpdate();
if(i==1) {
System.out.print("修改成功ok");
} else {
System.out.print("修改失败"); }
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try { ps.close(); ct.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//关闭对话框,关闭添加对话框
this.dispose();
} else if(e.getSource() == jb2) {
dispose();
}
}
}
5.SQL Server2012代码块:
--创建学生表
create table stu
(
stuId varchar(30) primary key,
stuName nvarchar(50) not null,
stuSex nchar(2) check (stuSex in('男','女')) default '男',
stuAge int check(stuAge>1),
stuJg nvarchar(30),
stuDept nvarchar(40)
)
insert into stu values('sp001','张三','男',20,'山西省','计算机系')
insert into stu values('sp002','李四','男',22,'深圳市','土木工程系')
insert into stu values('sp003','王五','男',26,'天津市','信息工程系')
insert into stu values('sp004','小孟鱼','男',18,'北京市','软件工程系')
--检查插入到表中的数据
select * from stu
备注:在进行java语言与数据库连接的时候需要注意以下问题: