- 前言
昨天主要是讲了两部分
一:连接外部文件并进行操作
二:java进行数据库连接 - java连接外部TXT文件
1.对要做的程序进行需求分析和设计
统计每个省份的学生人数,男生个数,女生个数
分析:
1:系统读取用户信息文件(姓名、籍贯、性别)
2:系统生成一个文件(省份、学生总数、男生个数、女生个数)
设计:
- 数据结构(省份信息类):省份名称,男生人数,女生人数
- 程序流程设计:
1:创建文件的输入流
2:使用while循环逐行读取文件
3:对每一行的信息进行切割(使用\t分割)得到一个长度为3的数组
4:对每个数组进行统计,遍历保存省份信息的list
If省份在list中不存在,则创建一个对应该省份的对象添加到list中
Else 找到该省份对象,判断该学生的性别
If学生性别 is 男,则在对象男生个数的基础上+1
Else 则在对象女生个数基础上+1
5:创建一个文件“统计表”统计
6:创建输出流
7:循环遍历list集合,将省份名称+‘\t’+男生个数+女生个数+总数
8:关闭文件流
代码实现:
省份信息类:
package Study;
//省份信息类
public class Province {
private String proName;//省份名称
private int boyNum;//男生个数
private int girlNum;//女生个数
//get和set方法分别用于获取和修改私有属性的内容
//eclipse提供了快速生成getter和setter的快捷键:右键,source,generate:getters和setters
public String getProName() {
return proName;
}
public int getGirlNum() {
return girlNum;
}
public void setGirlNum(int girlNum) {
this.girlNum = girlNum;
}
public void setProName(String proName) {
this.proName = proName;//this是引入变量
}
public int getBoyNum() {
return boyNum;
}
public void setBoyNum(int boyNum) {
this.boyNum = boyNum;
}
public void addBoy() {
this.boyNum++;
}
public void addGirl() {
this.girlNum++;
}
}
好的编译工具真的很重要
//get和set方法分别用于获取和修改私有属性的内容
//eclipse提供了快速生成getter和setter的快捷键:右键,source,generate:getters和setters
可以很方便的生成函数
连接文件部分:
package Study;
import java.io.*;
import java.util.*;
public class StudentNumCount {
static List<Province> proList=new LinkedList<>();
//先定义读取文件并统计人数的方法
private static Province returnProvince(String proName) {
for(int i=0;i<proList.size();i++){
Province province=proList.get(i);
if(proName.equals(province.getProName())){
return province;
}
}
Province newPro=new Province();
newPro.setProName(proName);
proList.add(newPro);//将新省份添加到列表中
return newPro;
}
private static void readAndCount(String path) throws Exception {
FileReader fr=new FileReader(path);//创建文件读取流
BufferedReader br=new BufferedReader(fr);
String temp=null;
while ((temp=br.readLine())!=null) {
System.out.println(temp);
String[] info=temp.split("\t");//(姓名,省份,性别)
Province province=returnProvince(info[1]);//返回省份对象
if("男".equals(info[2]))//判断学生性别并计数
province.addBoy();
else
province.addGirl();
}
br.close();fr.close();
}
public static void saveInfo(String filename) throws Exception {
BufferedWriter bw=new BufferedWriter(new FileWriter(filename));//嵌套定义输出流
for(Province pro:proList){
bw.write(pro.getProName()+"\t"+pro.getBoyNum()+"\t"+pro.getGirlNum()+"\t"+(pro.getBoyNum()+pro.getGirlNum())+"");
bw.newLine();
bw.flush();//清空缓冲区数据
}
bw.close();
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
System.out.println("正在读取文件");
readAndCount("信息.txt");
System.out.println("读取和统计信息完成");
saveInfo("省份人数统计表.txt");
System.out.println("成功");
}
}
主要还是对列表项的应用
- 连接数据库
我是用mysql连接的数据库
使用jdbc连接数据库:jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8
这是8.0以下版本的,8.0及以上需要另一端代码。网上应该有
如何使用java编程获取数据库连接?
几个要素:
url:jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8
2 DriverClass(数据库驱动)
5.0: com.mysql.jdbc.Driver
3.username
4.password
使用JDBC必须了解的几个api类或接口
Jdk中所有的用于访问数据库的类和接口都被封装在java.sql包和javax.sql包
Connection:接口,用于保存数据库连接
DriverManager:驱动管理器。用于保存已经注册的数据库驱动信息且用于创建数据库连接
用于执行sql语句的接口有三个,其中两个比较常用
1:statement:接口。用于执行静态的sql语句
2:preparedStatement:接口。既能执行动态又能执行静态
3:CaliableStatement:接口,专门用于执行数据库的存储过程及函数
ResultSet:用于保存执行查询语句后数据库返回的结果集
实现代码:
工具类:
package cn.edu.hebeu.smsys.jdbc;
//定义一个访问数据库连接的工具类
import java.sql.Connection;
import java.sql.DriverManager;
public class DButils {
public static final String URL="jdbc:mysql://localhost:3306/smsys?characterEncoding=utf8";
public static final String DRIVER_CLASS="com.mysql.jdbc.Driver";
public static final String USERNAME="root";
public static final String PASSWORD="123";
public static Connection getConnection()throws Exception{
Class.forName(DRIVER_CLASS);//加载(注册)数据库驱动
return DriverManager.getConnection(URL,USERNAME,PASSWORD);
}
}
主界面:
package cn.edu.hebeu.smsys.jdbc;
import java.sql.*;
import com.mysql.jdbc.Statement;
public class TestJDBC {
//使用jdbc执行sql语句完成访问数据库操作
public static void addimp(Connection conn)throws Exception {
String sql="insert into text values('ccc','100')";
Statement st =(Statement) conn.createStatement();//创建一个sql执行器
if(st.executeUpdate(sql)>0)//记录成功添加
System.out.println("成功");
else
System.out.println("失败");
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Connection conn=DButils.getConnection();
System.out.println("连接信息:"+conn);
addimp(conn);
}
}
另外一些课上做的笔记: