最近这周写的一个粗糙的仓库管理系统
2018-01-29 21:25
155 查看
第一次写,记录一下
代码都是网上找的,改了一下就用了,出处我zhaob
1.要个数据库,要个界面,要JDBC
2.画界面:Java swing
这次用了:
JTextArea,开始的时候用的JTextField,但是后者不能设初值,比较不方便
JTable,把数据库的内容放到表里显示到界面上
JScrollPane,有滚动条的面板
JButton,一些按钮
按钮事件:
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.连接数据库
4.实现增删改查
没能实现查找,只实现显示功能:
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) {
没有做出那种一按新增就立即能在界面里看到,而是还要点一下“显示”按钮
编辑:
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.实际没有实现查找,因为我把表头固定住了,不过问题不大,与查找无关的内容用'*****'盖掉好了
代码都是网上找的,改了一下就用了,出处我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.实际没有实现查找,因为我把表头固定住了,不过问题不大,与查找无关的内容用'*****'盖掉好了
相关文章推荐
- 最近做了一个考勤提示软件
- 最近在开发一个象frontpage的做网站的软件,里面用到的技术是WTL/ATL
- 谈下最近做的一个手机app,学习到的东西挺多的哦
- 最近遇到一个很纠结的问题:jquery.autocomplete在IE6下被下拉框遮挡 。
- 最近做的一个手机上的联网应用程序
- 最近做的一道随机问题,好像是int a[]={1,2,3,4,5,6,7,8,9}; 输出一个随机数组a[]={5,8,7,9,1,4,6,2,3};
- 在一个二维平面上找到离固定点最近的k个点位置
- 最近开发一个项目使用了Nhibernate出现了如下问题deleted object would be re-saved by cascade (remove deleted object from
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 根据ajax从服务器获取数据的时间和ID,根据最近的时间,显示一个记录重复ID的数字
- 最近做了一个程序。可以用来变换代理不停的刷新某个网站。不知道是否可以用来广告作弊:)
- 最近做了一个小东西,对于接口实现类。发现很多都是一个套路,所以备份下,以后可以经常用到! 这几个是单纯查询的实现类。
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素数,则输出该素数本身,
- 花了一上午,合成的一个粗糙的IT用来了解EXCHANGE运行情况的自动邮件脚本
- 最近做了一个安装包的安装流程图
- 最近发现一个很好的G站,99wg站,和大家分享一下的了
- 最近打算1个月之内编出一个小的IOS软件
- 最近写的一个基于POP3协议 获取邮件的类
- 一个管理最近使用过的文件的类