Java笔记8(jdbc-odbc、jdbc、JTable使用、Min版学生管理系统)

[size=large]Java基础8
Java基础8 1

文件结构 1

使用jdbc-odbc桥连_Class18/ com.test1/test1.java 3

PreparedStatement的使用_Class18/ com.test1/test2.java 5

jdbc方式操作数据库操作数据库_Class18/ com.test2/test1.java 7

java中使用ddl语句_Class18/ com.test1/test2.java 9

JTable使用_Class19/ com.test1/test1.java 11

从数据库中取出学生信息_Class19/ com.test1/test2.java 12

Min版学生管理系统_数据库设计 14

min版学生管理系统1.0_Class19/ com.test1/test3.java 15

min版学生管理系统1.0_Class19/ com.test1/ StuAddDialog.java 18

min版学生管理系统1.0_Class19/ com.test1/ StuModel.java 21

min版学生管理系统2.0_Class20/ com.test1/ StuManage.java 24

min版学生管理系统2.0_Class20/ com.test1/ StuAddDialog.java 28

min版学生管理系统2.0_Class20/ com.test1/ StuUpdateDialog.java 31

min版学生管理系统2.0_Class20/ com.test1/ StuModel.java 35

min版学生管理系统3.0_Class20/ com.test2/ StuManage.java 38

min版学生管理系统3.0_Class20/ com.test2/ StuAddDialog.java 42

min版学生管理系统3.0_Class20/ com.test2/ StuUpdateDialog.java 45

min版学生管理系统3.0_Class20/ com.test2/ StuModel.java 48

