From d5c64eb03ea03475be179c47de24efeb933a62c9 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Tue, 29 Dec 2020 12:42:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=88=B1=E4=BB=96=E5=B0=B1=E8=A6=81=E6=89=93?= =?UTF-8?q?=E4=BB=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Application.java | 104 +++++++++++++++++++++++++++++++------ src/test/DbUtilTest.java | 2 +- src/utils/DbUtil.java | 107 +++++++++++++++++++++++++++++---------- src/utils/Table.java | 3 +- src/utils/system.java | 1 + 5 files changed, 172 insertions(+), 45 deletions(-) diff --git a/src/Application.java b/src/Application.java index 247f175..2993041 100644 --- a/src/Application.java +++ b/src/Application.java @@ -1,7 +1,10 @@ import java.sql.SQLException; +import java.text.SimpleDateFormat; import java.util.List; +import bean.Author; import bean.Book; +import bean.Publisher; import utils.DbUtil; import utils.system; @@ -11,6 +14,7 @@ public class Application { public static void main(String[] args) { new Application().run(); } + private void run() { System.out.println("欢迎使用图书管理系统 "); System.out.println("\t v1.0.0"); @@ -27,19 +31,18 @@ public class Application { if (input == 1) { // 全部 showAllBook(); - } -// else if (input == 2) { -// // 根据编号查询 -// queryBook(); -// } else if (input == 3) { -// // 添加 -// addBook(); -// } else if (input == 4) { -// modifyBook();// 修改 -// } else if (input == 5) { -// removeBook(); // 删除 -// } - else if (input == 6) { + } else if (input == 2) { + // // 根据编号查询 + int id = Integer.parseInt(system.input("请输入要查询的图书编号:")); // 获取输入 + queryBook(id); + } else if (input == 3) { + // // 添加 + addBook(); + } else if (input == 4) { + modifyBook();// 修改 + } else if (input == 5) { + removeBook(); // 删除 + } else if (input == 6) { System.out.println("已经退出系统了"); return; // 推出递归 } else { @@ -47,11 +50,83 @@ public class Application { } run(); } catch (SQLException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } + + + private void removeBook() throws SQLException { + // TODO Auto-generated method stub + throw new SQLException("暂未实现此方法"); + } + + private void modifyBook() throws SQLException { + // TODO Auto-generated method stub + throw new SQLException("暂未实现此方法"); + } + + + + private static SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private void queryBook(int bookId) throws SQLException { + Book b = db.get(Book.class, bookId); + if (null == b) { + system.println("查询的图书信息不存在"); + return; + } + system.println("编号:", b.getId()); + system.println("书名:", b.getName()); + system.println("作者:", b.getAuthor().getName()); + system.println("价格:", b.getId()); + system.println("出版社:", b.getPublisher().getName()); + system.println("入库时间:", date.format(b.getCreateTime())); + } + + private void addBook() throws SQLException { +// int id = Integer.parseInt(system.input("请输入图书编号:")); + String name = system.input("请输入图书名称:"); + int author = getOrAddAuthor(system.input("请输入作者名称:")); + float price = Float.parseFloat(system.input("请输入图书价格:")); + int publisher = getOrAddPublisher(system.input("请输入图书出版社:")); + + int bookId = db.insert("insert into author (name,author,publisher,price,create_time,update_time) values (?,?,?,?,now(),now())", name,author,publisher,price); + if(bookId > 0) { + system.println("新增图书成功,编号为:",bookId); + }else{ + system.error("添加图书失败"); + } + } + + /** + * 获取作者的编号 + * @param name + * @return + * @throws SQLException + */ + private int getOrAddAuthor(String name) throws SQLException { + Author b = db.find(Author.class, "select * from author where name=?", name); + if (b != null) { + return b.getId(); + } + return db.insert("insert into author (name,create_time,update_time) values (?,now(),now())", name); + } + + /** + * 获取出版社的编号 + * @param name + * @return + * @throws SQLException + */ + private int getOrAddPublisher(String name) throws SQLException { + Publisher b = db.find(Publisher.class, "select * from publisher where name=?", name); + if (b != null) { + return b.getId(); + } + return db.insert("insert into publisher (name,create_time,update_time) values (?,now(),now())", name); + } + private void showAllBook() throws SQLException { if (db.count("book") == 0) { @@ -66,5 +141,4 @@ public class Application { } } - } diff --git a/src/test/DbUtilTest.java b/src/test/DbUtilTest.java index 8d476ab..9804efb 100644 --- a/src/test/DbUtilTest.java +++ b/src/test/DbUtilTest.java @@ -26,7 +26,7 @@ public class DbUtilTest { @Test public void testAuthor() throws Exception { - Author t = db.get(Author.class, "select * from author where id = ?",1); + Author t = db.get(Author.class,1); // assertNotNull(t); if(t != null) { assertEquals(1, t.getId()); diff --git a/src/utils/DbUtil.java b/src/utils/DbUtil.java index 68d9c91..bac0dac 100644 --- a/src/utils/DbUtil.java +++ b/src/utils/DbUtil.java @@ -25,17 +25,17 @@ public class DbUtil { private static Connection conn; private PreparedStatement ps; private ResultSet rs; -// private static DbUtil dbUtil = null; + // private static DbUtil dbUtil = null; public static DbUtil createDBUtil() { - return createDBUtil("jdbc:mysql://127.0.0.1:3306/books", "root", "123456"); + return createDBUtil("jdbc:mysql://127.0.0.1:3306/book", "root", "123456"); } public static DbUtil createDBUtil(String url, String user, String pwd) { -// if (dbUtil == null) { -// dbUtil =; -// } - return new DbUtil(url, user, pwd); + // if (dbUtil == null) { + // dbUtil =; + // } + return new DbUtil(url, user, pwd); } private DbUtil(String url, String user, String pwd) { @@ -105,6 +105,28 @@ public class DbUtil { return count; } + /** + * 插入数据并获取新增数据的自增ID + * + * @param sql + * @param params + * @return + * @throws SQLException + */ + public int insert(String sql, Object... params) throws SQLException { + prepareStatement(sql, params); + int count = ps.executeUpdate(); + if (count > 0) { + // 获取自增id + rs = ps.getGeneratedKeys(); + if (rs.next()) { + return rs.getInt(1); + } + } + this.dispose(); + return 0; + } + private void prepareStatement(String sql, Object... params) throws SQLException { ps = conn.prepareStatement(sql); if (params.length > 0) { @@ -120,7 +142,7 @@ public class DbUtil { } @SuppressWarnings({ "unchecked", "rawtypes" }) - public T get(Class cls, String sql, Object... params) throws SQLException { + public T find(Class cls, String sql, Object... params) throws SQLException { executeQuery(sql, params); T t = null; if (rs.next()) { @@ -130,6 +152,26 @@ public class DbUtil { return t; } + @SuppressWarnings("unchecked") + public T get(Class cls, Object id) throws SQLException { + + Table table = cls.getAnnotation(Table.class); + if (table == null) + return null; + String tableName = table.name(); + if (tableName == null || "".equals(tableName)) { + tableName = cls.getSimpleName(); + } + String sql = "select * from " + tableName + " where " + table.pk() + "=?"; + executeQuery(sql, id); + T t = null; + if (rs.next()) { + t = (T) convertToBean(cls); + } + this.dispose(); + return t; + } + @SuppressWarnings({ "unchecked", "rawtypes" }) public List queryList(Class cls, String sql, Object... params) throws SQLException { executeQuery(sql, params); @@ -149,33 +191,35 @@ public class DbUtil { } } return false; - } -// private static SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // private static SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd + // HH:mm:ss"); @SuppressWarnings("unused") - private boolean isDBNull(ResultSet rs,String key) { + private boolean isDBNull(ResultSet rs, String key) { return true; } + private Object getValueFromResult(BeanProperty p, Field f, T t) throws SQLException, ClassNotFoundException { -// String[] basicType = { "int", "float", "short", "long", "java.lang.String" }; + // String[] basicType = { "int", "float", "short", "long", "java.lang.String" }; String type = p.type.toLowerCase(); if (type.equals("int")) { // 基本类型 return rs.getInt(p.field); - }else if (type.equals("float")) { // 基本类型 - return rs.getFloat(p.field); - }else if (type.equals("double")) { // 基本类型 - return rs.getDouble(p.field); - }else if (type.equals("short")) { // 基本类型 - return rs.getShort(p.field); - }else if (type.equals("long")) { // 基本类型 - return rs.getLong(p.field); - }else if (type.equals("java.lang.string")) { // 基本类型 - return rs.getString(p.field); + } else if (type.equals("float")) { // 基本类型 + return rs.getFloat(p.field); + } else if (type.equals("double")) { // 基本类型 + return rs.getDouble(p.field); + } else if (type.equals("short")) { // 基本类型 + return rs.getShort(p.field); + } else if (type.equals("long")) { // 基本类型 + return rs.getLong(p.field); + } else if (type.equals("java.lang.string")) { // 基本类型 + return rs.getString(p.field); } else if (type.equals("java.util.date")) { // 日期类型 Object v = rs.getObject(p.field); - if(null == v) return null; + if (null == v) + return null; return new Date(rs.getDate(p.field).getTime()); } else { String pk = p.pk; @@ -184,12 +228,14 @@ public class DbUtil { } Class cls = Class.forName(p.type); Table table = cls.getAnnotation(Table.class); - if(table == null) return null; + if (table == null) + return null; String tableName = table.name(); if (tableName == null || "".equals(tableName)) { tableName = cls.getSimpleName(); } - return createDBUtil().get(cls, "select * from " + tableName + " where " + pk + "=?", rs.getObject(p.field)); + return createDBUtil().find(cls, "select * from " + tableName + " where " + pk + "=?", + rs.getObject(p.field)); } } @@ -221,13 +267,18 @@ public class DbUtil { return t; } + public Object getField(String sql, Object... params) throws SQLException { + executeQuery(sql, params); + if (rs.next()) { + return rs.getObject(1); + } + return null; + } + public int count(String tableName) { int count = 0; try { - executeQuery("select count(*) as total_count from " + tableName); - if (rs.next()) { - count = rs.getInt(1); - } + count = (int) getField("select count(*) as total_count from " + tableName); } catch (SQLException e) { e.printStackTrace(); } finally { diff --git a/src/utils/Table.java b/src/utils/Table.java index 9d00d6e..34a3935 100644 --- a/src/utils/Table.java +++ b/src/utils/Table.java @@ -8,5 +8,6 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Table { - public String name(); + public String name() default ""; + public String pk() default "id"; } diff --git a/src/utils/system.java b/src/utils/system.java index 1df5460..848641a 100644 --- a/src/utils/system.java +++ b/src/utils/system.java @@ -23,6 +23,7 @@ public class system { return input(null); } + @SuppressWarnings("resource") public static String input(String msg) { if (null != msg) { System.out.print(msg);