Problema v tom chto poslednij INSERT v funcuii addNewAttribute() ne vstavlyaet danue v tablicu. Vsegda imenno poslednij.
Kak vulechit'????
Ispolzyetsya Access.
| Код | import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collection; import java.util.Date;
public class DataBase {
Connection connection; Statement statement; ResultSet resultSet; String[] columnNames = {}; ResultSetMetaData metaData; PreparedStatement insertAttribute; PreparedStatement insertAddAtributeToClass; PreparedStatement insertValuesByNewAttribute; MyObject constants = new MyObject("Constants"); private static DataBase db = null; private static String CANNOT_FIND_DRIVER = "Cannot find driver."; private static String CANNOT_CREATE_STATEMENT = "Cannont create the statement."; static final String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
public DataBase() { try { Class.forName(driverName); System.out.println("");
connection = DriverManager.getConnection("jdbc:odbc:test"); statement = connection.createStatement(); try { insertAttribute= connection.prepareStatement("INSERT INTO Attributes VALUES(?,?,?,?)"); insertAddAtributeToClass = connection.prepareStatement("INSERT INTO ClassAttributes(classRef,attrRef) VALUES(?,?)"); insertValuesByNewAttribute = connection.prepareStatement("INSERT INTO ObjectValues VALUES(?,?,?)"); } catch (SQLException e) { System.out.println(getConstantByName("classesPrepareStatement")); e.printStackTrace(); }
} catch (ClassNotFoundException ex) { System.out.println(CANNOT_FIND_DRIVER); ex.printStackTrace(); } catch (SQLException ex) { System.out.println(CANNOT_CREATE_STATEMENT); ex.printStackTrace(); } db = this; } public static DataBase getInstance() { return db; } public Connection getConnection() { return db.connection; } public Collection executeSearchSQL(String sql,String description) { Collection result = new ArrayList(); try { Connection cConnection = db.getConnection(); Statement sStatement = cConnection.createStatement(); ResultSet rResult = sStatement.executeQuery(sql); metaData = rResult.getMetaData(); int colCount = metaData.getColumnCount(); while (rResult.next()) { MyObject object = new MyObject(description); for (int i = 1; i < colCount+1; i++) { object.add( metaData.getColumnName(i), TypeIdent.getObjectWithType(metaData.getColumnType(i),i,rResult)); } result.add(object); } sStatement.close(); } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseExecuteSearchSQL") + sql); ex.printStackTrace(); } return result; } public synchronized void insertDataByClass(String className,Collection data) { Collection result = new ArrayList(); try { Connection cConnection = getConnection(); Statement sStatement = cConnection.createStatement(); } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseInsertDataByClass")); ex.printStackTrace(); } } public int getMaxObjectID() { Integer result = new Integer(1); Collection resultCol = executeSearchSQL("SELECT Count(*) AS MaxObjectID FROM [Object];","Max"); MyObject resultObj = (MyObject)resultCol.iterator().next(); result = (Integer)(resultObj.get("MaxObjectID")); return result.intValue(); } public int getAllAttributesCount() { Integer result = new Integer(1); Collection resultCol = executeSearchSQL("SELECT Count(*) AS MaxAttrID FROM [Attributes];","Max"); MyObject resultObj = (MyObject)resultCol.iterator().next(); result = (Integer)(resultObj.get("MaxAttrID")); return result.intValue(); } public void deleteDataByID(int id) { } public void deleteDataByClassAndID(String className, int id) { } public void deleteDataByClass(String className) { } public void readCostantsByRow() { try { Connection cConnection = db.getConnection(); Statement sStatement = cConnection.createStatement(); ResultSet rResult = sStatement.executeQuery("SELECT * From constants"); while (rResult.next()) { constants.add(rResult.getString(1),rResult.getString(2)); } sStatement.close(); } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseReadConstantsByRow")); ex.printStackTrace(); } } public String getConstantByName(String name) { Object result = constants.get(name); if (result!=null) return result.toString(); else return "null"; } public void finalize() { try { if (statement!=null) { statement.close(); } if (connection!=null) { connection.close(); } } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseFinalize")); ex.printStackTrace(); } } public synchronized int executeInsertSQL(String sql) { int result = 0; Statement sStatement = null; try { Connection cConnection = getConnection(); sStatement = cConnection.createStatement(); result = sStatement.executeUpdate(sql); } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseExecuteSQL") + sql); result = 0; ex.printStackTrace(); } finally { try { if (sStatement!=null) sStatement.close(); }catch (SQLException ex) { System.out.println(getConstantByName("dataBaseCloseException")); ex.printStackTrace(); } }
return result; } public synchronized int executeInsertSQL(PreparedStatement pStatement) { int result = 0; try { result = pStatement.executeUpdate(); } catch (SQLException ex) { System.out.println(getConstantByName("dataBaseExecuteSQL")); result = 0; ex.printStackTrace(); } finally { try { if (pStatement!=null) pStatement.close(); }catch (SQLException ex) { System.out.println(getConstantByName("dataBaseCloseException")); ex.printStackTrace(); } } return result; } public boolean addNewAttribute(int classID,String attrName, String attrDescription, int attrType) { int attrID = getAllAttributesCount() + 1; int result = 0; try { insertAttribute.setInt(1,attrID); insertAttribute.setString(2,attrName); insertAttribute.setString(3,attrDescription); insertAttribute.setInt(4,attrType); result = executeInsertSQL(insertAttribute); insertAddAtributeToClass.setInt(1,classID); insertAddAtributeToClass.setInt(2,attrID); result += executeInsertSQL(insertAddAtributeToClass); insertValuesByNewAttribute.setInt(1,100); insertValuesByNewAttribute.setInt(2,1000); insertValuesByNewAttribute.setString(3,"none"); result += executeInsertSQL(insertValuesByNewAttribute); executeInsertSQL("INSERT INTO Log(log) VALUES('" + new Date().getHours() + ":" + new Date().getMinutes() +"')");
}catch (SQLException ex) { System.out.println(getConstantByName("addNewAttributeException") + " classID=" + classID + " attrName=" + attrName); ex.printStackTrace(); } System.out.println("Inserted=" + result); return result!=0; } }
|
|