min版学生管理系统3.0_Class20/ com.test2/ SqlHelper.java 50 [/size]
[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832504463.png[/img][img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832525902.png[/img]
使用jdbc-odbc桥连_Class18/ com.test1/test1.java 

/*

* 演示使用jdbc-odbc桥连方式操作数据库

* 1.配置数据源

* 2.在程序中去连接数据源

*/



package com.test1;

import java.sql.*;



public class Test1 {



public static void main(String[] args) {

Connection ct=null; //定义一个Connection

Statement sm=null; //定义一个Statement

try {

//1.加载驱动(把需要的驱动程序加入内存)

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");



//2.得到连接[指定连接到哪个数据源,用户名和密码]

//如果配置数据源时,选择的是windows nt验证,则不需要加"sa","luowei"

//即:Connection ct=DriverMannager.getConnection("jdbc:odbc:mytest");

ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","luowei");



//3.创建Statement或者PreparedStatement[区别]

//Statement用处是:主要用于发送sql语句到数据库

sm=ct.createStatement();



//4.执行(crud,创建数据库,备份数据库,删除数据库....)

//1.演示添加一条数据到dept表

//executeUpdate可以执行cud操作(添加,删除,修改)

int i=sm.executeUpdate("insert into dept values('50','保安部','北京')");

if(i==1)

{

System.out.println("添加ok");

}

else

{

System.out.println("添加error");

}

//2.修改从dept表记录

int k=sm.executeUpdate("update dept set loc='北京 ' where deptno='40'");

if(k==1)

{

System.out.println("更新成功");

}

else

{

System.out.println("更新不成功");

}

//3.演示从dept表中删除一条记录

int j=sm.executeUpdate("delete from dept where deptno='50'");

if(j==1)

{

System.out.println("删除ok");

}

else

{

System.out.println("删除error");

}

//查询,显示所有部门

//ResultSet结果集

ResultSet rs=sm.executeQuery("select * from dept;");

//rs指向结果集的第一行的前一行

//循环取出

while(rs.next())

{

int deptno=rs.getInt(1);

String dname=rs.getString(2);

String loc=rs.getString(3);

System.out.println(deptno+" "+dname+" "+loc);

}

// //试图取出1行的第一列

// rs.next();

// int a=rs.getInt(1);//取出第1列

// System.out.println(a);

// //取出第一行第2列

// String b=rs.getString(2);

// System.out.println(b);



//5.关闭资源,关闭顺序是,谁后创建,则谁先关闭

try {

if(sm!=null)

{

rs.close();

sm.close();

ct.close();

}

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

}

}



}



PreparedStatement的使用_Class18/ com.test1/test2.java

/*

* PreparedStatement的使用

* 1.PreparedStatement可以提高执行效率(因为它有预编译的功能)

* 2.PreparedStatement可以防止sql注入,但是要求用?赋值的方式才可以

*/



package com.test1;

import java.sql.*;



public class Test2 {



public static void main(String[] args) {

Connection ct=null; //定义一个Connection

PreparedStatement ps=null; //定义一个Statement

ResultSet rs=null;

try {

//1.加载驱动(把需要的驱动程序加入内存)

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");



//2.得到连接[指定连接到哪个数据源,用户名和密码]

//如果配置数据源时,选择的是windows nt验证,则不需要加"sa","luowei"

//即:Connection ct=DriverMannager.getConnection("jdbc:odbc:mytest");

ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","luowei");



//3.创建PreparedStatement - ps

//Statement用处是:主要用于发送sql语句到数据库

ps=ct.prepareStatement("select * from dept where deptno=? and loc=?");

//给?赋值,用?赋值可以防止注入漏洞

ps.setInt(1, 20);

ps.setString(2, "dallas");

rs=ps.executeQuery();



//4.查询

//ResultSet结果集

//循环取出

while(rs.next())

{

int deptno=rs.getInt(1);

String dname=rs.getString(2);

String loc=rs.getString(3);

System.out.println(deptno+" "+dname+" "+loc);

}



//使用PrepareStatement添加一条记录

ps=ct.prepareStatement("insert into dept values(?,?,?)");

ps.setInt(1, 50);

ps.setString(2,"安全部");

ps.setString(3, "北京");

int i=ps.executeUpdate();

if(i==1)

{

System.out.println("添加ok");

}

else

{

System.out.println("添加error");

}



//5.关闭资源,关闭顺序是,谁后创建,则谁先关闭

try {

if(rs!=null)

{

rs.close();

}

if(ps!=null)

{

ps.close();

}

if(ps!=null)

{

ct.close();

}

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}





jdbc方式操作数据库操作数据库_Class18/ com.test2/test1.java

/*

* jdbc方式操作数据库

* 1.把java.sql.*;引入

* 2.需要引入三个jar包

* 3.如果取值按编号,则需要一一对应,如果是按名字取的,则顺序可以倒乱

*/



package com.test2;

import java.sql.*;



public class Test1 {



public static void main(String[] args) {

//PreparedStatement[火箭车]

//定义需要的对象

PreparedStatement ps=null;

Connection ct=null;

ResultSet rs=null;



try {

//初始化我们的对象

//1.加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//2.得到连接

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://" +

"127.0.0.1:1433;databaseName=LiangshanHeros2","sa","luowei");

//3.创建火箭车

ps=ct.prepareStatement("select ename,sal,dname from emp,dept " +

"where emp.deptno=dept.deptno");

//4.执行[如果是增加,删除,修改 使用executeUpdate(),如果是查询使用executeQuery()]

rs=ps.executeQuery();

//循环取出,雇员的名字,雇员的薪水,部门名称

while(rs.next())

{

//String name=rs.getString(1);

//float sal=rs.getFloat(2);

//int deptno=rs.getInt(3);

String name=rs.getString("ename");

float sal=rs.getFloat("sal");

String deptno=rs.getString("dname");

System.out.println(name+" "+sal+" "+deptno);

}

//添加,删除,修改

ps=ct.prepareStatement("insert into dept values(?,?,?)");

ps.setInt(1, 100);

ps.setString(2, "财务部");

ps.setString(3, "大学城");



//执行[如果是增加,删除,修改 使用executeUpdate(),如果是查询使用executeQuery()]

int i=ps.executeUpdate();

if(i==1)

{

System.out.println("添加ok");

}

else

{

System.out.println("添加error");

}



//5.关闭资源,关闭顺序是,谁后创建,则谁先关闭

try {

if(rs!=null)

{

rs.close();

}

if(ps!=null)

{

ps.close();

}

if(ps!=null)

{

ct.close();

}

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}





java中使用ddl语句_Class18/ com.test1/test2.java

/*

* 在java中使用ddl语句(create,drop,backup...)

*/



package com.test2;

import java.sql.*;



public class Test2 {



public static void main(String[] args) {

//定义需要的对象

PreparedStatement ps=null;

Connection ct=null;

ResultSet rs=null;



try {

//加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//得到连接

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangshanHeros2","sa","luowei");

//创建ps,创建数据库,创建表,备份数据库

ps=ct.prepareStatement("create database vvv");

ps=ct.prepareStatement("create table xxx(aa int)");

ps=ct.prepareStatement("backup database aaa to disk='f:/123.bak'");

//如果执行的是ddl语句

boolean b=ps.execute();

System.out.println("OK "+b);



try {

if(rs!=null)

{

rs.close();

}

if(ps!=null)

{

ps.close();

}

if(ps!=null)

{

ct.close();

}

} catch (Exception e) {

e.printStackTrace();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}





JTable使用_Class19/ com.test1/test1.java

/*

* JTable使用

*/



package com.test1;

import javax.swing.*;

import java.awt.*;

import java.sql.*;

import java.util.*;

import java.awt.event.*;



public class Test1 extends JFrame{



//rowData用来存放行数据

//columnNames存放列名

Vector rowData,columnNames;

JTable jt=null;

JScrollPane jsp=null;



public static void main(String[] args) {

Test1 test1=new Test1();



}



//构造函数

public Test1()

{

Vector columnNames=new Vector();

//设置列名

columnNames.add("学号");

columnNames.add("名字");

columnNames.add("性别");

columnNames.add("年龄");

columnNames.add("籍贯");

columnNames.add("系别");



rowData=new Vector();

//rowData可以存放多行

Vector hang=new Vector();

hang.add("lw001");

hang.add("孙悟空");

hang.add("男");

hang.add("500");

hang.add("花果山");

hang.add("少林派");



//加入到rowData

rowData.add(hang);



//初始化JTable

jt=new JTable(rowData,columnNames);



//初始化jsp JScrollPane

jsp=new JScrollPane(jt);



//把jsp放入到jframe

this.add(jsp);

this.setSize(400,300);



this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}





从数据库中取出学生信息_Class19/ com.test1/test2.java

/*

* 从数据库中取出学生信息

*/



package com.test1;



import java.util.Vector;



import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import java.sql.*;



public class Test2 extends JFrame{



//rowData用来存放行数据

//columnNames存放列名

Vector rowData,columnNames;

JTable jt=null;

JScrollPane jsp=null;



//定义操作数据库需要的东西

PreparedStatement ps=null;

Connection ct=null;

ResultSet rs=null;





public static void main(String[] args) {

Test2 test2=new Test2();



}



public Test2()

{

columnNames=new Vector();

//设置列名

columnNames.add("学号");

columnNames.add("名字");

columnNames.add("性别");

columnNames.add("年龄");

columnNames.add("籍贯");

columnNames.add("系别");



rowData=new Vector();

try {

//1.加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros","sa","luowei");

ps=ct.prepareStatement("select * from stu");

rs=ps.executeQuery();



while(rs.next())

{

//rowData可以存放多行

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 e) {

e.printStackTrace();

}

}





//初始化JTable

jt=new JTable(rowData,columnNames);



//初始化jsp JScrollPane

jsp=new JScrollPane(jt);



//把jsp放入到jframe

this.add(jsp);

this.setSize(400,300);



this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}





Min版学生管理系统_数据库设计



--创建学生表



create table stu(

stuId varchar(30) primary key,

stuName nvarchar(50) not null,

stuSex nchar(1) check(stuSex in('男','女')) default '男',

stuAge int check(stuAge>1),

stuJg nvarchar(30),

stuDept nvarchar(40)

)



insert into stu values('lw001','孙悟空','男',20,'花果山','少林派');

insert into stu values('lw002','猪八戒','男',15,'高老庄','天上的');

insert into stu values('lw003','沙悟净','男',26,'流沙河','水里的');

insert into stu values('lw004','唐三藏','男',21,'长安','庙里的');



select * from stu;




[color=red][size=x-large]min版学生管理系统1.0_Class19/ com.test1/test3.java [/size][/color]
[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832547033.png[/img][img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832559475.png[/img]
/* 

* 完成一个min版本的学生管理系统

*/



package com.test1;

import java.awt.*;

import java.awt.event.*;

import java.util.*;



import javax.swing.*;



import com.test1.StuModel;



import java.sql.*;



public class Test3 extends JFrame implements ActionListener{



//定义一些控件

JPanel jp1,jp2;

JLabel jl1;

JButton jb1,jb2,jb3,jb4;

JTable jt;

JScrollPane jsp;

JTextField jtf;









public static void main(String[] args) {

Test3 test3=new Test3();



}



//构造函数

public Test3()

{

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);



jp2=new JPanel();



jb2=new JButton("添加");

jb2.addActionListener(this);

jb3=new JButton("修改");

jb4=new JButton("请输入名字");



//把各个按钮加入到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.setSize(400,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



}



@Override

public void actionPerformed(ActionEvent e) {

//判断是哪个按钮被点击

if(e.getSource()==jb1)

{

System.out.println("用户想查询!");

//...

//查询数据库,更新JTable,这样大量的代码重复,解决办法:

//把对表操作封装成一个类,可以完成对表的操作

//把对表的数据装到StuModel中,就可以比较简单的完成查询

String name=this.jtf.getText().trim();

//写一个sql语句

String sql="select * from stu where stuname='"+name+"'";

//构建新的数据模型类,并更新

StuModel sm=new StuModel(sql);

//更新JTable

jt.setModel(sm);

}

//当用户点击添加

else if(e.getSource()==jb2)

{

StuAddDialog sa=new StuAddDialog(this,"添加学生",true);



//重新再获得新的数据模型

}

}

}





min版学生管理系统1.0_Class19/ com.test1/ 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.beans.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;



public class StuAddDialog extends JDialog implements ActionListener{

//定义需要的控件

JLabel jl1,jl2,jl3,jl4,jl5;

JButton jb1,jb2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5;

JPanel jp1,jp2,jp3;



//owner它的父窗口

//title窗口名

//modal指定模式窗口,还是非模式窗口

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("记过次数");



jtf1=new JTextField();

jtf2=new JTextField();

jtf3=new JTextField();

jtf4=new JTextField();

jtf5=new JTextField();



jb1=new JButton("添加");

jb2=new JButton("取消");



jp1=new JPanel();

jp2=new JPanel();

jp3=new JPanel();



//设置布局

jp1.setLayout(new GridLayout(5,1));

jp2.setLayout(new GridLayout(5,1));



//添加组件

jp1.add(jl1);

jp1.add(jl2);

jp1.add(jl3);

jp1.add(jl4);

jp1.add(jl5);



jp2.add(jtf1);

jp2.add(jtf2);

jp2.add(jtf3);

jp2.add(jtf4);

jp2.add(jtf5);



jp3.add(jb1);

jp3.add(jb2);



this.add(jp1,BorderLayout.WEST);

this.add(jp2,BorderLayout.CENTER);

this.add(jp3,BorderLayout.SOUTH);



jb1.addActionListener(this);



//展现对话框

this.setSize(300,200);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}



@Override

public void actionPerformed(ActionEvent e) {

//连接数据库

Connection conn=null;

//Statement stmt=null;

ResultSet rs=null;

PreparedStatement pstmt=null;

//连接数据库,判断用户是否合法

try {

//1.加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//2.创建连接对象

String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros";

//2..注册驱动程序

conn=DriverManager.getConnection(url,"sa","luowei");

//3.获取语句对象

//stmt=conn.createStatement();



//编译的语句对象

String strsql="insert into student values(?,?,?,?,?)";

pstmt=conn.prepareStatement(strsql);



//给参数赋值

pstmt.setString(1,jtf1.getText());

pstmt.setString(2,jtf2.getText());

pstmt.setString(3, jtf3.getText());

pstmt.setString(4, jtf4.getText());

pstmt.setString(5, jtf5.getText());



//4.执行操作

pstmt.executeUpdate();



this.dispose(); //关闭对话框

} catch (Exception e2) {

e2.printStackTrace();

}finally{

//5释放语句对象,连接对象

try {

if(rs!=null) rs.close();

if(pstmt!=null) pstmt.close();

if(conn!=null) conn.close();

} catch (Exception e3) {

e3.printStackTrace();

}

}

}

}





min版学生管理系统1.0_Class19/ com.test1/ StuModel.java

/*

* 这是一个stu表的模型

* 可以把对stu表的各种操作封装到该模型中

*/



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{



//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.jdbc.sqlserver.SQLServerDriver");

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros","sa","luowei");

ps=ct.prepareStatement(sql);

rs=ps.executeQuery();



while(rs.next())

{

//rowData可以存放多行

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 e) {

e.printStackTrace();

}

}

}



public void addStu(String sql)

{

//根据用户输入的sql语句,完成添加...

}



//通过传递的sqL语句来获得数据模型

public StuModel(String sql)

{

this.init(sql);

}



//做一个构造函数,用于初始化我们的数据模型

public StuModel()

{

this.init("");

}



@Override //得到共有多少列

public int getColumnCount() {

//System.out.println("getColumncount");

return this.columnNames.size();

}



@Override //得到共有多少行

public int getRowCount() {

//

return this.rowData.size();

}



@Override //得到某行某列的数据

public Object getValueAt(int rowIndex, int columnIndex) {

//return null;

return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);

}



@Override

public String getColumnName(int column) {

// 重写这个方法,修改默认的列名

return (String)this.columnNames.get(column);

}

}


[color=red][size=x-large]min版学生管理系统2.0_Class20/ com.test1/ StuManage.java [/size][/color]
[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832559998.png[/img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832561295.png[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832568754.png[/img]

/*

* 完成一个min版本的学生管理系统

* 1.查询任务

* 2.添加一个学生

*/



package com.test1;

import java.awt.*;

import java.awt.event.*;

import java.util.*;



import javax.swing.*;



import com.test1.StuModel;



import java.sql.*;



public class StuManage 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) {

StuManage test3=new StuManage();



}



//构造函数

public StuManage()

{

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);



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);



//中间



//创建一个数据模型对象

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.setSize(400,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



}



@Override

public void actionPerformed(ActionEvent e) {

//判断是哪个按钮被点击

if(e.getSource()==jb1)

{

//对用户点击添加按钮的响应动作

System.out.println("用户想查询!");

//...

//查询数据库,更新JTable,这样大量的代码重复,解决办法:

//把对表操作封装成一个类,可以完成对表的操作

//把对表的数据装到StuModel中,就可以比较简单的完成查询

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);

}

else if(e.getSource()==jb3)

{

//用户希望修改

int rowNum=this.jt.getSelectedRow();

if(rowNum==-1)

{

//提示

JOptionPane.showMessageDialog(this, "请选择一行");

return ;

}

//显示修改对话框

new StuUpdateDialog(this,"修改学生",true,sm,rowNum);



//重新再获得新的数据模型

sm=new StuModel();

//更新JTable

jt.setModel(sm);

}



else if(e.getSource()==jb4)

{

//说明用户希望删除记录

//1.得到该学生的id

int rowNum=this.jt.getSelectedRow();//返回用户点中的行,如果没有选返返-1

if(rowNum==-1)

{

//提示

JOptionPane.showMessageDialog(this,"请选择一行");

return ;

}

//得到学生编号

String stuId=(String)sm.getValueAt(rowNum, 0);

//System.out.println("id="+stuId);

//连接数据库,完成删除任务

try {

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangshanHeros","sa","luowei");

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);

}

}

}



min版学生管理系统2.0_Class20/ com.test1/ 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.beans.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;



public class StuAddDialog extends JDialog implements ActionListener{

//定义需要的控件

JLabel jl1,jl2,jl3,jl4,jl5,jl6;

JButton jb1,jb2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

JPanel jp1,jp2,jp3;



//owner它的父窗口

//title窗口名

//modal指定模式窗口,还是非模式窗口

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);





//展现对话框

this.setSize(300,250);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("添加学生");

this.setVisible(true);

}



@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jb1)

{

//连接数据库

Connection conn=null;

//Statement stmt=null;

ResultSet rs=null;

PreparedStatement pstmt=null;

//连接数据库,判断用户是否合法

try {

//1.加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//2.创建连接对象

String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros";

//2..注册驱动程序

conn=DriverManager.getConnection(url,"sa","luowei");

//3.获取语句对象

//stmt=conn.createStatement();



//预编译的语句对象

String strsql="insert into stu values(?,?,?,?,?,?)";

pstmt=conn.prepareStatement(strsql);



//给参数赋值

pstmt.setString(1,jtf1.getText());

pstmt.setString(2,jtf2.getText());

pstmt.setString(3,jtf3.getText());

pstmt.setString(4,jtf4.getText());

pstmt.setString(5,jtf5.getText());

pstmt.setString(6,jtf6.getText());



//4.执行操作

pstmt.executeUpdate();



this.dispose(); //关闭对话框

} catch (Exception e2) {

e2.printStackTrace();

}finally{

//5释放语句对象,连接对象

try {

if(rs!=null) rs.close();

if(pstmt!=null) pstmt.close();

if(conn!=null) conn.close();

} catch (Exception e3) {

e3.printStackTrace();

}

}

}

}

}



min版学生管理系统2.0_Class20/ com.test1/ StuUpdateDialog.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.beans.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;



public class StuUpdateDialog extends JDialog implements ActionListener{

//定义需要的控件

JLabel jl1,jl2,jl3,jl4,jl5,jl6;

JButton jb1,jb2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

JPanel jp1,jp2,jp3;



//owner它的父窗口

//title窗口名

//modal指定模式窗口,还是非模式窗口

public StuUpdateDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNums)

{

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();

//初始化数据

jtf1.setText((String)sm.getValueAt(rowNums, 0));

//让jtf1,不能修改

jtf1.setEditable(false);

jtf2=new JTextField();

jtf2.setText((String)sm.getValueAt(rowNums, 1));

jtf3=new JTextField();

jtf3.setText((String)sm.getValueAt(rowNums, 2));

jtf4=new JTextField();

jtf4.setText(sm.getValueAt(rowNums, 3).toString());

jtf5=new JTextField();

jtf5.setText((String)sm.getValueAt(rowNums, 4));

jtf6=new JTextField();

jtf6.setText((String)sm.getValueAt(rowNums, 5));



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);





//展现对话框

this.setSize(300,250);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("修改学生");

this.setVisible(true);

}



@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jb1)

{

//连接数据库

Connection conn=null;

//Statement stmt=null;

ResultSet rs=null;

PreparedStatement pstmt=null;

//连接数据库,判断用户是否合法

try {

//1.加载驱动

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

//2.创建连接对象

String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros";

//2..注册驱动程序

conn=DriverManager.getConnection(url,"sa","luowei");

//3.获取语句对象

//stmt=conn.createStatement();



//预编译的语句对象

String strsql="update stu set stuName=?,stuSex=?," +

"stuAge=?,stuJg=?,stuDept=? where stuId=?";



pstmt=conn.prepareStatement(strsql);





//给参数赋值

pstmt.setString(1,jtf2.getText());

pstmt.setString(2,jtf3.getText());

pstmt.setString(3,jtf4.getText());

pstmt.setString(4,jtf5.getText());

pstmt.setString(5,jtf6.getText());

pstmt.setString(6,jtf1.getText());



//4.执行操作

pstmt.executeUpdate();



this.dispose(); //关闭对话框

} catch (Exception e2) {

e2.printStackTrace();

}finally{

//5释放语句对象,连接对象

try {

if(rs!=null) rs.close();

if(pstmt!=null) pstmt.close();

if(conn!=null) conn.close();

} catch (Exception e3)

{

e3.printStackTrace();

}

}

}

}

}



min版学生管理系统2.0_Class20/ com.test1/ StuModel.java



/*

* 这是一个stu表的模型

* 可以把对stu表的各种操作封装到该模型中

*/



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{



//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.jdbc.sqlserver.SQLServerDriver");

ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;" +

"databaseName=LiangShanHeros","sa","luowei");

ps=ct.prepareStatement(sql);

rs=ps.executeQuery();



while(rs.next())

{

//rowData可以存放多行

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 e) {

e.printStackTrace();

}

}

}



