java练习 写个图书管理系统的demo
写着java想python 写着python想java 这两天对jdbc进行了些许的研究 不得不说的是,作为从python这种脚本语言入手的新手来讲,java的难度和性能真是高出python太多了,用起来稍显繁琐,不过java有个好处,就是上下限都很高,老油条和新人写出来的代码性能差距实际上差不太多,让我些许保留了颜面
此文算是作为java的学习笔记,若是有人赏脸阅读,望不吝赐教
先导入c3p0的依赖包
然后写配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="dirverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/java?characterEncoding=UTF-8</property>
<property name="user">username</property>
<property name="password">password</property>
<property name="initialPoolSize">10</property>
<property name="maxPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="checkoutTimeout">30000</property>
</default-config>
</c3p0-config>
先写个连接数据池的类
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DBtool {
static DataSource ds;
static {
ds=new ComboPooledDataSource();
}
public static Connection getCoon() throws SQLException {
return ds.getConnection();
}
}
;
作用嘛 目前我所知的就是省系统资源
import javax.swing.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class keep extends JFrame {
public void keep(String id, String name, int page) throws SQLException {
String add="insert into library(id,name,page) values(?,?,?)";
Connection conn=null;
PreparedStatement pstmt=null;
// ResultSet rs=null;
try {
conn=DBtool.getCoon();
pstmt=conn.prepareStatement(add);
pstmt.setString(1,id);
pstmt.setString(2,name);
pstmt.setInt(3,page);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("链接数据库失败!");
}finally {
pstmt.close();
conn.close();
}
}
public ResultSet allQuery() throws SQLException {
String Query="Select * from library";
Connection conn=null;
ResultSet rs=null;
PreparedStatement pstmt=null;
try {
conn=DBtool.getCoon();
pstmt=conn.prepareStatement(Query);
rs=pstmt.executeQuery();
// while (rs.next()){
// for (int i = 1; i <4 ; i++) {
//
// System.out.print(rs.getString(i)+" ");
//
// }
// System.out.println(" ");
//
// }
} catch (SQLException e) {
e.printStackTrace();
}finally {
// assert pstmt != null;
// pstmt.close();
// conn.close();
}
System.out.println(rs);
return rs;
}
}
然后就是写点具体方法,查询和添加
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
public class mainCode extends JFrame implements ActionListener {
JPanel p1, p2;
JScrollPane jsp;
JLabel id, name, page;
JTextField idt, namet, paget;
JTable table;
JButton add, del, que, link;
DefaultTableModel model;
String[] head = {
"ID", "NAME", "DATE"
};
String[][] data = {
};
Vector v;
mainCode() throws SQLException {
this.setSize(420, 600);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setLayout(null);
ResultSet rs;
p1 = new JPanel();
p1.setSize(380, 30);
p1.setLocation(10, 10);
id = new JLabel("ID:");
p1.add(id);
idt = new JTextField(10);
p1.add(idt);
name = new JLabel("名称:");
p1.add(name);
namet = new JTextField(5);
p1.add(namet);
page = new JLabel("页码:");
p1.add(page);
paget = new JTextField(8);
p1.add(paget);
this.add(p1);
p2 = new JPanel();
p2.setSize(380, 30);
p2.setLocation(10, 50);
add = new JButton("添加");
p2.add(add);
del = new JButton("删除");
p2.add(del);
que = new JButton("查询");
p2.add(que);
link = new JButton("连接");
p2.add(link);
this.add(p2);
add.addActionListener(this);
que.addActionListener(this);
model = new DefaultTableModel(data, head);
table = new JTable(model);
jsp = new JScrollPane(table);
jsp.setSize(380, 400);
jsp.setLocation(10, 100);
this.add(jsp);
this.setVisible(true);
}
public static void main(String[] args) throws SQLException {
new mainCode();
}
public void buzhi() throws SQLException {
ResultSet rs;
keep kp=new keep();
rs=kp.allQuery();
while (model.getRowCount()>0){
model.removeRow(model.getRowCount()-1);
}
while (rs.next()){
v=new Vector();
for (int i = 1; i <4 ; i++) {
v.add(rs.getString(i));
}
model.addRow(v);
}
table.invalidate();
}
@Override
public void actionPerformed(ActionEvent e) {
keep kp = new keep();
if (e.getSource() == add) {
if ((idt.getText()).length()<1 ||(namet.getText()).length()<1|| (paget.getText()).length()<1 ){
JOptionPane.showMessageDialog(null,"请填入必要信息!");
return;
}
try {
kp.keep(idt.getText(), namet.getText(), Integer.valueOf(paget.getText()));
idt.setText(null);
namet.setText(null);
paget.setText(null);
buzhi();
table.invalidate();
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "添加失败!");
}
} else if (e.getSource() == que) {
try {
buzhi();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
这是主要的功能模块,本来在model&table这一块大概写了俩小时,因为多次点击查询键会是数据堆到一起,吃中午饭的时候灵光一闪,每次查询把table里的东西删干净就是了,这脑子属实⑧行
具体实现大概是这样的
此外还有个登录类和注册类 我懒得写了 这方面没什么值得记录的
此文完结 若有看客欢迎批评指正