今天练习来到了读者信息管理模块,这里是代码有点多了,明天最好可以完成。
开始都是一样的,练习jdbc连接数据库的创建。今天是熟练了好多。
package 读者信息管理;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static String driverName="com.mysql.jdbc.Driver";
private static String URL="jdbc:mysql://localhost:3306/amis";
private static String name="root";
private static String password="y888888";
public static Connection getConncetion() {
Connection conn=null;
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn=DriverManager.getConnection(URL, name, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeCon(Connection con) {
if (con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeSm(Statement sm) {
if (sm!=null){
try {
sm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeRs(ResultSet rs) {
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这里为什么都是static呢?不论定义四个属性还是函数功能,都是static。
1、JDBC中的应用
熟悉JDBC的读者应该知道,java中有一个DriverManager类,用于管理各种数据库驱动程序、建立新的数据库连接。DriverManager类包含一些列Drivers类,这些Drivers类必须通过调用DriverManager的registerDriver()方法来对自己进行注册,那么注册是什么时候发生的呢?下面会给出答案:
所有Drivers类都必须包含有一个静态方法,利用这个静态方法可以创建该类的实例,然后在加载该实例时向DriverManage类进行注册。我们经常用Class.forName()对驱动程序进行加载,那么注册就发生在这条语句的执行过程中,前面说的Drivers的静态方法是放在static{}中的,当对驱动程序进行加载的时候,会执行该static{},便完成了注册
摘自http://blog.csdn.net/newjerryj/article/details/8650268
下来对象类的定义如今有了eclipse里面的技巧,很easy就可以创建好。
package 读者信息管理;
public class Readers {
private String reader_id;
private String reader_name;
private String reader_sex;
private String reader_special;
private String reader_class;
private String reader_tel;
private String reader_begin;
private boolean reader_state;
private int dept_id;
private int reader_typeid;
public String getReader_id() {
return reader_id;
}
public void setReader_id(String reader_id) {
this.reader_id = reader_id;
}
public String getReader_name() {
return reader_name;
}
public void setReader_name(String reader_name) {
this.reader_name = reader_name;
}
public String getReader_sex() {
return reader_sex;
}
public void setReader_sex(String reader_sex) {
this.reader_sex = reader_sex;
}
public String getReader_special() {
return reader_special;
}
public void setReader_special(String reader_special) {
this.reader_special = reader_special;
}
public String getReader_class() {
return reader_class;
}
public void setReader_class(String reader_class) {
this.reader_class = reader_class;
}
public String getReader_tel() {
return reader_tel;
}
public void setReader_tel(String reader_tel) {
this.reader_tel = reader_tel;
}
public String getReader_begin() {
return reader_begin;
}
public void setReader_begin(String reader_begin) {
this.reader_begin = reader_begin;
}
public boolean isReader_state() {
return reader_state;
}
public void setReader_state(boolean reader_state) {
this.reader_state = reader_state;
}
public int getDept_id() {
return dept_id;
}
public void setDept_id(int dept_id) {
this.dept_id = dept_id;
}
public int getReader_typeid() {
return reader_typeid;
}
public void setReader_typeid(int reader_typeid) {
this.reader_typeid = reader_typeid;
}
}
而且真是挺智能的,
public boolean isReader_state() {
return reader_state;
}
真值判断这函数命,智能不?
下面来就是依旧对数据库信息进行具体的操作
package 读者信息管理;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class ReaderManage {
JOptionPane jop=new JOptionPane();
public void addReader(Readers reader) {
int row=0;
Connection con=DBUtil.getConncetion();
try {
String sql="insert into reader(reader_id,reader_name,reader_typeid,reader_special,reader_class,reader_tel) values ('"+reader.getReader_id()+"','"+reader.getReader_name()+"','"+reader.getReader_typeid()+"','"+reader.getReader_special()+"','"+reader.getReader_class()+"','"+reader.getReader_tel()+"')";
Statement sm=con.createStatement();
row=sm.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
}
if (row>0){
JOptionPane.showMessageDialog(jop, "添加成功");
}
else {
JOptionPane.showMessageDialog(jop, "添加失败");
}
}
public void updateReader(String i,String n,String s,String c,String t) {
int row=0;
Connection con=DBUtil.getConncetion();
try {
String sql="update reader set reader_name='"+n+"',reader_special='"+s+"',read_class='"+c+"',reader_tel='"+t+"' where reader_id='"+i+"'";
Statement sm=con.createStatement();
row=sm.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
}
if (row>0)
JOptionPane.showMessageDialog(jop, "修改成功");
else
JOptionPane.showMessageDialog(jop, "修改失败");
}
//根据传过来的ID返回查询结果
public List idSeekReader(String ID) {
List list=new ArrayList();
Readers reader;
Connection con=DBUtil.getConncetion();
try {
String sql;
if (ID.equals(""))
sql="select * from reader";
else
sql="select * from reader where reader_id='"+ID+"'";
Statement sm=con.createStatement();
ResultSet rs=sm.executeQuery(sql);
while (rs.next()){
reader=new Readers();
reader.setReader_id(rs.getString("reader_id"));
reader.setReader_name(rs.getString("reader_name"));
reader.setReader_special(rs.getString("reader_special"));
reader.setReader_class(rs.getString("reader_class"));
reader.setReader_tel(rs.getString("reader_tel"));
list.add(reader);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return list;
}
public void deleteReader(String id) {
int row=0;
Connection con=DBUtil.getConncetion();
try {
Statement sm=con.createStatement();
String sql="delete reader where reader_id='"+id+"'";
row=sm.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
}
if (row>0)
JOptionPane.showMessageDialog(jop, "删除成功");
else
JOptionPane.showMessageDialog(jop, "删除失败");
}
public boolean isExist(String id) {
Connection con=DBUtil.getConncetion();
try {
Statement sm=con.createStatement();
String sql="select reader_id from reader where reader_id='"+id+"'";
ResultSet rs=sm.executeQuery(sql);
if (rs.next())
return true;
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
}
return false;
}
//查询读者类型
public String[] seekType() {
List<String> list=new ArrayList<String>();
Connection con=DBUtil.getConncetion();
try {
String sql="select * from readertype";
Statement sm=con.createStatement();
ResultSet rs=sm.executeQuery(sql);
while (rs.next()){
list.add(rs.getString("reader_type"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e2) {
e2.printStackTrace();
}
}
String[] item=new String[list.size()];
for (int i=0;i<list.size();i++)
item[i]=list.get(i);
return item;
}
//查询读者类型编号
public int seekTypeId(String s) {
int i=0;
Connection con=DBUtil.getConncetion();
try {
String sql="select reader_typeid from readertype where reader_type='"+s+"'";
Statement sm=con.createStatement();
ResultSet rs=sm.executeQuery(sql);
while (rs.next()){
i=rs.getInt("reader_typeid");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return i;
}
}
添加里面,sql语句那么长,很烦哟。
这个查询读者类型函数功能seekType(),很好的诠释了哪里用List,哪里用数组。
在不知道具体长度的情况下,先用List存放,最后再放入到数组里面。
最后就是主面板,暂时的主面板,因为四个具体的增删改查都没有写,是四个面板呢。
package 读者信息管理;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JPanel;
public class ReaderJPanel extends JPanel implements ActionListener{
JPanel jpLeft;
JButton add,update,delete,seek;
public static AddReaderJPanel arj=new AddReaderJPanel();
public static UpdateReaderJPanel urj=new UpdateReaderJPanel();
public static DeleteReaderJPanel drj=new DeleteReaderJPanel();
public static SeekReaderJPanel srj=new SeekReaderJPanel();
public ReaderJPanel(){
arj.setVisible(false);
urj.setVisible(false);
drj.setVisible(false);
srj.setVisible(false);
jpLeft=new JPanel();
add=new JButton("添加读者");
add.addActionListener(this);
update=new JButton("修改读者");
update.addActionListener(this);
delete=new JButton("删除读者");
delete.addActionListener(this);
seek=new JButton("查询读者");
seek.addActionListener(this);
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(add);
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(update);
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(seek);
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(Box.createHorizontalStrut(10));
jpLeft.add(delete);
jpLeft.setBounds(15, 15, 100, 370);
jpLeft.setBackground(Color.white);
add(jpLeft);
arj.setBounds(130, 15, 685, 370);
add(arj);
urj.setBounds(130, 15, 685, 370);
add(urj);
drj.setBounds(130, 15, 685, 370);
add(drj);
srj.setBounds(130, 15, 685, 370);
add(srj);
}
public void actionPerformed(ActionEvent e) {
}
}
唯一还有疑惑的又还是这个box我的天,这里书上写的到底是几个意思呢?Hor是横向的,但是要是改成Ver垂直的,也没什么区别啊。
明天继续。