数据库课设--电商系统笔记

2019-01-07  本文已影响0人  一包

1. 在jdbc中有3种执行sql的语句分别是execute,executeQuery和executeUpdate

1.execute执行增删改查操作
execute返回的结果是个boolean型,当返回的是true的时候,表明有ResultSet结果集,通常是执行了select操作,当返回的是false时,通常是执行了insert、update、delete等操作。execute通常用于执行不明确的sql语句。

  1. executeQuery执行查询操作
    executeQuery返回的是ResultSet结果集,通常是执行了select操作。


    image.png
  2. executeUpdate执行增删改操作
    executeUpdate返回的是int型,表明受影响的行数,通常是执行了insert、update、delete等操作。

2. navicat自增报错


先把外键删了,再自增

3. 带参数的java数据库增删查改

public int save(User user) throws SQLException {
String sql = "insert into user values(0,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getName());
pstmt.setString(2, user.getTele());
pstmt.setDate(3, user.getBirthday());
int n = pstmt.executeUpdate();
pstmt.close();
return n;
}
public int delete(User user) throws SQLException{
String sql = "delete from user where id = "+user.getId();
Statement stmt = conn.createStatement();
int n = stmt.executeUpdate(sql);
stmt.close();
return n;
}
public int update(User user) throws SQLException{
String sql = "update user set name=?, tele=?, birthday=? where id = "+user.getId();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getTele());
pstmt.setDate(4, user.getBirthday());
int n = pstmt.executeUpdate(sql);
pstmt.close();
return n;
}
public User getUser(Integer id) throws SQLException{
String sql = "select * from user where id = " + id;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
User user = getUserFromResultSet(rs);
rs.close();
stmt.close();
return user;
}

4.java.sql.SQLException: Before start of result set异常及处理办法

解决方法:使用rs.getString();前一定要加上rs.next();

原因:ResultSet对象代表SQL语句执行的结果集,维护指向其当前数据行的光标。每调用一次next()方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用next()应把光标置于第一行上,使它成为当前行。随着每次调用next()将导致光标向下移动一行。在ResultSe对象及其t父辈Statement对象关闭之前,光标一直保持有效。

5. java窗口跳转不了

image.png
image.png

解决;


image.png

6. Unknown column '' in 'field list'报错及解决

image.png

将代码修改为使用 pstmt.set?传参给sql语句

image.png

7. 实现jtable更新

使用使用TableModel的方式存放Table需要显示的数据
TableModel 继承AbstractTableModel ,进而实现了接口TableModel
在TableModel 中提供一个table显示需要的所有信息

  1. getRowCount 返回一共有多少行
  2. getColumnCount 返回一共有多少列
  3. getColumnName 每一列的名字
  4. isCellEditable 单元格是否可以修改
  5. getValueAt 每一个单元格里的值
    我的tablemodel
public class MbussinessG extends AbstractTableModel{
    private static Integer bid = 0;
    static List<goods> g ;
    private static myutil dbUtil = new myutil();
    String[] columnNames = new String[] {  "Name", "Detatil", "Image" ,"price"};

    
     public MbussinessG(bussiness myBussiness) throws Exception{    
          bid = myBussiness.getID();//获取商家ID    
          g = showallgoods(bid);
     }
     
    
     @Override
        public int getColumnCount() {
            // TODO Auto-generated method stub
         return columnNames.length;
        }

    @Override
    public int getRowCount() {
        // TODO Auto-generated method stub
        return g.size();
    }

    @Override
    public String getColumnName(int columnIndex) {
        // TODO Auto-generated method stub
        return columnNames[columnIndex];
    }
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }
      public Object getValueAt(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
          goods result = g.get(rowIndex);
          if (columnIndex == 0)
              return result.getGoodsName();
            else if (columnIndex == 1)
                return result.getGoodsDetail();
            else if (columnIndex == 2)
                return result.getGoodsImg();
            else if (columnIndex == 3)
                 return result.getPrice();
           
         return null;
        }


    public static void main(String[] args, bussiness myBussiness) throws Exception {
           new MbussinessG(myBussiness);
         
           
        }
    
     //获取发布的所有商品
    
        public static List<goods> showallgoods(Integer bid) throws Exception {
            
            String sql = null;
            sql = "select * from products where status='1' and b_id=?";//默认status设为1,为上线
            Connection con = dbUtil.getCon();
            PreparedStatement pstmt = con.prepareStatement(sql);
             pstmt.setInt(1, bid);
            ResultSet rs=pstmt.executeQuery();     //将sql语句传至数据库,返回的值为一个字符集用一个变量接收 
            
            List<goods> result = new ArrayList<goods>();
            
            while(rs.next()){    //next()获取里面的内容
                 Integer gid = rs.getInt("p_id");
                 String gname =rs.getString("p_name");
                 String gdetail = rs.getString("detail");
                 String gimage = rs.getString("main_image");
                 float gprice = rs.getFloat("price");
                result.add(new goods(gname, gdetail,gimage, gprice));
                
            }                   
            return result;
        }   

}

使用tablemodel(关键部分代码)

  
            //我的商品jp3
             MbussinessG htm = new  MbussinessG(myBussiness);
             //根据 TableModel来创建 Table
             JTable t = new JTable(htm);
             JScrollPane jp3 = new JScrollPane(t);
           tabbedPane.addTab("我的商品",jp3);

需要更新的时候,比如我是发布商品后需要更新我的商品table

 MbussinessG.g = showallgoods(bid);//更新tablemodel的数据
 t.updateUI();//更新ui

8.sql语句报错

sql语句没错,发现是表名取了order是数据库关键字所以报错!摔杯子!

9.sql语句,两个表连接错误

两个表连接的公共属性,必须是其中一个表的主键:)

终于写好啦!!!!!!开心!!!我也会写java啦啦啦啦!!!!虽然功能简单界面丑陋但还是很开心哈哈!

上一篇下一篇

猜你喜欢

热点阅读