使用java连接MySql,将所有数据转换成Json
来源:互联网 发布:用友软件怎么建账 编辑:程序博客网 时间:2024/06/06 02:49
使用java连接MySql,将所有数据转换成Json(没有使用SpringFramework)
这是进公司最开始做的一个练手项目,比较简单。
使用到了两个jar:
gson-2.8.0.jar和mysql-connector-java-5.1.30-bin.jar
首先想到要连接数据库:
public class ConnectSQL { // URL指向要访问的数据库名 public static final String url = "jdbc:mysql://192.168.1.1:3306/databasename?zeroDateTimeBehavior=convertToNull"; // 驱动程序名 public static final String name = "com.mysql.jdbc.Driver"; // MySQL配置时的用户名 public static final String user = "username"; // MySQL配置时的密码 public static final String password = "password"; public Connection conn = null; public PreparedStatement pst = null; public ConnectSQL(String sql) { try { Class.forName(name);// 指定连接类型 conn = DriverManager.getConnection(url, user, password);// 获取连接 pst = conn.prepareStatement(sql);// 准备执行语句 } catch (Exception e) { e.printStackTrace(); } } public void close() { try { this.conn.close(); this.pst.close(); } catch (SQLException e) { e.printStackTrace(); } }}
连接数据库时Url最后加上了zeroDateTimeBehavior=convertToNull
是由于数据库测试时有个字段Date:0000-00-00 00:00:00
输出时java错误提示:
Value 0000-00-00 00:00:00 can not be represented as java.sql.Timestamp。
这是由于MySQL用这个日期代表无效的日期,查到有两种解决方法:
1. 使用zeroDateTimeBehavior=convertToNull
,最后结果输出Date:null
2. 使用zeroDateTimeBehavior=round
,最后输出Date:0001-01-01 00:00:00
解决方式是参照https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html给出的zeroDateTimeBehavior的property,我这里使用了直接转换成null的第一种
连接之后,因为需要获取database内所有table的数据,所以首先获取了所有table名
DatabaseMetaData meta = (DatabaseMetaData) con.getMetaData();
ResultSet rs = meta.getTables(null, null, null, new String[] { "TABLE" });
while (rs.next()) {
arrTablenames.add(rs.getString(3));
}
然后,对每个table执行sql语句:
static ArrayList<String> arrcolname = new ArrayList<String>();static ArrayList<String> arrcolout = new ArrayList<String>();public static ResultSet execSQL(String strtablename) { String strsql = null; ConnectSQL db1 = null; ResultSet ret = null; strsql = "select * from " + strtablename;// SQL语句 db1 = new ConnectSQL(strsql);// 创建ConnectSQL对象 try { ret = db1.pst.executeQuery();// 执行语句,得到结果集 while (ret.next()) { ResultSetMetaData rsmd = ret.getMetaData(); int icolnum = rsmd.getColumnCount(); for (int i = 1; i <= icolnum; i++) { arrcolname.add(rsmd.getColumnName(i).toString());//table字段名 arrcolout.add(ret.getString(i));//table内容 } } ret.close(); db1.close();// 关闭连接 } catch (SQLException e) { e.printStackTrace(); } return ret;}
每个table的字段名和内容都保存在ArrayList<String>
当中了,可以自己进行编辑,比如加个key,变成Map之类的。
最后使用Gson来转换所得的Java类型(比如Map),变成Json格式
public static String ToJson(LinkedHashMap<String, Object> mTotalOut) { String strJsonOut = new String(); // toJson GsonBuilder gsonbuilder = new GsonBuilder().setPrettyPrinting().serializeNulls(); Gson gson = gsonbuilder.create(); strJsonOut = gson.toJson(mTotalOut); return strJsonOut;}
开始时直接使用了gson.toJson(mTotalOut),没有使用GsonBuilder,然后发现输出有错。
由于表中有字段为null,gson默认忽略null 值
如tblUser中有UseName,Age这两个字段,User1的Age为null,最后输出成Json时就成了{},而不是预想的{User1:null},
所以之后加上了
GsonBuilder gsonbuilder = new GsonBuilder().serializeNulls(); Gson gson = gsonbuilder.create();
来解决Gson null值不输出的问题。
解决方式参照https://github.com/google/gson/blob/master/UserGuide.md#TOC-Null-Object-Support
setPrettyPrinting()
不使用的话,最后结果是打印在一行String上输出的,setPrettyPrinting()使最后打印在控制台上或者输出的Json能格式化,输出的美观一些,并不影响Json的结果。
- 使用java连接MySql,将所有数据转换成Json
- 将Java数据转换成Json数据
- 4.使用Jackson将Json数据转换成实体数据
- 将数据转换成JSON
- 使用json-lib将java对象转换成json字符串
- 使用递归将二维资源数据转换成json的例子-java
- easyUI datagrid请求,使用@ResponseBody将数据转换成json
- 使用Jsonlib将对象转换成json格式数据
- java将XML文档转换成json格式数据
- 将JSON数据转换成JAVA的实体类
- Java将XML转换成Json格式数据
- 将DataTable数据转换成JSON数据
- 利用attributes将数据库中的所有数据转换成json并绑定到tree中
- android 将数据转换成JSON数据格式并使用JSONObject解析JSON格式的数据
- python将mysql数据库的数据转换为json数据
- 使用JAVA将对象转换成JSON字符串
- Java 连接MySQL,返回Json数据
- js将表格数据转换成json
- Placeholder如何换行
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之六
- 查看和删除进程
- gradle配置签名文件
- bootstrap datepicker 与modal使用 datepicker属性 方法 事件
- 使用java连接MySql,将所有数据转换成Json
- 共享行业的分布式MQTT设计
- 一个简单地list侧滑菜单,自己实现不是梦
- win10 掿建python spark开发环境.和安装hadoop环境
- 关于客户端通过证书获取https接口数据
- S3c2440 Nand/Nor Falsh区别
- 获取一个地点的经纬度
- 40个Java多线程问题总结
- 11 《痛苦与狂喜:米开朗基罗传》-豆瓣评分8.9