public void addStu(String sql)

{

//根据用户输入的sql语句,完成添加...

}



//通过传递的sqL语句来获得数据模型

public StuModel(String sql)

{

this.init(sql);

}



//做一个构造函数,用于初始化我们的数据模型

public StuModel()

{

this.init("");

}



@Override //得到共有多少列

public int getColumnCount() {

//System.out.println("getColumncount");

return this.columnNames.size();

}



@Override //得到共有多少行

public int getRowCount() {

//

return this.rowData.size();

}



@Override //得到某行某列的数据

public Object getValueAt(int rowIndex, int columnIndex) {

//return null;

return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);

}



@Override

public String getColumnName(int column) {

// 重写这个方法,修改默认的列名

return (String)this.columnNames.get(column);

}

}


[color=red][size=x-large]min版学生管理系统3.0_Class20/ com.test2/ StuManage.java [/size][/color]
[img]http://images.cnblogs.com/cnblogs_com/luowei010101/201108/201108141832593157.png[/img]
/* 

* 完成一个min版本的学生管理系统model2

* 1.查询任务

* 2.添加一个学生

*/



package com.test2;

import java.awt.*;

import java.awt.event.*;

import java.util.*;



import javax.swing.*;



import java.sql.*;



public class StuManage extends JFrame implements ActionListener{



//定义一些控件

JPanel jp1,jp2;

JLabel jl1;

JButton jb1,jb2,jb3,jb4;

JTable jt;

JScrollPane jsp;

JTextField jtf;

StuModel sm;









public static void main(String[] args) {

StuManage test3=new StuManage();



}



//构造函数

public StuManage()

{

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);



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);



