diff --git a/src/main/java/RowMapper.java b/src/main/java/RowMapper.java deleted file mode 100644 index 2a53630..0000000 --- a/src/main/java/RowMapper.java +++ /dev/null @@ -1,6 +0,0 @@ -import java.sql.ResultSet; -import java.sql.SQLException; - -public interface RowMapper { - public abstract T mapRow(ResultSet rs, int index) throws SQLException; -} diff --git a/src/main/java/SqliteClient.java b/src/main/java/SqliteClient.java index 408ac79..ffd4d6f 100644 --- a/src/main/java/SqliteClient.java +++ b/src/main/java/SqliteClient.java @@ -19,7 +19,7 @@ public class SqliteClient { private Statement statement; private ResultSet resultSet; private String dbFilePath; - private List obList = new ArrayList<>(); + private Map classMap = new HashMap<>(); /** * 构造函数 @@ -31,10 +31,13 @@ public class SqliteClient { */ public SqliteClient(File dbFile, List classList) throws ClassNotFoundException, SQLException { this.dbFilePath = dbFile.getAbsolutePath(); - this.obList.addAll(classList); + for (Class aClass : classList) { + classMap.put(aClass.getName(), aClass); + } if (!dbFile.exists()) { connection = getConnection(); - for (Class object : obList) { + for (String key : classMap.keySet()) { + Class object = classMap.get(key); StringBuffer sql = new StringBuffer(); String name = object.getSimpleName(); @@ -54,139 +57,192 @@ public class SqliteClient { sql.replace(sql.length() - 1, sql.length(), ""); sql.append(")"); - System.out.println(sql.toString()); + System.out.println("SQL ==> " + sql.toString()); execute(sql.toString()); } } } - public void insert(T t) throws SQLException, ClassNotFoundException { + public void insert(Class poClass, T po) throws SQLException, ClassNotFoundException { try { - for (Class aClass : obList) { - if (t.getClass() == aClass) { - StringBuffer sql = new StringBuffer(); - String tableName = aClass.getSimpleName(); - sql.append("INSERT INTO "); - sql.append(tableName.toUpperCase()); - sql.append("("); - - Map keyValues = new HashMap<>(); - for (Field f : aClass.getDeclaredFields()) { - if (f.isAnnotationPresent(Varchar.class)) { - try { - f.setAccessible(true); - keyValues.put(f.getName().toUpperCase(), f.get(t)); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } + Class aClass = classMap.get(poClass.getName()); + if (aClass == null) { + System.err.println(poClass.getName() + " not found."); + } else { + StringBuffer sql = new StringBuffer(); + sql.append("INSERT INTO "); + sql.append(aClass.getSimpleName().toUpperCase()); + sql.append("("); + + //获取字段列表 + List fs = new ArrayList<>(); + for (Field f : poClass.getDeclaredFields()) { + if (f.isAnnotationPresent(Varchar.class)) { + f.setAccessible(true); + fs.add(f); } + } - StringBuffer fieldsSql = new StringBuffer(); - StringBuffer valueSql = new StringBuffer(); + StringBuffer fieldsSql = new StringBuffer(); + StringBuffer valueSql = new StringBuffer(); - List argsList = new ArrayList<>(); - for (String key : keyValues.keySet()) { - fieldsSql.append(key.toUpperCase()); - fieldsSql.append(","); + for (int i = 0; i < fs.size(); i++) { + Field f = fs.get(i); + fieldsSql.append(f.getName().toUpperCase()); - Object value = keyValues.get(key); - if (value instanceof String) { - valueSql.append("'"); - valueSql.append(value); - valueSql.append("'"); - } else { - valueSql.append(value); - } - valueSql.append(","); - } - String[] args = new String[argsList.size()]; - argsList.toArray(args); - - if (",".equals(fieldsSql.substring(fieldsSql.length() - 1, fieldsSql.length()))) { - fieldsSql.replace(fieldsSql.length() - 1, fieldsSql.length(), ""); + Object value = f.get(po); + if (value instanceof String) { + valueSql.append("'"); + valueSql.append(value); + valueSql.append("'"); + } else { + valueSql.append(value); } - if (",".equals(valueSql.substring(valueSql.length() - 1, valueSql.length()))) { - valueSql.replace(valueSql.length() - 1, valueSql.length(), ""); + if (i != fs.size() - 1) { + fieldsSql.append(","); + valueSql.append(","); } - sql.append(fieldsSql); - sql.append(") VALUES ("); - sql.append(valueSql); - sql.append(")"); - System.out.println(sql.toString()); - executeUpdate(sql.toString()); } + + sql.append(fieldsSql); + sql.append(") VALUES ("); + sql.append(valueSql); + sql.append(")"); + System.out.println("SQL ==> " + sql.toString()); + executeUpdate(sql.toString()); } + } catch (IllegalAccessException e) { + e.printStackTrace(); } finally { destroyed(); } } - public int delete(T t, String... wheres) throws SQLException, ClassNotFoundException { - for (Class aClass : obList) { - if (t.getClass() == aClass) { + public int delete(Class poClass, String... wheres) throws SQLException, ClassNotFoundException { + try { + Class aClass = classMap.get(poClass.getName()); + if (aClass == null) { + System.err.println(poClass.getName() + " not found."); + } else { StringBuffer sql = new StringBuffer(); - sql.append("delete from "); - sql.append(aClass.getSimpleName()); + sql.append("DELETE FROM "); + sql.append(aClass.getSimpleName().toUpperCase()); if (wheres.length > 0) { - sql.append(" where"); + sql.append(" WHERE"); for (int i = 0; i < wheres.length; i++) { String where = wheres[i]; sql.append(where); - sql.append(i != wheres.length ? " and " : ""); + sql.append(i != wheres.length ? " AND " : ""); } } return executeUpdate(sql.toString()); } + } finally { + destroyed(); } return 0; } - public int update(T t, String... wheres) throws SQLException, ClassNotFoundException { - ArrayList list = new ArrayList<>(); - for (Class aClass : obList) { - if (t.getClass() == aClass) { + public int update(Class poClass, T po, String... wheres) throws SQLException, ClassNotFoundException { + try { + Class aClass = classMap.get(poClass.getName()); + if (aClass == null) { + System.err.println(poClass.getName() + " not found."); + } else { StringBuffer sql = new StringBuffer(); - sql.append("update set "); - sql.append(aClass.getSimpleName()); + sql.append("UPDATE "); + sql.append(aClass.getSimpleName().toUpperCase()); + sql.append(" SET "); + + //获取字段列表 + List fs = new ArrayList<>(); + for (Field f : poClass.getDeclaredFields()) { + if (f.isAnnotationPresent(Varchar.class)) { + f.setAccessible(true); + fs.add(f); + } + } + for (int i = 0; i < fs.size(); i++) { + Field f = fs.get(i); + sql.append(f.getName()); + sql.append(" = "); + + Object value = f.get(po); + if (value instanceof String) { + sql.append("'"); + sql.append(value); + sql.append("'"); + } else { + sql.append(value); + } + if (i != fs.size() - 1) { + sql.append(","); + } + } if (wheres.length > 0) { - sql.append(" where"); + sql.append(" WHERE"); for (int i = 0; i < wheres.length; i++) { String where = wheres[i]; sql.append(where); - sql.append(i != wheres.length ? " and " : ""); + sql.append(i != wheres.length ? " AND " : ""); } } - System.out.println(sql.toString()); + System.out.println("SQL ==> " + sql.toString()); return executeUpdate(sql.toString()); } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } finally { + destroyed(); } return 0; } - public List select(T t, String... wheres) throws SQLException, ClassNotFoundException { + public List select(Class poClass, String... wheres) throws SQLException, ClassNotFoundException { ArrayList list = new ArrayList<>(); - for (Class aClass : obList) { - if (t.getClass() == aClass) { + try { + Class aClass = classMap.get(poClass.getName()); + if (aClass == null) { + System.err.println(poClass.getName() + " not found."); + } else { StringBuffer sql = new StringBuffer(); - sql.append("select * from "); - sql.append(aClass.getSimpleName()); + sql.append("SELECT "); + + //获取字段列表 + List fs = new ArrayList<>(); + for (Field f : poClass.getDeclaredFields()) { + if (f.isAnnotationPresent(Varchar.class)) { + fs.add(f); + } + } + for (int i = 0; i < fs.size(); i++) { + Field f = fs.get(i); + sql.append(f.getName().toUpperCase()); + if (i != fs.size() - 1) { + sql.append(","); + } + } + + sql.append(" FROM "); + sql.append(aClass.getSimpleName().toUpperCase()); if (wheres.length > 0) { - sql.append(" where"); + sql.append(" WHERE"); for (int i = 0; i < wheres.length; i++) { String where = wheres[i]; sql.append(where); - sql.append(i != wheres.length ? " and " : ""); + sql.append(i != wheres.length ? " AND " : ""); } } - System.out.println(sql.toString()); - list.addAll(executeQuery(sql.toString(),t)); + System.out.println("SQL ==> " + sql.toString()); + list.addAll(executeQuery(sql.toString(), poClass)); } + } finally { + destroyed(); } return list; } @@ -194,31 +250,31 @@ public class SqliteClient { /** * 执行select查询,返回结果列表 * - * @param sql sql select 语句 - * @param t 结果集的行数据处理类对象 + * @param sql sql select 语句 + * @param poClass 结果集的行数据处理类对象 * @return * @throws SQLException * @throws ClassNotFoundException */ - public List executeQuery(String sql, T t) throws SQLException, ClassNotFoundException { + public List executeQuery(String sql, Class poClass) throws SQLException, ClassNotFoundException { List rsList = new ArrayList(); try { resultSet = getStatement().executeQuery(sql); - //2、获取字段列表 + //获取字段列表 List fs = new ArrayList<>(); - for (Field f : t.getClass().getDeclaredFields()) { + for (Field f : poClass.getDeclaredFields()) { if (f.isAnnotationPresent(Varchar.class)) { + f.setAccessible(true); fs.add(f); } } while (resultSet.next()) { try { - T o = (T) t.getClass().newInstance(); + T o = poClass.newInstance(); for (int i = 0; i < fs.size(); i++) { - Field field = fs.get(i); - field.setAccessible(true); - String string = resultSet.getString(field.getName()); - field.set(o, string); + Field f = fs.get(i); + String string = resultSet.getString(f.getName()); + f.set(o, string); } rsList.add(o); } catch (InstantiationException e) { @@ -249,7 +305,7 @@ public class SqliteClient { } /** - * 执行多个sql更新语句 + * 执行sql更新语句 * * @param sqls * @throws SQLException @@ -282,6 +338,9 @@ public class SqliteClient { return connection; } + /** + * 获取数据库Statement对象 + */ private Statement getStatement() throws SQLException, ClassNotFoundException { if (null == statement) { statement = getConnection().createStatement(); diff --git a/src/main/java/SqliteTest.java b/src/main/java/SqliteTest.java deleted file mode 100644 index f90e911..0000000 --- a/src/main/java/SqliteTest.java +++ /dev/null @@ -1,30 +0,0 @@ -import entity.User; - -import java.io.File; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; - - -public class SqliteTest { - public static void main(String[] args) { - try { - List arrayList = new ArrayList(); - arrayList.add(User.class); - SqliteClient h = new SqliteClient(new File("D:\\test.db"),arrayList); - - User user = new User(); - user.setName("wangbing"); - user.setPassword(null); - h.insert(user); - - List select = h.select(user); - System.out.println(""); - - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (SQLException e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/src/test/java/SqliteTest.java b/src/test/java/SqliteTest.java new file mode 100644 index 0000000..d810959 --- /dev/null +++ b/src/test/java/SqliteTest.java @@ -0,0 +1,42 @@ +import entity.User; + +import java.io.File; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + + +public class SqliteTest { + public static void main(String[] args) { + try { + List arrayList = new ArrayList(); + arrayList.add(User.class); + SqliteClient h = new SqliteClient(new File("D:\\test.db"),arrayList); + + System.out.println("测试 insert"); + User user = new User(); + user.setName("wangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbingwangbing"); + user.setPassword("test"); + h.insert(User.class, user); + + System.out.println("测试 select"); + List select = h.select(User.class); + System.out.println(select.size()); + +// System.out.println("测试 update"); +// user.setName("=="); +// user.setPassword("=="); +// int update = h.update(User.class, user); +// System.out.println(select.size()); + +// System.out.println("测试 delete"); +// int delete = h.delete(User.class); +// System.out.println(delete); + + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file