仓库管理系统总结(1)

今天比较累了,学到的还蛮多的!趁现在还有点精神,把自己今天做的事总结一下,加深印象,免得以后忘了!

 

这两天的主要任务是一个仓库管理系统。!

今天完成了一个查询,一个添加功能!就这两个功能就把我累得够呛了!

 

个人觉得做类似的这种小项目,关键的要理解的地方就就是JDBC和数据库的连接了,

本人用的是mysqlMysql的安装就不罗嗦了。

关键的代码:

 

PreparedStatement ps = null;

Connection  ct = null;//定义与数据源得到连接

ResultSet rs = null;

Vector rowDatacolumnNames

 

    Class.forName("com.mysql.jdbc.Driver");//加载驱动

Class.forName("com.mysql.jdbc.Driver").newInstance();//生产相应的Driver实例。

下面是数据库操作的全部代码

public void init(String sql)

{

 if(sql.equals(""))

{

sql = "select * from cangku";

}

columnNames = new Vector();

columnNames.add("cid");

columnNames.add("cName");

columnNames.add("cAddress");

columnNames.add("cPid");

columnNames.add("cbeizhu");

    rowData = new Vector();

//从数据库中取出行数据

try {

//加载驱动

/Class.forName("org.git.mm.mysql.Driver").newInstance();

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

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

//String url="jdbc:mysql://localhost:3306/store?user=root&password= ";

 

//ct = DriverManager.getConnection("jdbc:odbc:store","root","");

 

ct = DriverManager.getConnection

  "jdbc:mysql://localhost:3306/store","root",""); ps = ct.prepareStatement(sql);

rs = ps.executeQuery();

while(rs.next())

{

Vector yi = new Vector();

//String text=new String(text.getBytes("ISO-8859-1"),"GBK");

String text  = rs.getString(1);

String text1 = new String(text.getBytes("ISO-8859-1"),"GBK");

yi.add(text1);

yi.add(rs.getString(2));

yi.add(rs.getString(3));

yi.add(rs.getString(4));

yi.add(rs.getString(5));

rowData.add(yi);

}

catch (Exception e) {

e.printStackTrace();

}finally

{

if(rs!=null)

try {

rs.close();

if(ps!=null)

ps.close();

if(ct!=null)

ct.close();

catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

 

}

在这里将对数据库操作的代码建立在一个独立的类中。

 

这个类继承了一个AbstactTableModel,

 

AbstactTableModel 作用:用来接收数据库的操作。

AbstactTableModel 有必须要实现的三个方法:

//得到表中共有多少列

public int getColumnCount()

//得到共有多少行

public int getRowCount()

//得到某一行某一列的具体数据

public Object getValueAt(int rowIndex, int columnIndex)

return (String)((Vector)this.rowData.get(rowIndex)).get(columnIndex);

 

这里先得到某一行的数据 this.rowData.get(rowIndex)

在将行的数据转换成向量后获得列的数据,因为表中的数据都是字符串的,多以强制转换了。

如果表中的数据包含int 则不必强制转换。

 

 

下面是实现的查询功能:

if(e.getSource() == jb1)//jb1表示查询按钮

{

System.out.println("查询数据库!");

String name = jtf.getText().trim();//从输入框中得到查询得到内容String sql = "select * from cangku where cid = '"+name+"'";//这里是按编号来查询的

Mymodel my = new Mymodel(sql);//建议一个新的model,重新处理数据库表中信息  在Mymodel中两个构造函数,通过sql来决定调用哪一个

jt.setModel(my);//更新

}

 

下面实现添加功能:

 

 

点击添加后,弹出一个添加仓库的框,框的布局不多说了。

框是格外一个类的

jp1.setLayout(new GridLayout(5,1));

jp2.setLayout(new GridLayout(5,1));

两个5行一列的

this.add(jp1,BorderLayout.WEST);

this.add(jp2,BorderLayout.CENTER);

this.add(jp3,BorderLayout.SOUTH);

在流布局

 

添加功能要操作数据库。

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource() == jb1)//jb1是框上的添加按钮

{

//定义好需要的参数

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

PreparedStatement pstamt = null;

try {

Class.forName("com.mysql.jdbc.Driver");//加载驱动

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

conn = DriverManager.getConnection

"jdbc:mysql://localhost:3306/store","root",""); 

String strsql = "insert into cangku values(?,?,?,?,?)";

pstamt=(PreparedStatement)conn.prepareStatement(strsql);

//将要插入的数据插进表中

pstamt.setString(1, jtf1.getText());

pstamt.setString(2, jtf2.getText());

pstamt.setString(3, jtf3.getText());

pstamt.setString(4, jtf4.getText());

pstamt.setString(5, jtf5.getText());

 

pstamt.executeUpdate();

this.dispose();//关闭对话框

catch (ClassNotFoundException e1) {

// TODO: handle exception

e1.printStackTrace();

}catch(SQLException e2)

{

e2.printStackTrace();

catch (InstantiationException e3) {

// TODO Auto-generated catch block

e3.printStackTrace();

catch (IllegalAccessException e4) {

// TODO Auto-generated catch block

e4.printStackTrace();

}finally

{

if(conn!=null)

try {

conn.close();

if(stmt!=null)

stmt.close();

if(rs!=null)

rs.close();

catch (SQLException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

 

程序中不知怎么出现了乱码,配置文件也该了。明天还得继续。

程序中有什么需要改进,优化的地方,望指教。谢谢!

原文地址:https://www.cnblogs.com/LLeiFeng/p/2855398.html