Bug fixes and added a SQLQuery class that is incomplete
This commit is contained in:
parent
f7f02123c2
commit
d2bf44365c
4 changed files with 168 additions and 11 deletions
140
src/zutil/db/SQLQuery.java
Normal file
140
src/zutil/db/SQLQuery.java
Normal file
|
|
@ -0,0 +1,140 @@
|
||||||
|
package zutil.db;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that generates a query by objects, minimizes errors
|
||||||
|
*
|
||||||
|
* @author Ziver
|
||||||
|
*/
|
||||||
|
public class SQLQuery {
|
||||||
|
protected abstract class SQLQueryItem{
|
||||||
|
public abstract void getString(StringBuilder query);
|
||||||
|
|
||||||
|
public String toString(){
|
||||||
|
StringBuilder query = new StringBuilder();
|
||||||
|
this.getString(query);
|
||||||
|
return query.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//*******************************************
|
||||||
|
// Main Types
|
||||||
|
protected class Select extends SQLQueryItem{
|
||||||
|
String[] params;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param params is the columns that you want out of the SELECT query, leave empty for all columns
|
||||||
|
*/
|
||||||
|
public Select(String ...params ){
|
||||||
|
this.params = params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getString(StringBuilder query) {
|
||||||
|
query.append("SELECT ");
|
||||||
|
if( params == null )
|
||||||
|
query.append("* ");
|
||||||
|
else{
|
||||||
|
for(int i=0; i<params.length ;i++){
|
||||||
|
query.append(params[i]);
|
||||||
|
if( i != params.length-1 )
|
||||||
|
query.append(", ");
|
||||||
|
}
|
||||||
|
query.append(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public From FROM(String table){
|
||||||
|
return new From(table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class Update extends SQLQueryItem{
|
||||||
|
public void getString(StringBuilder query) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class Delete extends SQLQueryItem{
|
||||||
|
public void getString(StringBuilder query) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//*******************************************
|
||||||
|
// Sub Types
|
||||||
|
protected class From extends SQLQueryItem{
|
||||||
|
ArrayList<String> tables;
|
||||||
|
|
||||||
|
public From(String ...tables){
|
||||||
|
this.tables = new ArrayList<String>();
|
||||||
|
for( String table : tables )
|
||||||
|
this.tables.add(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
public From NATURALJOIN(String ...tables){
|
||||||
|
return joinTable("NATURAL JOIN", tables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public From JOIN(String ...tables){
|
||||||
|
return joinTable("JOIN", tables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public From UNION(String ...tables){
|
||||||
|
return joinTable("UNION", tables);
|
||||||
|
}
|
||||||
|
|
||||||
|
private From joinTable(String type, String[] tables){
|
||||||
|
StringBuilder str = new StringBuilder();
|
||||||
|
for(int i=0; i<tables.length ;i++){
|
||||||
|
str.append(tables[i]);
|
||||||
|
if( i != tables.length-1 )
|
||||||
|
str.append(' ').append(type).append(' ');
|
||||||
|
}
|
||||||
|
str.append(' ');
|
||||||
|
this.tables.add(str.toString());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getString(StringBuilder query) {
|
||||||
|
query.append("FROM ");
|
||||||
|
if( tables.isEmpty() )
|
||||||
|
throw new RuntimeException("The FROM query item must hav atleast 1 table!");
|
||||||
|
for(int i=0; i<tables.size() ;i++){
|
||||||
|
query.append(tables.get(i));
|
||||||
|
if( i != tables.size()-1 )
|
||||||
|
query.append(", ");
|
||||||
|
}
|
||||||
|
query.append(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//*******************************************
|
||||||
|
// Condition Types
|
||||||
|
protected class Where extends SQLQueryItem{
|
||||||
|
|
||||||
|
public void getString(StringBuilder query) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//*******************************************
|
||||||
|
// Sorting Types
|
||||||
|
|
||||||
|
|
||||||
|
//*******************************************
|
||||||
|
public Select SELECT(){
|
||||||
|
return new Select();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Update UPDATE(){
|
||||||
|
return new Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Delete DELETE(){
|
||||||
|
return new Delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -188,7 +188,7 @@ public abstract class DBBean {
|
||||||
if( id != null )
|
if( id != null )
|
||||||
query.append( " WHERE id=?" );
|
query.append( " WHERE id=?" );
|
||||||
}
|
}
|
||||||
logger.finest("Save query("+c.getSimpleName()+"): "+query.toString());
|
logger.finest("Save query("+c.getName()+" id:"+this.getId()+"): "+query.toString());
|
||||||
PreparedStatement stmt = db.getPreparedStatement( query.toString() );
|
PreparedStatement stmt = db.getPreparedStatement( query.toString() );
|
||||||
// Put in the variables in the SQL
|
// Put in the variables in the SQL
|
||||||
int index = 1;
|
int index = 1;
|
||||||
|
|
@ -250,8 +250,12 @@ public abstract class DBBean {
|
||||||
if(subConfig == null)
|
if(subConfig == null)
|
||||||
subConfig = beanConfigs.get( subobj.getClass() );
|
subConfig = beanConfigs.get( subobj.getClass() );
|
||||||
// Save links in link table
|
// Save links in link table
|
||||||
String subsql = "REPLACE INTO "+subtable+" SET "+idcol+"=?, "+sub_idcol+"=?";
|
String subsql = "";
|
||||||
logger.finest("List Save query("+c.getSimpleName()+"): "+subsql);
|
if( subtable.equals(subConfig.tableName) )
|
||||||
|
subsql = "UPDATE "+subtable+" SET "+idcol+"=? WHERE "+sub_idcol+"=?";
|
||||||
|
else
|
||||||
|
subsql = "REPLACE INTO "+subtable+" SET "+idcol+"=?, "+sub_idcol+"=?";
|
||||||
|
logger.finest("List Save query("+c.getName()+" id:"+subobj.getId()+"): "+subsql);
|
||||||
PreparedStatement subStmt = db.getPreparedStatement( subsql );
|
PreparedStatement subStmt = db.getPreparedStatement( subsql );
|
||||||
subStmt.setLong(1, this.getId() );
|
subStmt.setLong(1, this.getId() );
|
||||||
subStmt.setLong(2, subobj.getId() );
|
subStmt.setLong(2, subobj.getId() );
|
||||||
|
|
@ -281,7 +285,7 @@ public abstract class DBBean {
|
||||||
throw new NoSuchElementException("ID field is null( Has the bean been saved?)!");
|
throw new NoSuchElementException("ID field is null( Has the bean been saved?)!");
|
||||||
|
|
||||||
String sql = "DELETE FROM "+config.tableName+" WHERE id=?";
|
String sql = "DELETE FROM "+config.tableName+" WHERE id=?";
|
||||||
logger.fine("Delete query("+c.getSimpleName()+"): "+sql);
|
logger.fine("Delete query("+c.getName()+" id:"+this.getId()+"): "+sql);
|
||||||
PreparedStatement stmt = db.getPreparedStatement( sql );
|
PreparedStatement stmt = db.getPreparedStatement( sql );
|
||||||
// Put in the variables in the SQL
|
// Put in the variables in the SQL
|
||||||
stmt.setObject(1, this.getId() );
|
stmt.setObject(1, this.getId() );
|
||||||
|
|
@ -305,7 +309,7 @@ public abstract class DBBean {
|
||||||
DBBeanConfig config = beanConfigs.get(c);
|
DBBeanConfig config = beanConfigs.get(c);
|
||||||
// Generate query
|
// Generate query
|
||||||
String sql = "SELECT * FROM "+config.tableName;
|
String sql = "SELECT * FROM "+config.tableName;
|
||||||
logger.fine("Load query("+c.getSimpleName()+"): "+sql);
|
logger.fine("Load All query("+c.getName()+"): "+sql);
|
||||||
PreparedStatement stmt = db.getPreparedStatement( sql );
|
PreparedStatement stmt = db.getPreparedStatement( sql );
|
||||||
// Run query
|
// Run query
|
||||||
List<T> list = DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(c, db) );
|
List<T> list = DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(c, db) );
|
||||||
|
|
@ -320,14 +324,14 @@ public abstract class DBBean {
|
||||||
* @param id is the id value of the bean
|
* @param id is the id value of the bean
|
||||||
* @return a DBBean Object with the specific id or null
|
* @return a DBBean Object with the specific id or null
|
||||||
*/
|
*/
|
||||||
public static <T extends DBBean> T load(DBConnection db, Class<T> c, Object id) throws SQLException {
|
public static <T extends DBBean> T load(DBConnection db, Class<T> c, long id) throws SQLException {
|
||||||
// Initiate a BeanConfig if there is non
|
// Initiate a BeanConfig if there is non
|
||||||
if( !beanConfigs.containsKey( c ) )
|
if( !beanConfigs.containsKey( c ) )
|
||||||
initBeanConfig( c );
|
initBeanConfig( c );
|
||||||
DBBeanConfig config = beanConfigs.get(c);
|
DBBeanConfig config = beanConfigs.get(c);
|
||||||
// Generate query
|
// Generate query
|
||||||
String sql = "SELECT * FROM "+config.tableName+" WHERE id=? LIMIT 1";
|
String sql = "SELECT * FROM "+config.tableName+" WHERE id=? LIMIT 1";
|
||||||
logger.fine("Load query("+c.getSimpleName()+"): "+sql);
|
logger.fine("Load query("+c.getName()+" id:"+id+"): "+sql);
|
||||||
PreparedStatement stmt = db.getPreparedStatement( sql );
|
PreparedStatement stmt = db.getPreparedStatement( sql );
|
||||||
stmt.setObject(1, id );
|
stmt.setObject(1, id );
|
||||||
// Run query
|
// Run query
|
||||||
|
|
@ -361,7 +365,7 @@ public abstract class DBBean {
|
||||||
}
|
}
|
||||||
query.delete( query.length()-2, query.length());
|
query.delete( query.length()-2, query.length());
|
||||||
query.append(")");
|
query.append(")");
|
||||||
logger.fine("Create query("+c.getSimpleName()+"): "+sql.toString());
|
logger.fine("Create query("+c.getName()+"): "+sql.toString());
|
||||||
PreparedStatement stmt = sql.getPreparedStatement( sql.toString() );
|
PreparedStatement stmt = sql.getPreparedStatement( sql.toString() );
|
||||||
|
|
||||||
// Execute the SQL
|
// Execute the SQL
|
||||||
|
|
|
||||||
|
|
@ -260,9 +260,9 @@ public class FileUtil {
|
||||||
* @return The extension
|
* @return The extension
|
||||||
*/
|
*/
|
||||||
public static String fileExtension(String file){
|
public static String fileExtension(String file){
|
||||||
if(file.lastIndexOf(".")==-1)
|
if( file == null || file.lastIndexOf(".") == -1 )
|
||||||
return "";
|
return "";
|
||||||
return file.substring(file.lastIndexOf(".")+1,file.length());
|
return file.substring(file.lastIndexOf(".")+1, file.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,12 @@ import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
|
|
@ -76,6 +78,7 @@ public abstract class AjaxFileUpload extends HttpServlet {
|
||||||
|
|
||||||
public static File TEMPFILE_PATH = null;
|
public static File TEMPFILE_PATH = null;
|
||||||
public static String JAVASCRIPT = "";
|
public static String JAVASCRIPT = "";
|
||||||
|
public static HashSet<String> ALLOWED_EXTENSIONS = new HashSet<String>();
|
||||||
|
|
||||||
public void init(ServletConfig config) throws ServletException {
|
public void init(ServletConfig config) throws ServletException {
|
||||||
super.init(config);
|
super.init(config);
|
||||||
|
|
@ -95,6 +98,14 @@ public abstract class AjaxFileUpload extends HttpServlet {
|
||||||
else
|
else
|
||||||
TEMPFILE_PATH = new File( config.getInitParameter("TEMP_PATH") );
|
TEMPFILE_PATH = new File( config.getInitParameter("TEMP_PATH") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read allowed file types
|
||||||
|
if(config.getInitParameter("ALLOWED_EXTENSIONS") != null){
|
||||||
|
String[] tmp = config.getInitParameter("TEMP_PATH").split(",");
|
||||||
|
for( String ext : tmp ){
|
||||||
|
ALLOWED_EXTENSIONS.add(ext.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
@ -179,6 +190,8 @@ public abstract class AjaxFileUpload extends HttpServlet {
|
||||||
FileItemIterator it = upload.getItemIterator( request );
|
FileItemIterator it = upload.getItemIterator( request );
|
||||||
while( it.hasNext() ) {
|
while( it.hasNext() ) {
|
||||||
FileItemStream item = it.next();
|
FileItemStream item = it.next();
|
||||||
|
if( !ALLOWED_EXTENSIONS.contains( FileUtil.fileExtension(item.getName()) ))
|
||||||
|
throw new Exception("Filetype "+FileUtil.fileExtension(item.getName())+" not allowed!");
|
||||||
listener.setFileName( item.getName() );
|
listener.setFileName( item.getName() );
|
||||||
FileItem fileItem = factory.createItem(item.getFieldName(),
|
FileItem fileItem = factory.createItem(item.getFieldName(),
|
||||||
item.getContentType(), item.isFormField(), item.getName());
|
item.getContentType(), item.isFormField(), item.getName());
|
||||||
|
|
@ -204,7 +217,7 @@ public abstract class AjaxFileUpload extends HttpServlet {
|
||||||
// Done
|
// Done
|
||||||
listener.setStatus( Status.Done );
|
listener.setStatus( Status.Done );
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
logger.log(Level.WARNING, null, e);
|
||||||
listener.setStatus(Status.Error);
|
listener.setStatus(Status.Error);
|
||||||
listener.setFileName("");
|
listener.setFileName("");
|
||||||
listener.setMessage( e.getMessage() );
|
listener.setMessage( e.getMessage() );
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue