master
wangbing 6 years ago
parent db46df1f0f
commit f92ceb2977

@ -1,6 +0,0 @@
import java.sql.ResultSet;
import java.sql.SQLException;
public interface RowMapper<T> {
public abstract T mapRow(ResultSet rs, int index) throws SQLException;
}

@ -19,7 +19,7 @@ public class SqliteClient {
private Statement statement; private Statement statement;
private ResultSet resultSet; private ResultSet resultSet;
private String dbFilePath; private String dbFilePath;
private List<Class> obList = new ArrayList<>(); private Map<String, Class> classMap = new HashMap<>();
/** /**
* *
@ -31,10 +31,13 @@ public class SqliteClient {
*/ */
public SqliteClient(File dbFile, List<Class> classList) throws ClassNotFoundException, SQLException { public SqliteClient(File dbFile, List<Class> classList) throws ClassNotFoundException, SQLException {
this.dbFilePath = dbFile.getAbsolutePath(); this.dbFilePath = dbFile.getAbsolutePath();
this.obList.addAll(classList); for (Class aClass : classList) {
classMap.put(aClass.getName(), aClass);
}
if (!dbFile.exists()) { if (!dbFile.exists()) {
connection = getConnection(); connection = getConnection();
for (Class object : obList) { for (String key : classMap.keySet()) {
Class object = classMap.get(key);
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
String name = object.getSimpleName(); String name = object.getSimpleName();
@ -54,139 +57,192 @@ public class SqliteClient {
sql.replace(sql.length() - 1, sql.length(), ""); sql.replace(sql.length() - 1, sql.length(), "");
sql.append(")"); sql.append(")");
System.out.println(sql.toString()); System.out.println("SQL ==> " + sql.toString());
execute(sql.toString()); execute(sql.toString());
} }
} }
} }
public <T> void insert(T t) throws SQLException, ClassNotFoundException { public <T> void insert(Class<T> poClass, T po) throws SQLException, ClassNotFoundException {
try { try {
for (Class aClass : obList) { Class aClass = classMap.get(poClass.getName());
if (t.getClass() == aClass) { if (aClass == null) {
StringBuffer sql = new StringBuffer(); System.err.println(poClass.getName() + " not found.");
String tableName = aClass.getSimpleName(); } else {
sql.append("INSERT INTO "); StringBuffer sql = new StringBuffer();
sql.append(tableName.toUpperCase()); sql.append("INSERT INTO ");
sql.append("("); sql.append(aClass.getSimpleName().toUpperCase());
sql.append("(");
Map<String, Object> keyValues = new HashMap<>();
for (Field f : aClass.getDeclaredFields()) { //获取字段列表
if (f.isAnnotationPresent(Varchar.class)) { List<Field> fs = new ArrayList<>();
try { for (Field f : poClass.getDeclaredFields()) {
f.setAccessible(true); if (f.isAnnotationPresent(Varchar.class)) {
keyValues.put(f.getName().toUpperCase(), f.get(t)); f.setAccessible(true);
} catch (IllegalAccessException e) { fs.add(f);
e.printStackTrace();
}
}
} }
}
StringBuffer fieldsSql = new StringBuffer(); StringBuffer fieldsSql = new StringBuffer();
StringBuffer valueSql = new StringBuffer(); StringBuffer valueSql = new StringBuffer();
List<String> argsList = new ArrayList<>(); for (int i = 0; i < fs.size(); i++) {
for (String key : keyValues.keySet()) { Field f = fs.get(i);
fieldsSql.append(key.toUpperCase()); fieldsSql.append(f.getName().toUpperCase());
fieldsSql.append(",");
Object value = keyValues.get(key); Object value = f.get(po);
if (value instanceof String) { if (value instanceof String) {
valueSql.append("'"); valueSql.append("'");
valueSql.append(value); valueSql.append(value);
valueSql.append("'"); valueSql.append("'");
} else { } else {
valueSql.append(value); 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(), "");
} }
if (",".equals(valueSql.substring(valueSql.length() - 1, valueSql.length()))) { if (i != fs.size() - 1) {
valueSql.replace(valueSql.length() - 1, valueSql.length(), ""); 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 { } finally {
destroyed(); destroyed();
} }
} }
public <T> int delete(T t, String... wheres) throws SQLException, ClassNotFoundException { public <T> int delete(Class<T> poClass, String... wheres) throws SQLException, ClassNotFoundException {
for (Class aClass : obList) { try {
if (t.getClass() == aClass) { Class aClass = classMap.get(poClass.getName());
if (aClass == null) {
System.err.println(poClass.getName() + " not found.");
} else {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append("delete from "); sql.append("DELETE FROM ");
sql.append(aClass.getSimpleName()); sql.append(aClass.getSimpleName().toUpperCase());
if (wheres.length > 0) { if (wheres.length > 0) {
sql.append(" where"); sql.append(" WHERE");
for (int i = 0; i < wheres.length; i++) { for (int i = 0; i < wheres.length; i++) {
String where = wheres[i]; String where = wheres[i];
sql.append(where); sql.append(where);
sql.append(i != wheres.length ? " and " : ""); sql.append(i != wheres.length ? " AND " : "");
} }
} }
return executeUpdate(sql.toString()); return executeUpdate(sql.toString());
} }
} finally {
destroyed();
} }
return 0; return 0;
} }
public <T> int update(T t, String... wheres) throws SQLException, ClassNotFoundException { public <T> int update(Class<T> poClass, T po, String... wheres) throws SQLException, ClassNotFoundException {
ArrayList<T> list = new ArrayList<>(); try {
for (Class aClass : obList) { Class aClass = classMap.get(poClass.getName());
if (t.getClass() == aClass) { if (aClass == null) {
System.err.println(poClass.getName() + " not found.");
} else {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append("update set "); sql.append("UPDATE ");
sql.append(aClass.getSimpleName()); sql.append(aClass.getSimpleName().toUpperCase());
sql.append(" SET ");
//获取字段列表
List<Field> 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) { if (wheres.length > 0) {
sql.append(" where"); sql.append(" WHERE");
for (int i = 0; i < wheres.length; i++) { for (int i = 0; i < wheres.length; i++) {
String where = wheres[i]; String where = wheres[i];
sql.append(where); 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()); return executeUpdate(sql.toString());
} }
} catch (IllegalAccessException e) {
e.printStackTrace();
} finally {
destroyed();
} }
return 0; return 0;
} }
public <T> List<T> select(T t, String... wheres) throws SQLException, ClassNotFoundException { public <T> List<T> select(Class<T> poClass, String... wheres) throws SQLException, ClassNotFoundException {
ArrayList<T> list = new ArrayList<>(); ArrayList<T> list = new ArrayList<>();
for (Class aClass : obList) { try {
if (t.getClass() == aClass) { Class aClass = classMap.get(poClass.getName());
if (aClass == null) {
System.err.println(poClass.getName() + " not found.");
} else {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append("select * from "); sql.append("SELECT ");
sql.append(aClass.getSimpleName());
//获取字段列表
List<Field> 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) { if (wheres.length > 0) {
sql.append(" where"); sql.append(" WHERE");
for (int i = 0; i < wheres.length; i++) { for (int i = 0; i < wheres.length; i++) {
String where = wheres[i]; String where = wheres[i];
sql.append(where); 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());
list.addAll(executeQuery(sql.toString(),t)); list.addAll(executeQuery(sql.toString(), poClass));
} }
} finally {
destroyed();
} }
return list; return list;
} }
@ -194,31 +250,31 @@ public class SqliteClient {
/** /**
* select * select
* *
* @param sql sql select * @param sql sql select
* @param t * @param poClass
* @return * @return
* @throws SQLException * @throws SQLException
* @throws ClassNotFoundException * @throws ClassNotFoundException
*/ */
public <T> List<T> executeQuery(String sql, T t) throws SQLException, ClassNotFoundException { public <T> List<T> executeQuery(String sql, Class<T> poClass) throws SQLException, ClassNotFoundException {
List<T> rsList = new ArrayList<T>(); List<T> rsList = new ArrayList<T>();
try { try {
resultSet = getStatement().executeQuery(sql); resultSet = getStatement().executeQuery(sql);
//2、获取字段列表 //获取字段列表
List<Field> fs = new ArrayList<>(); List<Field> fs = new ArrayList<>();
for (Field f : t.getClass().getDeclaredFields()) { for (Field f : poClass.getDeclaredFields()) {
if (f.isAnnotationPresent(Varchar.class)) { if (f.isAnnotationPresent(Varchar.class)) {
f.setAccessible(true);
fs.add(f); fs.add(f);
} }
} }
while (resultSet.next()) { while (resultSet.next()) {
try { try {
T o = (T) t.getClass().newInstance(); T o = poClass.newInstance();
for (int i = 0; i < fs.size(); i++) { for (int i = 0; i < fs.size(); i++) {
Field field = fs.get(i); Field f = fs.get(i);
field.setAccessible(true); String string = resultSet.getString(f.getName());
String string = resultSet.getString(field.getName()); f.set(o, string);
field.set(o, string);
} }
rsList.add(o); rsList.add(o);
} catch (InstantiationException e) { } catch (InstantiationException e) {
@ -249,7 +305,7 @@ public class SqliteClient {
} }
/** /**
* sql * sql
* *
* @param sqls * @param sqls
* @throws SQLException * @throws SQLException
@ -282,6 +338,9 @@ public class SqliteClient {
return connection; return connection;
} }
/**
* Statement
*/
private Statement getStatement() throws SQLException, ClassNotFoundException { private Statement getStatement() throws SQLException, ClassNotFoundException {
if (null == statement) { if (null == statement) {
statement = getConnection().createStatement(); statement = getConnection().createStatement();

@ -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<Class> 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<User> select = h.select(user);
System.out.println("");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

@ -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<Class> 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<User> 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();
}
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.