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”:“张三”}]`