jdbc连接数据库与导出json格式文件

jdbc连接数据库与导出json格式文件

环境搭建
导入连接mysql和导出json文件所需要的jar包

下载mysql-connector-java-8.0.19.jar

下载json.jar

首先我们在新建的工程中创建lib文件夹,将jar包复制进lib文件夹。然后将lib

文件夹导入你使用的编译器中。

IDEA——右键——>add as library

eclipse—右键project->property->java build path->libaries->add external jars

Java类中引入

1. 加载驱动

 Class.forName("com.mysql.cj.jdbc.Driver");

2. 创建与数据库的连接

connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/std_manager?user=root&password=123456&serverTimezone=GMT");

格式为
jdbc:mysql://127.0.0.1:3306/数据库名称?user=账号名&password=密码&serverTimezone=指定时区(不指定时区可能会报错)

3. 根据数据库实际的表名写SQL语句

String sql="select * from user_info";

4. 创建Statement或PreparedStatement接口执行sql语句

使用Statement接口

//创建Statement接口
Statement s = connection.createStatement();
// 准备sql语句
String sql="select * from user_info";
//执行sql语句
s.execute(sql);
System.out.println("执行sql语句成功");

PreparedStatement接口

与Statement不同的是根据sql语句创建PreparedStatement

 //写SQL语句
 String sql="select * from user_info";
 //得到statement对象执行sql
 statement = connection.prepareStatement(sql);
 //得到结果集
 rs = statement.executeQuery();
 //处理结果集

在编写对指定value操作的sql中,statement需采用拼接的方式,这种方式会带来种种不便,所以我们通常使用PreparedStatement的采用占位符的方式。

5. 处理结果集
PreparedStatement接口处理查询结果集

rs = statement.executeQuery();     
  while(rs.next()){
      System.out.println(rs.getString(1));
      System.out.println(rs.getString(2));
  }

resultset对象

1.ResultSet.next 方法

用于移动到 ResultSet 中的下一行,使下一行成为当前行。

2.getXXX方法

提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。

示例:

while(rs.next()){
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
            }

3.ResultSet.getMetaData方法

关于 ResultSet 中列的信息,可通过调用方法 ResultSet.getMetaData 得到。返回的 ResultSetMetaData 对象将给出其 ResultSet 对象各列的编号、类型和属性。

MetaData对象

得到某列的原始名称
metaData.getColumnName(1)

得到某列的别名,getColumnLabel是field的SQL AS的值
metaData.getColumnLabel(2)

获得占位符个数
metaData.getParameterCount();

在JDK1.1中,ResultSet类中只定义了next()方法支持数据指针的下移.但在Java 2中,ResultSet类增加了如下方法支持数据指针的移动,包括:

ResultSet.first(): 将数据指针移到结果集的第一行
ResultSet.last(): 将数据指针移到结果集的最后一行
ResultSet.previous(): 将数据指针上移一行

PreparedStatement接口处理更新结果集

用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。

executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

//书写sql,使用?占位符
String insert ="insert into user_info(username,password) values(?,?)";
//实现statement接口
     PreparedStatement statement1 = connection.prepareStatement(insert);
     \\使用setXXX为占位符赋值
     statement1.setString(1,"张三");
     statement1.setString(2,"123456");
     \\打印返回值,成功为1,
     System.out.println(statement1.executeUpdate());

查询结果集导出为json格式

Class.forName("com.mysql.cj.jdbc.Driver");
//加载驱动
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/std_manager?user=root&password=123456&serverTimezone=GMT");
//创建连接
String sql="select * from user_info";
			//实现statement接口
            statement = connection.prepareStatement(sql);
            //执行executeQuery方法得到resultset对象
            rs = statement.executeQuery();
            //获得元数据,每列的列数
            ResultSetMetaData metaData = rs.getMetaData();
            int column = metaData.getColumnCount();
			//新建JSONArray对象储存我们要导出的信息
            JSONArray array = new JSONArray();
            //遍历结果集
            while(rs.next()){
            //新建JSONObject对象
                JSONObject jsonObj = new JSONObject();
                for(int i = 1; i <= column;i++)
                {
                	//为每个json对象赋值
                    String columnName = metaData.getColumnLabel(i);
                    String value =rs.getString(columnName);
                    jsonObj.put(columnName, value);
                }
                //结果存进JSONArray中
                array.put(jsonObj);
            }
            //打印一下结果
            System.out.println(array.toString());

成功得到了导出的数据

[{“password”:“123456”,“username”:“12234413”},{“password”:“undefined”,“username”:“123”},{“password”:“123456”,“username”:“2018091609024”},{“password”:“818001”,“username”:“2018091609025”},{“password”:“123456”,“username”:“张三”}]`

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值