From 47cfb895fb23a99f0254f16ab700625715e0d4c1 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Sat, 12 Dec 2015 01:34:26 +0100 Subject: [PATCH] Added compatibility for SQLite to DBBean --- Zutil.jar | Bin 1185635 -> 1186081 bytes src/zutil/db/DBConnection.java | 34 +++++++++++++++--- src/zutil/db/bean/DBBean.java | 62 +++++++++++++++++++++------------ 3 files changed, 68 insertions(+), 28 deletions(-) diff --git a/Zutil.jar b/Zutil.jar index 54a3c41938717f40f1d802b948851e6fcd1f8f95..f20f21291ade898f436f0d86068181adda4ee8cb 100755 GIT binary patch delta 19172 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 S9RP4K<1{EfWJ2)T_WuF38Qi)6 delta 18680 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 diff --git a/src/zutil/db/DBConnection.java b/src/zutil/db/DBConnection.java index dc38bc7..f606673 100755 --- a/src/zutil/db/DBConnection.java +++ b/src/zutil/db/DBConnection.java @@ -43,8 +43,9 @@ public class DBConnection implements Closeable{ MySQL, SQLite } + // The connection - private Connection conn = null; + private Connection conn; // The pool that this connection belongs to private DBConnectionPool pool; @@ -57,8 +58,8 @@ public class DBConnection implements Closeable{ public DBConnection(String jndi) throws NamingException, SQLException{ InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/"+jndi); - conn = ds.getConnection(); - } + this.conn = ds.getConnection(); + } /** * Creates an Connection to a MySQL server @@ -110,7 +111,7 @@ public class DBConnection implements Closeable{ * @param db is the DB type * @return the protocol name of the DBMS */ - public String initDriver(DBMS db) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ + public static String initDriver(DBMS db) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ switch(db){ case MySQL: Class.forName("com.mysql.jdbc.Driver").newInstance(); @@ -129,12 +130,35 @@ public class DBConnection implements Closeable{ */ public long getLastInsertID(){ try{ - return exec("SELECT LAST_INSERT_ID()", new SimpleSQLResult()).longValue(); + return exec("SELECT LAST_INSERT_ID()", new SimpleSQLResult()); }catch(SQLException e){ logger.log(Level.WARNING, null, e); } return -1; } + /** + * @return the last inserted id or -1 if there was an error + */ + public long getLastInsertID(Statement stmt){ + ResultSet result = null; + try{ + result = stmt.getGeneratedKeys(); + if(result != null){ + return new SimpleSQLResult().handleQueryResult(stmt, result); + } + }catch(SQLException e){ + logger.log(Level.WARNING, null, e); + } finally { + if(result != null) { + try { + result.close(); + } catch (SQLException e) { + logger.log(Level.WARNING, null, e); + } + } + } + return -1; + } /** * Runs a Prepared Statement.
diff --git a/src/zutil/db/bean/DBBean.java b/src/zutil/db/bean/DBBean.java index d662215..35ae080 100755 --- a/src/zutil/db/bean/DBBean.java +++ b/src/zutil/db/bean/DBBean.java @@ -212,28 +212,44 @@ public abstract class DBBean { Long id = this.getId(); // Generate the SQL StringBuilder query = new StringBuilder(); - if( id == null ) - query.append("INSERT INTO "); - else query.append("UPDATE "); - query.append( config.tableName ); + if( id == null ) { + query.append("INSERT INTO ").append( config.tableName ); + query.append( " (" ); + for( Field field : config.fields ){ + if( !List.class.isAssignableFrom(field.getType()) ){ + query.append(" "); + query.append(field.getName()); + query.append(","); + } + } + if(query.charAt(query.length()-1) == ',') + query.deleteCharAt(query.length()-1); + query.append( ") VALUES(" ); + for( Field field : config.fields ){ + query.append( "?," ); + } + if(query.charAt(query.length()-1) == ',') + query.deleteCharAt(query.length()-1); + query.append( ")" ); + } + else{ + query.append("UPDATE ").append( config.tableName ); + query.append( " SET" ); + for( Field field : config.fields ){ + if( !List.class.isAssignableFrom(field.getType()) ){ + query.append(" "); + query.append(field.getName()); + query.append("=?,"); + } + } + if(query.charAt(query.length()-1) == ',') + query.deleteCharAt(query.length()-1); + query.append(" WHERE ").append(config.idColumn).append("=?"); + } - StringBuilder params = new StringBuilder(); - for( Field field : config.fields ){ - if( !List.class.isAssignableFrom(field.getType()) ){ - params.append(" "); - params.append(field.getName()); - params.append("=?,"); - } - } - if( params.length() > 0 ){ - params.delete( params.length()-1, params.length()); - query.append( " SET" ); - query.append( params ); - if( id != null ) - query.append(" WHERE ").append(config.idColumn).append("=?"); - } - logger.finest("Save query("+c.getName()+" id:"+this.getId()+"): "+query.toString()); - PreparedStatement stmt = db.getPreparedStatement( query.toString() ); + String sql = query.toString(); + logger.finest("Save query("+c.getName()+" id:"+this.getId()+"): "+ sql); + PreparedStatement stmt = db.getPreparedStatement( sql ); // Put in the variables in the SQL int index = 1; for(Field field : config.fields){ @@ -253,7 +269,7 @@ public abstract class DBBean { // A list of DBBeans else if( List.class.isAssignableFrom( field.getType() ) && field.getAnnotation( DBLinkTable.class ) != null){ - // DO NOTING + // Du stuff later } // Normal field else{ @@ -268,7 +284,7 @@ public abstract class DBBean { // Execute the SQL DBConnection.exec(stmt); if( id == null ) - this.id = db.getLastInsertID(); + this.id = db.getLastInsertID(stmt); // Save the list, after we get the object id for(Field field : config.fields){