//中间



//创建一个数据模型对象

sm=new StuModel();

String []paras={"1"};

sm.queryStu("select * from stu where 1=?", paras);



//初始化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.setSize(400,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



}



@Override

public void actionPerformed(ActionEvent e) {

//判断是哪个按钮被点击

if(e.getSource()==jb1)

{

//对用户点击添加按钮的响应动作

System.out.println("用户想查询!");

//...

//查询数据库,更新JTable,这样大量的代码重复,解决办法:

//把对表操作封装成一个类,可以完成对表的操作

//把对表的数据装到StuModel中,就可以比较简单的完成查询

String name=this.jtf.getText().trim();

//写一个sql语句

String sql="select * from stu where stuName=?";

String paras[]={name};

//构建新的数据模型类,并更新

sm=new StuModel();



sm.queryStu(sql, paras);

//更新JTable

jt.setModel(sm);

}

//当用户点击添加

else if(e.getSource()==jb2)

{

StuAddDialog sa=new StuAddDialog(this,"添加学生",true);



//重新再获得新的数据模型

sm=new StuModel();

String []paras2={"1"};

sm.queryStu("select * from stu where 1=?", paras2);

//更新JTable

jt.setModel(sm);

}

else if(e.getSource()==jb3)

{

//用户希望修改

int rowNum=this.jt.getSelectedRow();

if(rowNum==-1)

{

//提示

JOptionPane.showMessageDialog(this, "请选择一行");

return ;

}

//显示修改对话框

new StuUpdateDialog(this,"修改学生",true,sm,rowNum);



//重新再获得新的数据模型

sm=new StuModel();

//更新JTable

String []paras2={"1"};

sm.queryStu("select * from stu where 1=?", paras2);

jt.setModel(sm);

}



else if(e.getSource()==jb4)

{

//说明用户希望删除记录

//1.得到该学生的id

int rowNum=this.jt.getSelectedRow();//返回用户点中的行,如果没有选返返-1

if(rowNum==-1)

{

//提示

JOptionPane.showMessageDialog(this,"请选择一行");

return ;

}

//得到学生编号

String stuId=(String)sm.getValueAt(rowNum, 0);

//System.out.println("id="+stuId);



//创建一个sql语句

String sql="delete from stu where stuId=?";

String []paras={stuId};

StuModel temp=new StuModel();

temp.updStu(sql,paras);



//更新数据模型

sm=new StuModel();

String []paras2={"1"};

sm.queryStu("select * from stu where 1=?", paras2);

//更新JTable

jt.setModel(sm);

}

}

}



