diff --git a/src/main/java/xyz/wbsite/wsqlite/Client.java b/src/main/java/xyz/wbsite/wsqlite/Client.java index 1f98fb8..1aae467 100644 --- a/src/main/java/xyz/wbsite/wsqlite/Client.java +++ b/src/main/java/xyz/wbsite/wsqlite/Client.java @@ -2,6 +2,7 @@ package xyz.wbsite.wsqlite; import java.io.File; import java.sql.*; +import java.sql.Date; /** * xyz.wbsite.wsqlite.Client @@ -11,7 +12,6 @@ import java.sql.*; public class Client { Connection connection; - Statement statement; ResultSet resultSet; String dbFilePath; @@ -38,7 +38,7 @@ public class Client { */ public void execute(String sql) throws SQLException, ClassNotFoundException { try { - getStatement().execute(sql); + executeUpdate(sql); } finally { destroyed(); } @@ -51,27 +51,61 @@ public class Client { * @throws SQLException * @throws ClassNotFoundException */ - public ResultSet executeQuery(String sql) throws SQLException, ClassNotFoundException { - return getStatement().executeQuery(sql); + public ResultSet executeQuery(String sql, Object... args) throws SQLException, ClassNotFoundException { + PreparedStatement preparedStatement = getConnection().prepareStatement(sql); + setArg(preparedStatement, args); + return preparedStatement.executeQuery(); } /** - * 执行sql更新语句 + * 执行sql语句 * - * @param sqls + * @param sql * @throws SQLException * @throws ClassNotFoundException */ - public int executeUpdate(String... sqls) throws SQLException, ClassNotFoundException { - int count = 0; + public int executeUpdate(String sql, Object... args) throws SQLException, ClassNotFoundException { try { - for (String sql : sqls) { - count += getStatement().executeUpdate(sql); - } + PreparedStatement preparedStatement = getConnection().prepareStatement(sql); + setArg(preparedStatement, args); + return preparedStatement.executeUpdate(); } finally { destroyed(); } - return count; + } + + private void setArg(PreparedStatement ps, Object... args) throws SQLException { + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + + if (arg == null) { + + } else if (arg instanceof String) { + ps.setString(i + 1, (String) arg); + } else if (arg instanceof Date) { + ps.setDate(i + 1, (Date) arg); + } else if (arg instanceof Time) { + ps.setTime(i + 1, (Time) arg); + } else if (arg instanceof java.util.Date) { + ps.setLong(i + 1, ((java.util.Date) arg).getTime()); + } else if (arg instanceof Boolean) { + ps.setBoolean(i + 1, (Boolean) arg); + } else if (arg instanceof Byte) { + ps.setByte(i + 1, (Byte) arg); + } else if (arg instanceof Short) { + ps.setShort(i + 1, (Short) arg); + } else if (arg instanceof Integer) { + ps.setInt(i + 1, (int) arg); + } else if (arg instanceof Long) { + ps.setLong(i + 1, (long) arg); + } else if (arg instanceof Float) { + ps.setFloat(i + 1, (float) arg); + } else if (arg instanceof Double) { + ps.setDouble(i + 1, (double) arg); + } else if (arg instanceof byte[]) { + ps.setBytes(i + 1, (byte[]) arg); + } + } } /** @@ -89,16 +123,6 @@ public class Client { return connection; } - /** - * 获取数据库Statement对象 - */ - Statement getStatement() throws SQLException, ClassNotFoundException { - if (null == statement) { - statement = getConnection().createStatement(); - } - return statement; - } - /** * 数据库资源关闭和释放 */ @@ -109,10 +133,6 @@ public class Client { resultSet = null; } - if (null != statement) { - statement.close(); - statement = null; - } if (null != connection) { connection.close(); connection = null; diff --git a/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java b/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java index b62c96c..dc90779 100644 --- a/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java +++ b/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java @@ -5,10 +5,7 @@ import xyz.wbsite.wsqlite.anonation.TableField; import java.io.File; import java.lang.reflect.Field; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * xyz.wbsite.wsqlite.Client @@ -67,6 +64,9 @@ public class ObjectClient extends Client { } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { sql.append(f.getName().toUpperCase()); sql.append(" BLOB,"); + } else if (f.getType() == Date.class) { + sql.append(f.getName().toUpperCase()); + sql.append(" TIMESTAMP,"); } } } @@ -94,41 +94,14 @@ public class ObjectClient extends Client { StringBuffer fieldsSql = new StringBuffer(); StringBuffer valueSql = new StringBuffer(); + Object[] values = new Object[fs.size()]; for (int i = 0; i < fs.size(); i++) { Field f = fs.get(i); f.setAccessible(true); fieldsSql.append(f.getName().toUpperCase()); - - Object value = f.get(po); - if (value == null) { - valueSql.append("NULL"); - } else if (f.getType() == String.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Boolean.class || f.getType() == boolean.class) { - valueSql.append("'"); - valueSql.append(String.valueOf(value)); - valueSql.append("'"); - } else if (f.getType() == Byte.class || f.getType() == byte.class || - f.getType() == Short.class || f.getType() == short.class || - f.getType() == Character.class || f.getType() == char.class || - f.getType() == Integer.class || f.getType() == int.class || - f.getType() == Long.class || f.getType() == long.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Float.class || f.getType() == float.class || - f.getType() == Double.class || f.getType() == double.class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } + valueSql.append("?"); + values[i] = f.get(po); if (i != fs.size() - 1) { fieldsSql.append(","); valueSql.append(","); @@ -140,7 +113,7 @@ public class ObjectClient extends Client { sql.append(valueSql); sql.append(")"); System.out.println("SQL ==> " + sql.toString()); - return executeUpdate(sql.toString()); + return executeUpdate(sql.toString(), values); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -182,49 +155,21 @@ public class ObjectClient extends Client { if (aClass == null) { System.err.println(poClass.getName() + " not found."); } else { + //获取字段列表 + List fs = getFields(poClass); + StringBuffer sql = new StringBuffer(); + Object[] values = new Object[fs.size()]; sql.append("UPDATE "); sql.append(aClass.getSimpleName()); sql.append(" SET "); - //获取字段列表 - List fs = getFields(poClass); - for (int i = 0; i < fs.size(); i++) { Field f = fs.get(i); f.setAccessible(true); sql.append(f.getName()); - sql.append(" = "); - - Object value = f.get(po); - if (value == null) { - sql.append("NULL"); - } else if (f.getType() == String.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Boolean.class || f.getType() == boolean.class) { - sql.append("'"); - sql.append(String.valueOf(value)); - sql.append("'"); - } else if (f.getType() == Byte.class || f.getType() == byte.class || - f.getType() == Short.class || f.getType() == short.class || - f.getType() == Character.class || f.getType() == char.class || - f.getType() == Integer.class || f.getType() == int.class || - f.getType() == Long.class || f.getType() == long.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Float.class || f.getType() == float.class || - f.getType() == Double.class || f.getType() == double.class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { - sql.append("'"); - sql.append(value); - sql.append("'"); - } + sql.append(" = ?"); + values[i] = f.get(po); if (i != fs.size() - 1) { sql.append(","); } @@ -240,7 +185,7 @@ public class ObjectClient extends Client { } System.out.println("SQL ==> " + sql.toString()); - return executeUpdate(sql.toString()); + return executeUpdate(sql.toString(), values); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -350,9 +295,12 @@ public class ObjectClient extends Client { } else if (f.getType() == Byte[].class || f.getType() == byte[].class) { byte[] v = resultSet.getBytes(f.getName()); f.set(o, v); + } else if (f.getType() == Date.class) { + Date v = resultSet.getDate(f.getName()); + f.set(o, v); } else { - String string = resultSet.getString(f.getName()); - f.set(o, string); + String v = resultSet.getString(f.getName()); + f.set(o, v); } } rsList.add(o); diff --git a/src/main/java/xyz/wbsite/wsqlite/entity/Example.java b/src/main/java/xyz/wbsite/wsqlite/entity/Example.java index f6ceec8..c6530b9 100644 --- a/src/main/java/xyz/wbsite/wsqlite/entity/Example.java +++ b/src/main/java/xyz/wbsite/wsqlite/entity/Example.java @@ -2,6 +2,8 @@ package xyz.wbsite.wsqlite.entity; import xyz.wbsite.wsqlite.anonation.TableField; +import java.util.Date; + public class Example { @TableField(40) @@ -15,8 +17,6 @@ public class Example { @TableField private short s1; @TableField - private char c1; - @TableField private int age; @TableField private long id; @@ -24,6 +24,8 @@ public class Example { private float f1; @TableField private double d1; + @TableField + private Date date; public String getS() { return s; @@ -65,14 +67,6 @@ public class Example { this.s1 = s1; } - public char getC1() { - return c1; - } - - public void setC1(char c1) { - this.c1 = c1; - } - public int getAge() { return age; } @@ -104,4 +98,12 @@ public class Example { public void setD1(double d1) { this.d1 = d1; } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } } diff --git a/src/test/java/WsqliteTest.java b/src/test/java/WsqliteTest.java index f667515..d57527f 100644 --- a/src/test/java/WsqliteTest.java +++ b/src/test/java/WsqliteTest.java @@ -3,8 +3,8 @@ import xyz.wbsite.wsqlite.entity.Example; import java.io.File; import java.sql.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.Date; public class WsqliteTest { public static void main(String[] args) { @@ -17,14 +17,14 @@ public class WsqliteTest { Example example = new Example(); example.setS("wangbing"); example.setB(false); - example.setBs(null); + example.setBs(new byte[]{-1, 0, 1}); example.setB1((byte) 1); example.setS1((short) 1); - example.setC1((char) 1); example.setAge(1); example.setId(1L); example.setF1(0.1f); example.setD1(0.1); + example.setDate(new Date()); h.insert(Example.class, example); @@ -35,14 +35,14 @@ public class WsqliteTest { System.out.println("测试 update"); example.setS("wangbing"); example.setB(false); - example.setBs(null); + example.setBs(new byte[]{-2, 0, 2}); example.setB1((byte) 1); example.setS1((short) 1); - example.setC1((char) 1); example.setAge(1); example.setId(1L); example.setF1(0.1f); example.setD1(0.1); + example.setDate(new Date()); int update = h.update(Example.class, example); System.out.println(update);