Database klasse, til at gøre mysql tilgang lettere.
Jeg har lavet et lille stykke kode, for at gøre tilgang til en mySQL database lettere, jeg ville bare høre om det jeg har lavet ville være i stand til at virke, uden jeg ville få alt for store problemer, da jeg gerne vil bruge det i sammenhæng med en java socket server.hvor godt ville denne kode virke? det er mit første forsøg, da jeg ikke rigtigt har lavet alt for meget af den type kodning før.
Database class
package dk.minsk.util.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Database {
Connection con = null;
public Database(String server, int port, String database,String user, String password) throws SQLException, ClassNotFoundException{
String url = "jdbc:mysql://"+server+":"+port+"/"+database;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
}
public Database(String server, String database, String user, String password) throws SQLException, ClassNotFoundException {
this(server, 3306, database, user, password);
}
public List<DataRow> Query(String sql){
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
List<DataRow> rrs = new ArrayList<DataRow>();
while(rs.next()){
DataRow dt = new DataRow();
for(int i = 1;i<=rsmd.getColumnCount();i++){
dt.addEntity(i, rsmd.getColumnName(i), rs.getObject(i));
}
rrs.add(dt);
}
rs.close();
st.close();
return rrs;
} catch (SQLException e) {
return null;
}
}
public boolean Execute(String sql){
try {
Statement st = con.createStatement();
Boolean rs = st.execute(sql);
return rs;
} catch (SQLException e) {
return false;
}
}
public boolean close(){
try {
con.close();
return true;
} catch (SQLException e) {
return false;
}
}
}
DataRow class
package dk.minsk.util.db;
import java.util.HashMap;
import java.util.Map;
public class DataRow {
//Gemmer Data, og kolonne navn
private Map<String,Object> map = new HashMap<String,Object>();
//Gemmer Kolonner og deres relative position "1, id" "2, bruger" "3, password"
private Map<Integer,String> columns = new HashMap<Integer,String>();
public Object getColumnValue(int i){
//bruger Overloaded getColumnValue(String name), efter at have fundet det korrekte navn for den column den skal hente fra
return getColumnValue(getColumnIndexName(i));
}
public void addEntity(int index, String column, Object item){
this.columns.put(index, column);
this.map.put(column, item);
}
public Object getColumnValue(String name){
//retunere værdien af map hvor nøglen er navnet man spørger efter
return this.map.get(name);
}
public String getColumnIndexName(int i){
//Giver navngivningen af indexes for denne Tabelrække
return this.columns.get(i);
}
// public Map<Integer,String> getColumnNames(){
// //Kontaktled til columns
// return this.columns;
// }
// public Map<String,Object> getMap() {
// //kontaktled til værdierne
// return this.map;
// }
}
Test af klasser
import java.sql.SQLException;
import java.util.List;
import dk.minsk.util.db.DataRow;
import dk.minsk.util.db.Database;
public class Test {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Database db = new Database("localhost", "testdb", "testuser", "testpassword");
List<DataRow> users = db.Query("SELECT * FROM testtable");
for(DataRow user : users){
System.out.println(user.getColumnIndexName(4)+": "+user.getColumnValue(4));
}
db.close();
}
}