min版学生管理系统3.0_Class20/ com.test2/ StuAddDialog.java



package com.test2;



import java.awt.BorderLayout;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.beans.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;



public class StuAddDialog extends JDialog implements ActionListener{

//定义需要的控件

JLabel jl1,jl2,jl3,jl4,jl5,jl6;

JButton jb1,jb2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

JPanel jp1,jp2,jp3;



//owner它的父窗口

//title窗口名

//modal指定模式窗口,还是非模式窗口

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);





//展现对话框

this.setSize(300,250);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("添加学生");

this.setVisible(true);

}



@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jb1)

{

//希望添加学生

StuModel temp=new StuModel();

String sql="insert into stu values(?,?,?,?,?,?)";

String []paras={jtf1.getText(),jtf2.getText(),

jtf3.getText(),jtf4.getText(),

jtf5.getText(),jtf6.getText()};

if(!temp.updStu(sql, paras))

{

//提示

JOptionPane.showMessageDialog(this,"添加失败");

}

//关闭对话框

this.dispose();

}

}

}



min版学生管理系统3.0_Class20/ com.test2/ StuUpdateDialog.java



/*

* 修改学生

*/



package com.test2;



import java.awt.BorderLayout;

import java.awt.Frame;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.beans.Statement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;





public class StuUpdateDialog extends JDialog implements ActionListener{

//定义需要的控件

JLabel jl1,jl2,jl3,jl4,jl5,jl6;

JButton jb1,jb2;

JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

JPanel jp1,jp2,jp3;



//owner它的父窗口

//title窗口名

//modal指定模式窗口,还是非模式窗口

public StuUpdateDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNums)

