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
{

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
{

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;

}

}

你可能感兴趣的:(Java,java,数据库)