一、创建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){....}
}
欢迎斧正!!!