数据库课设--电商系统笔记
1. 在jdbc中有3种执行sql的语句分别是execute,executeQuery和executeUpdate
1.execute执行增删改查操作
execute返回的结果是个boolean型,当返回的是true的时候,表明有ResultSet结果集,通常是执行了select操作,当返回的是false时,通常是执行了insert、update、delete等操作。execute通常用于执行不明确的sql语句。
-
executeQuery执行查询操作
executeQuery返回的是ResultSet结果集,通常是执行了select操作。
image.png -
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.pngimage.png
解决;
image.png
6. Unknown column '' in 'field list'报错及解决
image.png将代码修改为使用 pstmt.set?传参给sql语句
image.png7. 实现jtable更新
使用使用TableModel的方式存放Table需要显示的数据
TableModel 继承AbstractTableModel ,进而实现了接口TableModel
在TableModel 中提供一个table显示需要的所有信息
- getRowCount 返回一共有多少行
- getColumnCount 返回一共有多少列
- getColumnName 每一列的名字
- isCellEditable 单元格是否可以修改
- 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语句,两个表连接错误
两个表连接的公共属性,必须是其中一个表的主键:)