pst.setObject(i+1,params[i]);//往通道里放数据,占位符下标从1开始。
}
}
return pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
//查询结果集。比增删改要复杂一些,慢慢看。
//这里的IMapper是将所有可能的用到的类都放进去,方便以后继承使用。(现在我们写的是Student信息,以后可能会有Teacher信息,Class信息等等)
//用接口是因为接口多继承,方便维护升级
public List executeQuery(String sql,IMapper mapper,Object []params){
Connection conn=null;
PreparedStatement pst=null;
ResultSet rst=null;//查询结果集
List list=new ArrayList();//用一个集合存放Student信息
try {
conn=getConnection();
pst=conn.prepareStatement(sql);
if(params != null){
for(int i=0;i
e.printStackTrace();
}
DRIVER=pro.getProperty("DRIVER");
URL=pro.getProperty("URL");
USER=pro.getProperty("USER");
PASSWORD=pro.getProperty("PASSWORD");
}
public static Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName(DRIVER);//找驱动
return DriverManager.getConnection(URL, USER, PASSWORD);//建连接
}
}
(2)com.student.vo包。这里面有一个vo类,我们是要把数据库里的数据放到java里展示,用一个类对象把数据库里的信息一一对应
起来就可以很容易的操作。数据库里的一个列对应类对象的一个属性。
package com.student.vo;
public class Student {
private String stuid;
private String name;
private String age;
private String sex;
public String getStuid(){
return stuid;
}
public void setStuid(String stuid){
this.stuid=stuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Student(String stuid,String name,String sex,String age){
super();
this.stuid=stuid;
this.name=name;
this.age=age;
this.sex=sex;
}
public Student(){
super();
}
}
(3)com.student.mapper包。这里面一个接口,一个实现类。
接口:
package com.student.mapper;
import java.sql.ResultSet;
import java.util.List;
public interface IMapper {
List map(ResultSet rst);//声明一个方法存着结果集。
}
实现类:
package com.student.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.student.vo.Student;
public class StuMapper implements IMapper {//实现接口方法
public List map(ResultSet rst) {
List list=new ArrayList();//建一个集合,里面是Student类里的信息。
try {
while(rst.next()){//
Student stu=new Student();
stu.setStuid(rst.getString("STUID"));//类对象每一个属性对应数据库的每一列。
stu.setName(rst.getString("STUNAME"));
stu.setAge(rst.getString("AGE"));
stu.setSex(rst.getString("SEX"));
list.add(stu);//把类对象放到集合里
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
(4)com.student.dao包:这里面的StuDAO类放着增删改查分页等功能
package com.student.dao;
import java.util.List;
import com.student.db.DBManager;
import com.student.mapper.IMapper;
import com.student.mapper.StuMapper;
import com.student.vo.Student;
public class StuDAO {
public List check(){//查看
String sql="select * from STUDENT";//sql语句
DBManager db=new DBManager();
IMapper mapper=new StuMapper();//实现StuMapper
List list=db.executeQuery(sql, mapper,null);//null是指占位符为null,因为查看的是所有信息
return list;
}
public boolean add(Student stu){//添加
String sql="insert into STUDENT values(?,?,?,?)";
Object[] params={stu.getStuid(),stu.getName(),stu.getAge(),stu.getSex()};
DBManager db=new DBManager();
int i=db.executeUpdate(sql, params);
if(i>=0){
System.out.println("成功");
}else{
System.out.println("失败");
}
return true;
}
public boolean update(Student stu){//修改
String sql="update STUDENT set stuname=?,age=?,sex=? where stuid=?";
Object params[]={stu.getName(),stu.getAge(),stu.getSex(),stu.getStuid()};
DBManager db=new DBManager();
int i=db.executeUpdate(sql, params);
if(i>=0){
System.out.println("成功");
}else{
System.out.println("失败");
}
return true;
}
public boolean delete(Student stu){//删除
String sql="delete from STUDENT where stuid=?";
Object params[]={stu.getStuid()};
DBManager db=new DBManager();
int i=db.executeUpdate(sql, params);
if(i>=0){
System.out.println("成功");
}else{
System.out.println("失败");
}
return true;
}
public List findPage(int pagesize,int pagenow){//分页
String sql="select * from (select rownum rn ,stu .* from stu) "
+ "where rownum<=? and rn>?";//分页公式
Object []params={pagesize,(pagenow-1)*pagesize};
DBManager db=new DBManager();
IMapper mapper=new StuMapper();
return db.executeQuery(sql, mapper, params);
}
public int findcount(){
String sql="select count(*) from stu";
DBManager db=new DBManager();
return db.count(sql);
}
}
当把这一块写完之后,其实大部分就已经完成了,JDBC连接数据库基本上是固定的,多写几遍就明白了。
三、展示Student信息,实现增删改查。看图:
三、展示
信息,实现增删改查。看图:
(1)com.student.show包,展示界面:这里面内容比较多,但是都很容易理解
package com.student.show;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import com.student.add.Add;
import com.student.check.Check;
import com.student.dao.StuDAO;
import com.student.delete.Delete;
import com.student.update.Update;
import com.student.vo.Student;
public class Show extends JFrame {
public static int pagesize=5;//每页显示5条信息
public static int pagenow=1;//当前页为第一页
public Show() {
setSize(500, 430);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);//点X号就是关闭
setResizable(false);//不可改变窗口大小
setLocationRelativeTo(null);//默认居中显示
setLayout(null);//采用坐标布局
StuDAO dao = new StuDAO();//前面我们已经把增删改查分页写到StuDAO里面,现在就直接拿出来用
List list =dao.findPage(pagesize, pagenow);
Student stu = new Student();
for (int i = 0; i < list.size(); i++) {
stu = list.get(i);
}
String[] rowName = { "学号", "姓名", "年龄", "性别" };//从这里开始是二维数组的遍历使用
Object[][] data = new Object[list.size()][4];
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
Object st[] = { s.getStuid(), s.getName(), s.getAge(), s.getSex() };
data[i] = st;
}
final JTable table = new JTable(data,rowName);
JScrollPane JSP=new JScrollPane(table);//这一步不能省去,否则显示不出列名
JSP.setBounds(20, 10, 400, 200);
add(JSP);
JButton jb11=new JButton("首页");
jb11.setBounds(40,220,80,30);
add(jb11);
JButton jb22=new JButton("上一页");
jb22.setBounds(130,220,80,30);
add(jb22);
JButton jb33=new JButton("下一页");
jb33.setBounds(220,220,80,30);
add(jb33);
JButton jb44=new JButton("尾页");
jb44.setBounds(310,220,80,30);
add(jb44);
JButton jb1 = new JButton("查看信息");
jb1.setBounds(50, 270, 100, 30);
add(jb1);
JButton jb2 = new JButton("修改信息");
jb2.setBounds(280, 270, 100, 30);
add(jb2);
JButton jb3 = new JButton("添加信息");
jb3.setBounds(50, 320, 100, 30);
add(jb3);
JButton jb4 = new JButton("删除信息");
jb4.setBounds(280, 320, 100, 30);
add(jb4);
JButton jb5 = new JButton("退出");
jb5.setBounds(280, 360, 100, 30);
add(jb5);
jb1.addActionListener(new ActionListener() {//查看
public void actionPerformed(ActionEvent event) {
int row = table.getSelectedRow();//选中第几行
int index = 0;
if(row==-1){
JOptionPane.showMessageDialog(null,"您没有选中信息");
return;
}
String id = (String) table.getValueAt(row, index);// 跟Check联系起来
Check check=new Check(id);
check.setVisible(true);
setVisible(false);
}
});
jb2.addActionListener(new ActionListener() {//修改
public void actionPerformed(ActionEvent event) {
int row = table.getSelectedRow();
int index = 0;
if(row==-1){
JOptionPane.showMessageDialog(null,"您没有选中信息");
return;
}
String id = (String) table.getValueAt(row, index);// 跟Update联系起来
Update up=new Update(id);
up.setVisible(true);
setVisible(false);
}
});
jb3.addActionListener(new ActionListener() {//添加
public void actionPerformed(ActionEvent event) {
Add add = new Add();
add.setVisible(true);
setVisible(false);
}
});
jb4.addActionListener(new ActionListener() {//删除
public void actionPerformed(ActionEvent event) {
int row = table.getSelectedRow();
int index = 0;
if(row==-1){
JOptionPane.showMessageDialog(null,"您没有选中信息");
return;
}
String num=(String) table.getValueAt(row, index);
Delete d=new Delete(num);
d.setVisible(true);
setVisible(false);
}
});
jb11.addActionListener(new ActionListener() {//首页
public void actionPerformed(ActionEvent event) {
pagenow=1;
Show show=new Show();
setVisible(false);
show.setVisible(true);
}
});
jb22.addActionListener(new ActionListener() {//上一页
public void actionPerformed(ActionEvent event) {
if(pagenow != 1){
pagenow=pagenow-1;
}else{
return;
}
Show show=new Show();
setVisible(false);
show.setVisible(true);
}
});
jb33.addActionListener(new ActionListener() {//下一页
public void actionPerformed(ActionEvent event) {
StuDAO dao=new StuDAO();
int count=dao.findcount();
int pageCount=(count-1)/pagesize+1;//pageCount表示最后一页
if(pagenow != pageCount){
pagenow=pagenow+1;
}else{
return;
}
Show show=new Show();
setVisible(false);
show.setVisible(true);
}
});
jb44.addActionListener(new ActionListener() {//尾页
public void actionPerformed(ActionEvent event) {
StuDAO dao=new StuDAO();
int count=dao.findcount();
int pageCount=(count-1)/pagesize+1;
pagenow=pageCount;
Show show=new Show();
setVisible(false);
show.setVisible(true);
}
});
}
public static void main(String args[]) {
Show s = new Show();
}