关于mysql表联动jtable的更新——新手篇

一、创建mysql连接

导入连接jar包:

代码:

try {
                    //加载驱动程序
                    Class.forName("com.mysql.cj.jdbc.Driver");
                } catch (ClassNotFoundException ex) {
                    throw new RuntimeException(ex);
                }
                //问了下老师说mysql8.0以上版本要添加时域在连接字符串上
                String url = "jdbc:mysql://localhost:3306/pinventory?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8";
                String username = "root";
                String password = "密码";
                Connection connection = null;
                Statement statement;
                try {
                    //建立与MySQL服务器的连接
                    connection = DriverManager.getConnection(url, username, password);
                } catch (SQLException ex) {
                    throw new RuntimeException(ex);
                }
                try {
                    //可以使用创建Statement对象来执行SQL查询或更新语句
                    statement = connection.createStatement();
                } catch (SQLException ex) {
                    throw new RuntimeException(ex);
                }
                //SQL查询语句    
                ResultSet resultSet1 = statement1.executeQuery(sql);


二、Jtable

①设置jtable的模式:DefaultTableModel model = new DefaultTableModel();

②通过一些model方法给jtable设置列名和行数据:

model.setColumnIdentifiers();

model.addRow();

③为model添加监听器:

model3.addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                //每当修改jtable中的单元格并按下enter回车键后可以执行
                int column = e.getColumn();//获得jtable的列
                int lastRow = e.getLastRow();//获得jtable的行
                int sql_row = lastRow+1;
                
                //在监听器中获得jtable的model这里需要强转
                DefaultTableModel source = (DefaultTableModel) e.getSource();
                
      //通过model对象得到单元格的数据,valueAt可以对应到数据库数据中的不同类型,可能系统会帮忙转型
                String valueAt = source.getValueAt(lastRow,column).toString();
                String columnName = source.getColumnName(column);
                System.out.println(columnName);//可以设置sout负责检验得到的数据是不是预期数据

                   String sql_drug_info="update drug_info set "+columnName+"='"+valueAt+"'where id ="+sql_row;   //这里得到的sql_row与row相差1
           
                                    Statement statement_drug = null;
                                    try {    
                                       statement_drug =             
                                                      finalConnection1.createStatement();                  

                                    } catch (SQLException ex) {
                                        throw new RuntimeException(ex);
                                    }
                                    try {
                                        statement_drug.executeUpdate(sql_drug_info);
                                    } catch (SQLException ex) {
                                        throw new RuntimeException(ex);
                                    }
    }
}

   ④把model设置给jtable

Jtable jtable = new Jtable(model);

注意点:

①一般从jtable的model中可以获得鼠标选择的行和列,jtable中的行和列分别是从0开始的;而在数据库表中行和列是从1开始的。

②mysql8.0以上版本数据库连接字符串要添加时域。

③在model中的getValueAt()方法中得到的数据要添加toString方法,而在这之后于jtable单元格中修改后的数据会自动与数据库表中的数据类型匹配,不用在手动转型。

④关于addTableModelListener

injframe.in_jTable.getModel().addTableModelListener(new TableModelListener() {
            //如果行被删除了的时候执行
            if (e.getType()==TableModelEvent.DELETE){......}
            
            //如果单元格被更新了的时候执行
            if (e.getType()==TableModelEvent.UPDATE){......}
            
            //如果表头被更改后触发
            if (e.getType()==TableModelEvent.HEADER_ROW){.....}
            
            //表格模型的所有数据被更改
            if (e.getType()==TableModelEvent.ALL_COLUMNS){....}

}

欢迎斧正!!!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值