Clemens Schalkw
Gebruiker
- Lid geworden
- 5 dec 2007
- Berichten
- 166
Ik probeer methods te schrijven die kunnen zorgen voor het ophalen van gegevens uit de database.
Opzich lukt het prima om iets uit de database te halen, maar om er een method voor te schrijven die ik dan kan hergebruiken lukt me nog even niet.
Als ik een method schrijf die simpele gegevens uit een database moet halen (niet met WHERE en zeker niet met JOIN) hoe werkt dat dan.
De volgende method staat in mijn Database.java:
Nou dacht ik eerst dat ik misschien ipv void een ResultSet moet returnen, maar ik krijg er met geen mogelijkheid data uit.
Dit staat in een andere class
[EDIT]
Ik heb nog even verder gekeken en heb iets gevonden op javaworld.com.
Ik krijg een SQLException in main "Illigal operation on empty result set".
Het gaat fout in de method:
// Retrieve data
fieldvalues_out = acc.select( fieldnames, "test_id", (new Integer(0)) );
De hele code is:
[/EDIT]
Opzich lukt het prima om iets uit de database te halen, maar om er een method voor te schrijven die ik dan kan hergebruiken lukt me nog even niet.
Als ik een method schrijf die simpele gegevens uit een database moet halen (niet met WHERE en zeker niet met JOIN) hoe werkt dat dan.
De volgende method staat in mijn Database.java:
Code:
public void selectQuery(String table, String[] column) {
try {
statement = connection.createStatement();
result = statement.executeQuery("SELECT" + column + " FROM " + table);
} catch (SQLException ex) {
System.out.println(ex.getCause());
}
}
Nou dacht ik eerst dat ik misschien ipv void een ResultSet moet returnen, maar ik krijg er met geen mogelijkheid data uit.
Dit staat in een andere class
Code:
public class SaveAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Database d = new Database();
d.jdbcConnect();
d.selectQuery("test", "test_id, test_name");
}
}
[EDIT]
Ik heb nog even verder gekeken en heb iets gevonden op javaworld.com.
Ik krijg een SQLException in main "Illigal operation on empty result set".
Het gaat fout in de method:
// Retrieve data
fieldvalues_out = acc.select( fieldnames, "test_id", (new Integer(0)) );
De hele code is:
Code:
import java.util.*;
import java.io.*;
import java.sql.*;
import java.math.*;
public class AccessMethods {
private String DRIVER;
private String URL;
private String USER;
private String PASSWD;
private String TABLENAME;
public AccessMethods(String driver, String url, String username,
String passwd, String tablename) {
DRIVER = driver;
URL = url;
USER = username;
PASSWD = passwd;
TABLENAME = tablename;
}
public static void main(String args[]) throws Exception {
// I changed access information like Driver and username / password
AccessMethods acc = new AccessMethods( "MyDriverPath",
"jdbc:mysql://localhost/clemens",
"username",
"password",
"test" );
String [] fieldnames = { "test_id", "test_name" };
// fieldvalues_in contains the data to put in the database
Object [] fieldvalues_in = new Object[fieldnames.length];
// fieldvalues_out contains the data retrieved from the database
Object [] fieldvalues_out;
// Make up some data
fieldvalues_in[0] = new Integer(0);
fieldvalues_in[1] = new String("Dummy Article");
// Store data in database
acc.insert( fieldnames, fieldvalues_in );
// Retrieve data
fieldvalues_out = acc.select( fieldnames, "test_id", (new Integer(0)) );
// display
System.out.println( ((Integer) fieldvalues_out[0]).toString() );
System.out.println( ((String) fieldvalues_out[1]) );
return;
}
// Establish the JDBC connection object to the database
private Connection getConn() throws Exception {
Class.forName(DRIVER);
Connection conn = DriverManager.getConnection(URL, USER, PASSWD);
return conn;
}
// Assembly "arg1,arg2,...argn" type of string to use in
// SQL statements from the input array of strings.
public String getSQLList(String [] fields) throws Exception {
StringBuffer result = new StringBuffer();
for (int i = 0; i < fields.length -1; i++) {
result.append( fields[i] );
result.append( " , " );
}
result.append( fields[fields.length-1] );
return result.toString();
}
public boolean insert (String [] fieldnames,
Object [] fieldvalues) throws Exception {
// Generate an array of question marks for the SQL template parameters
String [] paras = new String[fieldnames.length];
for (int i = 0; i < fieldnames.length; i++) {
paras[i] = "?";
}
// Prepare the template
String SQLstr = "INSERT INTO " + TABLENAME + " ( " +
getSQLList(fieldnames) + " ) VALUES ( " +
getSQLList(paras) + " ) ";
Connection conn = getConn();
PreparedStatement pstmt = conn.prepareStatement(SQLstr);
// set parameter values
for (int i = 0; i < fieldnames.length; i++) {
pstmt.setObject(i + 1, fieldvalues[i]);
}
// execute SQL statement
boolean succ = pstmt.execute();
pstmt.close();
conn.close();
return succ;
}
public Object [] select (String [] fieldnames, String idFieldname,
Object idValue) throws Exception {
Object [] result = new Object [fieldnames.length];
// Prepared the template
String SQLstr = "SELECT " + getSQLList(fieldnames) + " FROM " +
TABLENAME + " WHERE " + idFieldname + " = ?";
Connection conn = getConn();
PreparedStatement pstmt = conn.prepareStatement(SQLstr);
// set parameter value
pstmt.setObject(1, idValue);
// execute SQL statement
ResultSet rs = pstmt.executeQuery();
// go to the first record
rs.next();
for ( int i = 0; i < fieldnames.length; i++) {
result[i] = rs.getObject(i+1);
}
rs.close();
pstmt.close();
conn.close();
return result;
}
}
[/EDIT]
Laatst bewerkt: