/** PGConnection encapsulates a connection to the backend.
*/. It wraps around PGconn struct, which libpq uses for the same
purpose. */
public class PGConnection extends Object
{
public static final int CON_OK = 0;
public static final int CON_BAD = 1;
private int PGconnRep; // will be cast to (PGconn *) in C
private int getlineResult; // -1 = EOF, 0 = done, 1 = more
private boolean copyDone; // Set at end of getline,
// reset at endcopy
public PGConnection(String host, String port, String options,
String tty, String dbName) throws PostgresException
{
this.connectDB(host, port, options, tty, dbName);
if (this.status() != CON_OK)
{
String errString = this.errorMessage();
this.finish();
this.PGconnRep = 0;
throw (new PostgresException(errString));
}
}
protected void finalize()
{
if (PGconnRep != 0)
this.finish();
}
public synchronized PGResult exec(String query) throws PostgresException
{
int resultPtr = nativeExec(query);
if (resultPtr != 0)
return new PGResult(resultPtr);
else
{
String errString = this.errorMessage();
throw new PostgresException(errString);
}
}
public synchronized String getline()
{
if (!this.copyDone)
{
StringBuffer result = new StringBuffer(nativeGetline());
while (this.getlineResult == 1)
{
result.append(nativeGetline());
}
if (this.getlineResult == -1) // EOF
this.copyDone = true;
return new String(result);
}
else
return null;
}
/**Native methods that are _only_ called from
other methods of PGConnection*/
private synchronized native void connectDB(String host,
String port,
String options,
String tty, String dbName);
private synchronized native void finish(); // cleans up connection
private synchronized native int nativeExec(String query); // used by exec
private synchronized native String nativeGetline(); // Used by getline
/**Native methods that are called from other objects*/
public synchronized native String db() ;
public synchronized native String host();
public synchronized native String options();
public synchronized native String port();
public synchronized native String tty();
public synchronized native void reset();
public synchronized native int status();
public synchronized native String errorMessage();
public synchronized native void untrace();
public synchronized native void trace(String filename);
public synchronized native int endcopy();
public synchronized native void putline(String string);
static
{
System.loadLibrary("Jgres");
}
}
Back to article