您的位置:首页 > 其它

最近这周写的一个粗糙的仓库管理系统

2018-01-29 21:25 155 查看
第一次写,记录一下

代码都是网上找的,改了一下就用了,出处我zhaob

1.要个数据库,要个界面,要JDBC

2.画界面:Java swing

这次用了:

JTextArea,开始的时候用的JTextField,但是后者不能设初值,比较不方便

JTable,把数据库的内容放到表里显示到界面上

JScrollPane,有滚动条的面板

JButton,一些按钮

按钮事件:

this.btnShow = new JButton("显示");
btnShow.setBounds(650, 20, 80, 25);

btnShow.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

btnShow_ActionPerformed(ae);

}

});


super("Mysystem");:写标题

this.setSize(850, 500);

this.setLocation(100, 50);:设置窗口的大小位置

this.setLayout(null);:java默认是BorderLayout,分为东西南北中。这个语句把默认格式改为空了

this.scpDemo.setBounds(10, 150, 800, 270);:面板的大小位置

add:添加到窗口

this.setVisible(true);:设置可见

参考:点击打开链接

3.连接数据库

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/systemdb", "root", "");
Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息

4.实现增删改查

没能实现查找,只实现显示功能:

String sql = "select * from cangku";

PreparedStatement pstm = conn.prepareStatement(sql);

// 执行查询

this.rs = pstm.executeQuery();

// 计算有多少条记录

int count = 0;

while (rs.next()) {

count++;

}

rs = pstm.executeQuery();

PreparedStatement:表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句

常用方法:

boolean  execute()

 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。

 ResultSet  executeQuery()

 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

 int  executeUpdate()

在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。

ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

// 将查询获得的记录数据,转换成适合生成JTable的数据形式

Object[][] info = new Object[count][4];

count = 0;

while (rs.next()) {

info[count][0] = Integer.valueOf(rs.getInt("id"));

info[count][1] = rs.getString("name");

info[count][2] = Integer.valueOf(rs.getInt("number"));

info[count][3] = rs.getString("date");

count++;

}

// 定义表头

String[] title = { "id", "name", "number", "date" };

// 创建JTable

this.tabDemo = new JTable(info, title);

// 显示表头

this.jth = this.tabDemo.getTableHeader();

// 将JTable加入到带滚动条的面板中

this.scpDemo.getViewport().add(tabDemo);

} catch (ClassNotFoundException cnfe) {

JOptionPane.showMessageDialog(null, "数据源错误", "错误", JOptionPane.ERROR_MESSAGE);

} catch (SQLException sqle) {

JOptionPane.showMessageDialog(null, "数据操作错误", "错误", JOptionPane.ERROR_MESSAGE);

}

}Object[][] info = new Object[count][4];
声明了一个对象数组,把查到的内容装到里面

参考:点击打开链接

新增:public void addButton_ActionPerformed(ActionEvent ae) {
//把文本框里的内容存起来
String txt1 = userTextid.getText();
idval = Integer.parseInt(txt1);
nameval = userTextname.getText();
String txt2 = userTextnumber.getText();
numberval = Integer.parseInt(txt2);
dateval = userTextdate.getText();
//又连了一次数据库
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/systemdb", "root", "");

psql = conn.prepareStatement("insert into cangku (id,name,number,date) " + "values(?,?,?,?)");
//用文本框里的内容补全sql语句
psql.setInt(1, idval);
psql.setString(2, nameval);
psql.setInt(3, numberval);
//处理日期变量
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date myDate2 = null;

try {
myDate2 = dateFormat2.parse(dateval);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

psql.setDate(4, new java.sql.Date(myDate2.getTime()));

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
psql.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

没有做出那种一按新增就立即能在界面里看到,而是还要点一下“显示”按钮

编辑:

public void editButton_ActionPerformed(ActionEvent ae) {
String txt4 = userTextid1.getText();
idval1 = Integer.parseInt(txt4);
nameval1 = userTextname1.getText();
String txt5 = userTextnumber1.getText();
numberval1 = Integer.parseInt(txt5);
dateval1 = userTextdate1.getText();
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/systemdb", "root", "");

psql = conn.prepareStatement("update cangku set name = ?,number = ?,date = ? where id = ?");

psql.setString(1, nameval1);
psql.setInt(2, numberval1);
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date myDate2 = null;

try {
myDate2 = dateFormat2.parse(dateval1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

psql.setDate(3, new java.sql.Date(myDate2.getTime()));
psql.setInt(4, idval1);

psql.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


几乎和“新增”一样,只是执行的sql语句不同。“删除”也是这样

删除:

public void editButton_ActionPerformed(ActionEvent ae) {
String txt4 = userTextid1.getText();
idval1 = Integer.parseInt(txt4);
nameval1 = userTextname1.getText();
String txt5 = userTextnumber1.getText();
numberval1 = Integer.parseInt(txt5);
dateval1 = userTextdate1.getText();
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/systemdb", "root", "");

psql = conn.prepareStatement("update cangku set name = ?,number = ?,date = ? where id = ?");

psql.setString(1, nameval1);
psql.setInt(2, numberval1);
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date myDate2 = null;

try {

4000
myDate2 = dateFormat2.parse(dateval1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

psql.setDate(3, new java.sql.Date(myDate2.getTime()));
psql.setInt(4, idval1);

psql.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}做的是按id删除,没有做到批量删除或是按某些条件删除

结果:








总结和问题:

总的来说还是不难的,思路比较简单,只是要用的这些对象及其方法不了解。

1.我每个操作都连接了一遍数据库,显然是没必要的。了解到可以用连接池?先放这里

2.我全部都是在一个类里实现的,我觉得分成模块比较好,试了一下,互相之间的消息传递搞得头大,不会弄

3.实际没有实现查找,因为我把表头固定住了,不过问题不大,与查找无关的内容用'*****'盖掉好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