{

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();

//初始化数据

jtf1.setText((String)sm.getValueAt(rowNums, 0));

//让jtf1,不能修改

jtf1.setEditable(false);

jtf2=new JTextField();

jtf2.setText((String)sm.getValueAt(rowNums, 1));

jtf3=new JTextField();

jtf3.setText((String)sm.getValueAt(rowNums, 2));

jtf4=new JTextField();

jtf4.setText(sm.getValueAt(rowNums, 3).toString());

jtf5=new JTextField();

jtf5.setText((String)sm.getValueAt(rowNums, 4));

jtf6=new JTextField();

jtf6.setText((String)sm.getValueAt(rowNums, 5));



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);





//展现对话框

this.setSize(300,250);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("修改学生");

this.setVisible(true);

}



@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jb1)

{

//做一个sql

//预编译的语句对象

String sql="update stu set stuName=?,stuSex=?," +

"stuAge=?,stuJg=?,stuDept=? where stuId=?";

String []paras={jtf2.getText(),jtf3.getText(),

jtf4.getText(),jtf5.getText(),

jtf6.getText(),jtf1.getText()};

StuModel temp=new StuModel();

temp.updStu(sql, paras);

this.dispose(); //关闭对话框



}

}

}



min版学生管理系统3.0_Class20/ com.test2/ StuModel.java



