Я использую процедуру для вставки данных в мою базу данных firebird. Эта процедура вызывается в команде while, потому что нет ограничений на количество элементов, которые я могу вставить, например:
while (there's itens) {
query("select * from procedure_insert(id,desc,etc);");
}
Это не работает, после того, как я закончу вставку, ни один элемент не будет вставлен в базу данных. Моя процедура работает нормально, нет никаких сомнений, я считаю, что это проблема с классом, который я использую для запроса и фиксации.
Вот мой код:
Класс стойкости:
public class Persistence {
public static Connection con = Conn.getConn();
public static Statement stm = null;
public static void Conn(){
try {
stm = con.createStatement();
} catch (SQLException e) {
//
}
}
public static void Insert(String query) {
try {
stm.execute(query);
} catch (SQLException e) {
//
}
}
public static void Commit(){
try {
con.commit();
} catch (SQLException e) {
//
}
}
Вставлять:
while(rs.next()){
Items item = new Items();
item.setItem_data(rs.getString("ZPED_ITEM_DATA"));
item.setItem_desconto(rs.getDouble("ZPED_ITEM_VALOR_V") - rs.getDouble("ZPED_ITEM_DESCONTO"));
item.setItem_produto(rs.getInt("ZPED_ITEM_PRODUTO"));
item.setItem_qtd(rs.getDouble("ZPED_ITEM_QTD"));
item.setItem_valor_v(rs.getDouble("ZPED_ITEM_VALOR_V"));
item.setPed_cod(rs.getInt("ZPED_COD"));
////////////////////////////////////////////////////////////////
Persistence.Insert("SELECT * FROM PEDIDOS_PROC("+a+","+b+","+p.get(0).getCod_n()+",'"+p.get(0).getData()+"',55,"+item.getItem_produto()+",0,"+item.getItem_qtd()+","+item.getItem_valor_v()+",'A',2);");
Persistence.Commit();
}
спасибо!
Я использую JDBC Jaybird Full 2.2.7.
PEDIDOS_PROC
? Что оно делает? И почему вы используете функцию для вставки данных? Разве это не должна быть хранимая процедура? - person a_horse_with_no_name   schedule 06.05.2015Persistence
, поэтому, насколько вам известно, вы получаете много исключений. Вам также нужно показать, как вы создаете свое соединение. Кроме того, способ объединения запросов открыт для SQL-инъекций. Вы действительно должны использоватьPreparedStatement
для этого (и это также может быть причиной ваших текущих проблем). - person Mark Rotteveel   schedule 06.05.2015