java学习日记(三)

  • 前言
    昨天主要是讲了两部分
    一:连接外部文件并进行操作
    二:java进行数据库连接
  • java连接外部TXT文件
    1.对要做的程序进行需求分析和设计
    统计每个省份的学生人数,男生个数,女生个数
    分析:
    1:系统读取用户信息文件(姓名、籍贯、性别)
    2:系统生成一个文件(省份、学生总数、男生个数、女生个数)
    设计:
  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);
	}

}

另外一些课上做的笔记:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值