/*

* 这是一个stu表的模型

* 可以把对stu表的各种操作封装到该模型中

*/



package com.test2;

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{



//rowData用来存放行数据

//columnNames存放列名

Vector rowData,columnNames;





//初始化连接数据库,查询,查询的本质就是初始化

public void queryStu(String sql,String []paras)

{

SqlHelper sqlHelper=null;

//中间

columnNames=new Vector();

//设置列名

columnNames.add("学号");

columnNames.add("名字");

columnNames.add("性别");

columnNames.add("年龄");

columnNames.add("籍贯");

columnNames.add("系别");



rowData=new Vector();

try {

sqlHelper=new SqlHelper();

ResultSet rs=sqlHelper.queryExectue(sql, paras);



while(rs.next())

{

//rowData可以存放多行

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

{

//关闭资源

sqlHelper.close();

}

}



//更新学生,添加学生(增、删、改)

@SuppressWarnings("finally")

public boolean updStu(String sql,String []paras)//通过函数传入参数解决

{

//根据用户输入的sql语句,完成添加...

//创建SqlHelper(如果程序并发性不考虑,可以把SqlHelper做成static)

SqlHelper sqlHelper=new SqlHelper();

return sqlHelper.updExecute(sql, paras);

}



//做一个构造函数,用于初始化我们的数据模型

public StuModel()

{



}



@Override //得到共有多少列

public int getColumnCount() {

//System.out.println("getColumncount");

return this.columnNames.size();

}



@Override //得到共有多少行

public int getRowCount() {

//

return this.rowData.size();

}



@Override //得到某行某列的数据

public Object getValueAt(int rowIndex, int columnIndex) {

//return null;

return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);

}



@Override

public String getColumnName(int column) {

// 重写这个方法,修改默认的列名

return (String)this.columnNames.get(column);

}

}



min版学生管理系统3.0_Class20/ com.test2/ SqlHelper.java



/*

* 这是一个对数据库进行操作的类(SqlHelper)

*/



package com.test2;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;



public class SqlHelper {



//定义操作数据库需要的东西

PreparedStatement ps=null;

Connection ct=null;

ResultSet rs=null;

String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=LiangshanHeros";

String user="sa";

String passwd="luowei";

String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";



//关闭数据库资源

public void close()

{

//关闭资源

try {

if(rs!=null) rs.close();

if(ps!=null) ps.close();

if(ct!=null) ct.close();



} catch (final Exception e) {

e.printStackTrace();

}

}

//写一个不需要注入的方法

public ResultSet queryExectue(String sql)

{

try {

//1.加载驱动

Class.forName(driver);

//2.得到连接

ct=DriverManager.getConnection(url,user,passwd);

//3.创建ps

ps=ct.prepareStatement(sql);



rs=ps.executeQuery();

} catch (Exception e) {

e.printStackTrace();

}finally

{

//关闭资源,???

}

return rs;

}



//查询数据库操作

public ResultSet queryExectue(String sql,String []paras)

{

try {

//1.加载驱动

Class.forName(driver);

//2.得到连接

ct=DriverManager.getConnection(url,user,passwd);

//3.创建ps

ps=ct.prepareStatement(sql);

//给ps的问号赋值

for(int i=0;i<paras.length;i++)

{

ps.setString(i+1, paras[i]);

}

rs=ps.executeQuery();

} catch (Exception e) {

e.printStackTrace();

}finally

{

//关闭资源,???

}

return rs;

}



//把增、删、改合到一起

public boolean updExecute(String sql,String []paras)

{

boolean b=true;

try {

//1.加载驱动

Class.forName(driver);

//2.得到连接

ct=DriverManager.getConnection(url,user,passwd);

//3.创建ps

ps=ct.prepareStatement(sql);

//给ps的问号赋值

for(int i=0;i<paras.length;i++)

{

ps.setString(i+1, paras[i]);

}

//4.执行操作

if(ps.executeUpdate()!=1)

{

b=false;

}

} catch (Exception e) {

b=false;

e.printStackTrace();

}finally

{

this.close();

}

return b;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: import java.sql.*; public class StudentManager { public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { // 注册 JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student_db", "root", "123456"); // 执行查询 System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, age FROM student"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()) { // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // 输出数据 System.out.print("ID: " + id); System.out.print(", 姓名: " + name); System.out.print(", 年龄: " + age); System.out.print("\n"); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } finally { // 关闭资源 try { if(stmt!=null) stmt.close(); } catch(SQLException se2) { } try { if(conn!=null) conn.close(); } catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } } ### 回答2: Java学生管理系统是一个基于Swing和MySQL JDBC的应用程序,用于管理学生的信息和成绩。以下是一个简单的代码示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; public class StudentManagementSystem extends JFrame { private JLabel nameLabel, ageLabel, gradeLabel; private JTextField nameField, ageField, gradeField; private JButton addButton, updateButton, deleteButton; private JTable table; private DefaultTableModel tableModel; private Connection connection; private Statement statement; public StudentManagementSystem() { super("学生管理系统"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); // 初始化界面组件 nameLabel = new JLabel("姓名:"); nameField = new JTextField(10); ageLabel = new JLabel("年龄:"); ageField = new JTextField(10); gradeLabel = new JLabel("分数:"); gradeField = new JTextField(10); addButton = new JButton("添加"); updateButton = new JButton("更新"); deleteButton = new JButton("删除"); // 创建表格 table = new JTable(); tableModel = new DefaultTableModel(); tableModel.addColumn("姓名"); tableModel.addColumn("年龄"); tableModel.addColumn("分数"); table.setModel(tableModel); // 添加组件到窗口 add(nameLabel); add(nameField); add(ageLabel); add(ageField); add(gradeLabel); add(gradeField); add(addButton); add(updateButton); add(deleteButton); add(new JScrollPane(table)); // 连接数据库 try { connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); statement = connection.createStatement(); } catch (SQLException e) { e.printStackTrace(); } // 添加按钮点击事件 addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = nameField.getText(); int age = Integer.parseInt(ageField.getText()); int grade = Integer.parseInt(gradeField.getText()); try { statement.executeUpdate("INSERT INTO students (name, age, grade) VALUES ('" + name + "', " + age + ", " + grade + ")"); tableModel.addRow(new Object[]{name, age, grade}); } catch (SQLException ex) { ex.printStackTrace(); } } }); // 设置窗口属性 pack(); setVisible(true); } public static void main(String[] args) { new StudentManagementSystem(); } } ``` 上述代码实现了一个简单的学生管理系统,能够连接到MySQL数据库,并且可以添加学生的信息。你可以根据实际需要进行扩展和修改。请确保你的MySQL数据库已经安装和配置好,并将代码中的连接信息("jdbc:mysql://localhost:3306/test","root","password")替换成你实际的数据库连接信息。 ### 回答3: 下面是一个基于Swing、MYSQL JDBCJava学生管理系统的代码示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; public class StudentManagementSystem extends JFrame { private JLabel nameLabel, ageLabel, gradeLabel, resultLabel; private JTextField nameField, ageField, gradeField; private JButton addButton, viewButton; private static final String DB_URL = "jdbc:mysql://localhost:3306/studentdb"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; public StudentManagementSystem() { initUI(); initListeners(); } private void initUI() { nameLabel = new JLabel("Name:"); ageLabel = new JLabel("Age:"); gradeLabel = new JLabel("Grade:"); resultLabel = new JLabel(""); nameField = new JTextField(20); ageField = new JTextField(20); gradeField = new JTextField(20); addButton = new JButton("Add Student"); viewButton = new JButton("View Students"); JPanel panel = new JPanel(new GridLayout(4, 2)); panel.add(nameLabel); panel.add(nameField); panel.add(ageLabel); panel.add(ageField); panel.add(gradeLabel); panel.add(gradeField); panel.add(addButton); panel.add(viewButton); panel.add(resultLabel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Student Management System"); setSize(400, 200); setLocationRelativeTo(null); add(panel); } private void initListeners() { addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = nameField.getText(); int age = Integer.parseInt(ageField.getText()); double grade = Double.parseDouble(gradeField.getText()); addStudent(name, age, grade); } }); viewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { viewStudents(); } }); } private void addStudent(String name, int age, double grade) { try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) { String query = "INSERT INTO student (name, age, grade) VALUES (?, ?, ?)"; PreparedStatement statement = conn.prepareStatement(query); statement.setString(1, name); statement.setInt(2, age); statement.setDouble(3, grade); int rowsInserted = statement.executeUpdate(); if (rowsInserted > 0) { resultLabel.setText("Student added successfully."); } else { resultLabel.setText("Failed to add student."); } } catch (SQLException ex) { ex.printStackTrace(); } } private void viewStudents() { try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) { Statement statement = conn.createStatement(); String query = "SELECT * FROM student"; ResultSet resultSet = statement.executeQuery(query); StringBuilder sb = new StringBuilder(); while (resultSet.next()) { String name = resultSet.getString("name"); int age = resultSet.getInt("age"); double grade = resultSet.getDouble("grade"); sb.append("Name: ").append(name).append(", Age: ").append(age).append(", Grade: ").append(grade).append("\n"); } resultLabel.setText(sb.toString()); } catch (SQLException ex) { ex.printStackTrace(); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new StudentManagementSystem().setVisible(true); } }); } } ``` 这个学生管理系统界面上有三个文本字段(姓名、年龄、年级)、两个按钮(添加学生、查看学生)和一个结果标签。当点击"Add Student"按钮时,程序将会将文本字段中的学生信息添加到MYSQL数据库中的"student"表中。当点击"View Students"按钮时,程序将会从数据库中获取所有学生信息并将其显示在结果标签中。 请注意,这只是一个简单的示例代码,实际的学生管理系统可能会更复杂,并且需要更多的错误处理和验证。此外,为了使该示例能够运行,你需要将DB_URL、DB_USER和DB_PASSWORD更改为你的mysql数据库的相应信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值