우리는 현재 응용 프로그램이 특정 형식의 파일에서 입력을 받아서 MySQL에 테이블을 만들고 데이터로 채우는 학교 프로젝트를 진행하고 있습니다. 이것을 코딩하는 동안 나는 많은 의존성을 사용했다는 것을 알았습니다. 이전에 읽은 것은 나쁜 습관입니다. 커플 링 줄이기는 아직 큰 주제가 아닙니다. 주변을 검색해 보면 인터페이스에 대한 대부분의 답변을 발견했습니다. 나는 그들이 나를 위해 충분한 대답이 분명하다고 생각하지 않으며, 반복적 인 방법을 사용하지 않으면 도움이되지 않는다.JDBC - loose coupling
코드에서 커플 링을 느슨하게 할 수 있습니까? 어떤 좋은 일반적인 팁과 트릭?
PS : 무효 showTable 및 stringBuilderShowTable 구현,도 작동하지 않습니다.
public class DBService {
DBConnection dbc;
Connection con;
//Statement stmt;
public DBService()
{
dbc = new DBConnection();
con = dbc.getConnection();
}
public void copyFile(String fileName, String tableName) throws SQLException {
DataManager dm = new DataManager();
dm.sortData(fileName);
createTable(fileName, tableName, con);
insertData(fileName, tableName, con);
}
public void showTable (String tableName)
{
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery
("SELECT * FROM " + tableName);
System.out.println("id name job");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String job = rs.getString("job");
System.out.println(id+" "+name+" "+job);
}
}
catch(SQLException e){
System.out.println("SQL exception occured" + e);
}
}
public void createTable(String fileName, String tableName, Connection con) throws SQLException {
try (Statement stmt2 = (Statement) con.createStatement())
{
String query1 = stringBuilderMeta(fileName, tableName);
stmt2.execute(query1);
if (stmt2.getWarnings() == null)
{
System.out.println("\n### Table " + tableName + " is created");
} else
{
System.out.println("### " + stmt2.getWarnings());
}
stmt2.close();
}
}
public void insertData(String fileName, String tableName, Connection con) throws SQLException
{
try (Statement stmt = (Statement) con.createStatement())
{
String query1 = stringBuilderData(fileName, tableName);
stmt.execute(query1);
if (stmt.getWarnings() == null)
{
System.out.println("\n### Table " + tableName + " has been successfully filled");
} else
{
System.out.println("### " + stmt.getWarnings());
}
stmt.close();
}
}
public String stringBuilderMeta(String fileName, String tableName)
{
DataManager dm = new DataManager();
dm.sortData(fileName);
StringBuilder builder = new StringBuilder();
builder.append("" + "Create table ").append(tableName).append(" (\n");
for (int i = 0; i < dm.fileMetaData.size();i++) {
DataFromFile d = (DataFromFile)dm.fileMetaData.get(i);
String test = d.getName();
String test2 = d.getDatatype();
String test3 = d.getLimit();
if(i < (dm.fileMetaData.size()-1))
{
builder.append(test).append(" ").append(test2).append(" (").append(test3).append("),\n");
}
else{
builder.append(test).append(" ").append(test2).append(" (").append(test3).append(")\n");
}
}
builder.append(");");
String string = builder.toString();
return string;
}
public String stringBuilderShowTable(String fileName, String tableName)
{
DataManager dm = new DataManager();
dm.sortData(fileName);
StringBuilder builder = new StringBuilder();
//builder.append("" + "SELECT * FROM " + tableName + ""
for (int i = 0; i < dm.fileMetaData.size();i++) {
DataFromFile d = (DataFromFile)dm.fileMetaData.get(i);
String test = d.getName();
String test2 = d.getDatatype();
String test3 = d.getLimit();
if(i < (dm.fileMetaData.size()-1))
{
builder.append(test).append(" ").append(test2).append(" (").append(test3).append("),\n");
}
else{
builder.append(test).append(" ").append(test2).append(" (").append(test3).append(")\n");
}
}
builder.append(");");
String string = builder.toString();
System.out.print(string);
return string;
}
public String stringBuilderData(String fileName, String tableName)
{
DataManager dm = new DataManager();
dm.sortData(fileName);
int counter = 0;
int counter2 = dm.reader.wordsPerLine;
StringBuilder builder = new StringBuilder();
for(int j = 0; j < dm.boo; j++)
{
builder.append("" + "INSERT INTO ").append(tableName).append (" (");
for (int i = 0; i < dm.fileMetaData.size(); i++) {
DataFromFile d = (DataFromFile) dm.fileMetaData.get(i);
if (i < (dm.fileMetaData.size() - 1)) {
builder.append(d.getName()).append(", ");
} else {
builder.append(d.getName());
}
}
builder.append(")\n").append("VALUES (");
for (int i = counter; i < counter2; i++) {
if (i < (counter2 - 1)) {
builder.append("'" + dm.fileData.get(i) + "'" + ",");
} else {
builder.append("'" + dm.fileData.get(i) + "'");
}
counter++;
}
counter2 = counter2+dm.reader.wordsPerLine;
builder.append(");\n");
}
String string = builder.toString();
System.out.print(string);
return string;
}
}
정교한 설명을 작성해 주셔서 감사합니다. 나는 이제 의존성 주입을 찾아 보았고 유용한 설명과 예제를 발견했다. 의견의 마지막 부분을 찾으려면 :이 프로젝트는 학기의 뒷부분에서 사용됩니다. 그래서 더 추상적이고 더 느슨한 결합을 사용하면 너무 많이 다시 작성하지 않아도됩니다. 다시 귀하의 회신에 감사드립니다. –