E
Eddie Irvine
Gast
Hallo,
ich habe ein Problem:
Ich habe eine Klasse "Index", in der es zwei Methoden gibt, die eine DB-Abfrage beihnalten. Wenn ich jetzt jedoch in der Methode jeweils eine Verbindung zur DB aufbaue, dann kommt eine Fehlermeldung.
Wenn ich die Connection als Parameter an die Methoden übergebe (wie unten im Quellcode), dann kommt folgende Fehlermedlung:
Jetzt meine Fragen:
1. Kann ich die Verbindung zur DB nicht irgendwie global deklarieren, so dass sie in allen Methoden der Klasse zur Verfügung steht? Hab schon vieles versucht, aber ich habe es nicht hinbekommen...
2. Und noch was: Ist mein Programmierstil so in Ordnung (abgesehen von den fehlenden Kommentaren)? Gibt es da besondere Konventionen (Klammersetzung, Abstand innerhalb runder Klammer etc.)?
3. Braucht man einen leeren Konstruktor (wie hier Index() )?
4. Würdet ihr die Klasse genauso aufbauen?
Bin ein Java-Einsteiger, als habt ein Einsehen
Vielen Dank schonmal!
Die Klasse ist folgendermaßen aufgebaut (hier etwas vereinfacht, mit Übergabe der Connection als Parameter):
ich habe ein Problem:
Ich habe eine Klasse "Index", in der es zwei Methoden gibt, die eine DB-Abfrage beihnalten. Wenn ich jetzt jedoch in der Methode jeweils eine Verbindung zur DB aufbaue, dann kommt eine Fehlermeldung.
Wenn ich die Connection als Parameter an die Methoden übergebe (wie unten im Quellcode), dann kommt folgende Fehlermedlung:
Exception in thread "main" com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION ** .... ....
Jetzt meine Fragen:
1. Kann ich die Verbindung zur DB nicht irgendwie global deklarieren, so dass sie in allen Methoden der Klasse zur Verfügung steht? Hab schon vieles versucht, aber ich habe es nicht hinbekommen...
2. Und noch was: Ist mein Programmierstil so in Ordnung (abgesehen von den fehlenden Kommentaren)? Gibt es da besondere Konventionen (Klammersetzung, Abstand innerhalb runder Klammer etc.)?
3. Braucht man einen leeren Konstruktor (wie hier Index() )?
4. Würdet ihr die Klasse genauso aufbauen?
Bin ein Java-Einsteiger, als habt ein Einsehen
Vielen Dank schonmal!
Die Klasse ist folgendermaßen aufgebaut (hier etwas vereinfacht, mit Übergabe der Connection als Parameter):
Code:
import java.io.*;
import java.sql.*;
import java.util.StringTokenizer;
public class Index {
public Index () {
}
static void create () throws SQLException {
Connection my_con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/TextMining", "root", "" );
Statement my_stmt = my_con.createStatement();
String sqlQuery = "SELECT DocID, Title, Short_text, Text FROM `documents`";
ResultSet rSet = my_stmt.executeQuery( sqlQuery );
String token = "";
int count = 0;
while ( rSet.next() ) {
for (int i=2; i < 5; i++) {
StringTokenizer tokenizer = new StringTokenizer ( rSet.getString(i) );
while ( tokenizer.hasMoreTokens() ) {
token = tokenizer.nextToken();
token = prepare_token ( token );
if ( token.length() > 1 && !is_number ( token ) ) {
if ( !is_stopword ( token, my_con ) ) {
if ( !is_duplicate ( token, my_con ) ) {
count++;
insert_into_Index ( token, rSet.getInt(1), count, my_con );
}
}
}
}
}
}
my_con.close();
}
static private String prepare_token ( String token ) {
token = token.replace ( ",", " " );
token = token.replace ( ".", " " );
//....
return token;
}
static private boolean is_number( String token ) {
char numbers[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
boolean is_number = false;
for ( int i=0; i < token.length(); i++ ) {
for ( int j=0; j < numbers.length; j++ ) {
if ( token.charAt(i)==numbers[j] ) {
is_number = true;
break;
}
}
}
return is_number;
} //is_number()
static private boolean is_stopword ( String token, Connection my_con ) throws SQLException {
boolean is_stopword = false;
String sqlQuery = "SELECT * FROM `stopwords`";
Statement my_stmt = my_con.createStatement();
ResultSet rSet4 = my_stmt.executeQuery( sqlQuery );
while( rSet4.next() && !is_stopword ) {
//Leerzeichen entfernen
String help = rSet4.getString( "name" );
help = help.replace( " ", "" );
help = help.trim ();
//System.out.println( help );
if ( token.equals( help ) ) {
//token is a stoppword... is_stoppword wird auf TRUE gesetzt
is_stopword = true;
}
}
return is_stopword;
}
static private boolean is_duplicate ( String token, Connection my_con ) throws SQLException {
boolean is_duplicate = false;
Statement my_stmt = my_con.createStatement();
String sqlQuery = "SELECT Concept FROM `index`";
ResultSet rSet = my_stmt.executeQuery( sqlQuery );
while ( rSet.next() ) {
if ( token.equals( rSet.getString(1) ) ) {
is_duplicate = true;
}
}
return is_duplicate;
}
static private void insert_into_Index ( String token, int docID, int count, Connection my_con ) throws SQLException {
Statement my_stmt = my_con.createStatement();
String InsertString = "INSERT INTO `index` ( ConID, DocID, Concept ) VALUES ('"+count+"', '"+docID+"', '"+token+"') ";
my_stmt.executeUpdate( InsertString );
}
}