Java 将JTable数据转换为UPDATE语句

Java 将JTable数据转换为UPDATE语句,java,sql,Java,Sql,我希望能够从转换为UPDATE语句的JTable中获取数据,以便获取表内容并使用现有的SQL连接传输到DB 乙二醇 进入 请注意,我不允许编辑主键。这是有意的到目前为止,我的代码只支持BigDecimal、String、Integer和Boolean类型,但添加更多类型应该相对容易(查看switch语句内部) public String getUpdateStmt(JTable JTable1,String tableName) { 字符串更新=”; 对于(int i=0;i

我希望能够从转换为UPDATE语句的JTable中获取数据,以便获取表内容并使用现有的SQL连接传输到DB

乙二醇

进入


请注意,我不允许编辑主键。这是有意的

到目前为止,我的代码只支持BigDecimal、String、Integer和Boolean类型,但添加更多类型应该相对容易(查看switch语句内部)

public String getUpdateStmt(JTable JTable1,String tableName)
{
字符串更新=”;
对于(int i=0;i
executeSQL(字符串stmt)中正常使用方法

我只是想在做一个项目的时候发布我的发现。我在互联网上搜索过这个,但没有找到将jtable转换成SQL的方法。

请告诉我我可以添加哪些改进,因为我想帮助很多人

到目前为止,我的代码只支持BigDecimal、String、Integer和Boolean类型,但添加更多应该相对容易(查看switch语句内部)

public String getUpdateStmt(JTable JTable1,String tableName)
{
字符串更新=”;
对于(int i=0;i
executeSQL(字符串stmt)中正常使用方法

我只是想在做一个项目的时候发布我的发现。我在互联网上搜索过这个,但没有找到将jtable转换成SQL的方法。

请告诉我我可以添加的任何改进,因为我打算帮助许多人

您可以使用
preparedstation
使代码更易于理解和维护

我不是SQL专家,但代码应该是:

String sql = "UPDATE Products SET ProductID = ?, ProdName = ?, Stock = ?, Price = ? WHERE ProductID = ?";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, table.getValueAt(row, 0) );
stmt.setString( 2, table.getVAlueAt(row, 1) );
stmt.setInteger( 3, table.getVAlueAt(row, 2) );
stmt.setDouble( 4, table.getVAlueAt(row, 3) );
stmt.setString( 5, table.getValueAt(row, 0) );
stmt.executeUpdate();
stmt.close();
public void updateTable(JTable table)
{
    String sql = createSql(table);

    for (int i = 0; i < table.getRowCount(); i++)
    {
        updateRow(sql, table, i);
    }
}


public String createSql(JTable table)
{
    StringBuilder sql = new StringBuilder();
    sql.append("UPDATE " + tableName + " SET ");

    for (int i = 0; i < table.getColumnCount(); i++)
    {
        sql.append(table.getColumnName(i) + " = ?";
        sql.append(i + 1 == table.getColumnCount() ? " " : ", ");
    }

    return sql.toString();
}

public void updateRow(String sql, JTable table int row)
{
    PreparedStatement stmt = connection.prepareStatement(sql.toString());

    for (int i = 0; i <table.getColumnCount(); i++)
    {
        stmt.setObject( i + 1, table.getValueAt(row, i) );
    }

    stmt.setObject(table.getColumnCount, table.getValueAt(row, i));
    stmt.executeUpdate();
    stmt.close();
}
希望你能明白。您可以使用“?”为变量数据构建SQL语句。然后您只需设置每个“?”的值。
PreparedStatement
会担心正确的格式等问题,因此不太容易出错

另外,我不知道为什么您的代码要设置产品id。我原以为您只需要设置更改的3个值

编辑:

要使上述内容更加通用,您可以执行以下操作:

String sql = "UPDATE Products SET ProductID = ?, ProdName = ?, Stock = ?, Price = ? WHERE ProductID = ?";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, table.getValueAt(row, 0) );
stmt.setString( 2, table.getVAlueAt(row, 1) );
stmt.setInteger( 3, table.getVAlueAt(row, 2) );
stmt.setDouble( 4, table.getVAlueAt(row, 3) );
stmt.setString( 5, table.getValueAt(row, 0) );
stmt.executeUpdate();
stmt.close();
public void updateTable(JTable table)
{
    String sql = createSql(table);

    for (int i = 0; i < table.getRowCount(); i++)
    {
        updateRow(sql, table, i);
    }
}


public String createSql(JTable table)
{
    StringBuilder sql = new StringBuilder();
    sql.append("UPDATE " + tableName + " SET ");

    for (int i = 0; i < table.getColumnCount(); i++)
    {
        sql.append(table.getColumnName(i) + " = ?";
        sql.append(i + 1 == table.getColumnCount() ? " " : ", ");
    }

    return sql.toString();
}

public void updateRow(String sql, JTable table int row)
{
    PreparedStatement stmt = connection.prepareStatement(sql.toString());

    for (int i = 0; i <table.getColumnCount(); i++)
    {
        stmt.setObject( i + 1, table.getValueAt(row, i) );
    }

    stmt.setObject(table.getColumnCount, table.getValueAt(row, i));
    stmt.executeUpdate();
    stmt.close();
}
public void updateTable(JTable表)
{
字符串sql=createSql(表);
对于(int i=0;i对于(int i=0;i您可以使用
preparedstation
使代码更易于理解和维护

我不是SQL专家,但代码应该是:

String sql = "UPDATE Products SET ProductID = ?, ProdName = ?, Stock = ?, Price = ? WHERE ProductID = ?";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, table.getValueAt(row, 0) );
stmt.setString( 2, table.getVAlueAt(row, 1) );
stmt.setInteger( 3, table.getVAlueAt(row, 2) );
stmt.setDouble( 4, table.getVAlueAt(row, 3) );
stmt.setString( 5, table.getValueAt(row, 0) );
stmt.executeUpdate();
stmt.close();
public void updateTable(JTable table)
{
    String sql = createSql(table);

    for (int i = 0; i < table.getRowCount(); i++)
    {
        updateRow(sql, table, i);
    }
}


public String createSql(JTable table)
{
    StringBuilder sql = new StringBuilder();
    sql.append("UPDATE " + tableName + " SET ");

    for (int i = 0; i < table.getColumnCount(); i++)
    {
        sql.append(table.getColumnName(i) + " = ?";
        sql.append(i + 1 == table.getColumnCount() ? " " : ", ");
    }

    return sql.toString();
}

public void updateRow(String sql, JTable table int row)
{
    PreparedStatement stmt = connection.prepareStatement(sql.toString());

    for (int i = 0; i <table.getColumnCount(); i++)
    {
        stmt.setObject( i + 1, table.getValueAt(row, i) );
    }

    stmt.setObject(table.getColumnCount, table.getValueAt(row, i));
    stmt.executeUpdate();
    stmt.close();
}
希望您能理解。您使用“?”为变量数据构建SQL语句。然后您只需设置每个“?”的值。
PreparedStatement
将担心正确的格式等问题。更不容易出错

另外,我不知道为什么您的代码要设置产品id。我原以为您只需要设置更改的3个值

编辑:

要使上述内容更加通用,您可以执行以下操作:

String sql = "UPDATE Products SET ProductID = ?, ProdName = ?, Stock = ?, Price = ? WHERE ProductID = ?";

PreparedStatement stmt = connection.prepareStatement(sql);

stmt.setString( 1, table.getValueAt(row, 0) );
stmt.setString( 2, table.getVAlueAt(row, 1) );
stmt.setInteger( 3, table.getVAlueAt(row, 2) );
stmt.setDouble( 4, table.getVAlueAt(row, 3) );
stmt.setString( 5, table.getValueAt(row, 0) );
stmt.executeUpdate();
stmt.close();
public void updateTable(JTable table)
{
    String sql = createSql(table);

    for (int i = 0; i < table.getRowCount(); i++)
    {
        updateRow(sql, table, i);
    }
}


public String createSql(JTable table)
{
    StringBuilder sql = new StringBuilder();
    sql.append("UPDATE " + tableName + " SET ");

    for (int i = 0; i < table.getColumnCount(); i++)
    {
        sql.append(table.getColumnName(i) + " = ?";
        sql.append(i + 1 == table.getColumnCount() ? " " : ", ");
    }

    return sql.toString();
}

public void updateRow(String sql, JTable table int row)
{
    PreparedStatement stmt = connection.prepareStatement(sql.toString());

    for (int i = 0; i <table.getColumnCount(); i++)
    {
        stmt.setObject( i + 1, table.getValueAt(row, i) );
    }

    stmt.setObject(table.getColumnCount, table.getValueAt(row, i));
    stmt.executeUpdate();
    stmt.close();
}
public void updateTable(JTable表)
{
字符串sql=create