数据库留言板

个人分析
java获取数据库链接,首先需要一个jar包。
都是一些数据库的增删改查,很简单。
数据库,表结构如下:
数据库留言板_第1张图片
代码如下:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Test extends JFrame implements ActionListener {
	private static String[] arr = { "微笑", "伤心", "自嘲", "大笑", "生无可恋" };// 这里存放的是表情,等下放进那个JComboBox
	private static Font ff = new Font("宋体", Font.PLAIN, 25);// 这里的字体是设置的所有控件上的
	private static JPanel top, botton, right;// 分别对应上中下右四个面板
	private static JScrollPane middle;// 因为中间是文本域,需要滚动条,这里就干脆用滚动条面板
	private static JLabel msbord;// 留言板
	private static JTextArea msbordcon;// 留言板内容
	private static JLabel you;// 你
	private static JComboBox expresion;// 表情下拉框
	private static JLabel yousay;// 你说标签
	private static JTextField words;// 所留言内容的输入框
	private static JButton submit;// 提交按钮
	private static JButton clearPrint;// 清屏按钮
	private static JButton ttop;// 置顶按钮
	private static JButton end;// 置尾按钮

	public static void main(String[] args) throws Exception {
		Test t = new Test();

	}

	public Test() throws Exception {
		this.add(top, BorderLayout.NORTH);// 添加最上方的面板
		this.add(middle);// 同理,这里也是,不指定布局,就是边框布局,并且默认位置居中
		this.add(botton, BorderLayout.SOUTH);// 下方的JPanel,标准说法,就是南方
		this.add(right, BorderLayout.EAST);
		this.setSize(1218, 800);
		this.setLocation(300, 100);
		this.setVisible(true);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pri();// 这里,第一次将软件打开的时候,就会去读取数据库数据
	}

	{// 初始化控件
		msbord = new JLabel("留言板");
		msbord.setFont(ff);
		top = new JPanel(new FlowLayout());// 最上面给的留言板,这里用的流式布局
		top.add(msbord);// 添加留言板标签,并且居中,
		msbordcon = new JTextArea("留言内容:\n");// 为了美观 \n
		msbordcon.setEditable(false);// 设置文本框默认不可编辑
		msbordcon.setFont(ff);
		middle = new JScrollPane();
		middle.setViewportView(msbordcon);// 这里将JScrollpane需要展示的控件放进去//
		you = new JLabel("你    ");
		you.setFont(ff);
		expresion = new JComboBox(arr);// 这里放的就是上面那个表情数组
		expresion.setFont(ff);
		yousay = new JLabel("着是说: ");
		yousay.setFont(ff);
		words = new JTextField(25);// 这里的输入框默认长度
		words.setFont(ff);
		submit = new JButton("提交");
		submit.addActionListener(this);
		submit.setFont(ff);
		botton = new JPanel(new FlowLayout());// 这里采用流式布局,居中
		botton.add(you);
		botton.add(expresion);
		botton.add(yousay);
		botton.add(words);
		botton.add(submit);// 添加完毕
		clearPrint = new JButton("清屏");
		clearPrint.addActionListener(this);
		clearPrint.setFont(ff);
		ttop = new JButton("置顶");
		ttop.addActionListener(this);
		ttop.setFont(ff);
		end = new JButton("置尾");
		end.setFont(ff);
		right = new JPanel(new GridLayout(9, 1, 5, 50));// 最右边的三个按钮就采用网格布局.3*1
		right.add(clearPrint);
		right.add(ttop);
		right.add(end);
	}
	int i = 0;

	public void actionPerformed(ActionEvent e) {// 按钮事件处理类
		i++;
		if (e.getActionCommand().equals("提交")) {
			String expre = (String) expresion.getSelectedItem();// 拿到表情
			SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");// 设置时间格式
			String date = sdf.format(new Date());// 拿到当前时间,并格式好了
			String content = words.getText();// 拿到内容
			words.setText(null);// 内容重置为null
			cord c = new cord(1, date, expre, content);// 取到数据,并封装成cord对象,调用addcord方法存入数据库
			// 注意一点,这里的第一项,也就是id。只有占位作用
			try {
				addcord(c);
				pri();
			} catch (Exception e1) {
			}

		} else if (e.getActionCommand().equals("清屏")) {
			msbordcon.setText("留言内容:\n");
		}
	}

	public static ArrayList getSource() throws Exception {// 查询数据库所有数据,给resultset数组,并将结果return
		Class.forName("com.mysql.jdbc.Driver");// 利用类加载器,加载数据库驱动类
		String url = "jdbc:mysql://localhost:3306/test";// 这里的test是你数据库的名字
		Connection connection = connection = DriverManager.getConnection(url,
				"A", "B");
		// 拿到连接,这里的俩个引号AB,分别填你的数据库用户名与密码
		String sql = "select * from recored where 3=?";// 编写sql查询语句,这里因为是普通作业,就直接全部查完
		// 个人习惯,这里就用预编译的方式查询
		PreparedStatement preparedStatement = connection.prepareStatement(sql);
		preparedStatement.setInt(1, 3);// 第一个问号,赋值为3,
		ResultSet rs = preparedStatement.executeQuery();// 拿到结果集
		ArrayList cords = new ArrayList();
		while (rs.next()) {// 如果结果集还有下一个数据
			// 将数据封装成对象,再存入List集合
			cords.add(new cord(rs.getInt("id"), rs.getString("data"), rs
					.getString("expression"), rs.getString("content")));
		}
		connection.close();// 关闭链接
		return cords;// 获取完毕,直接放回
	}

	public static boolean addcord(cord cord) throws Exception {// 增加一条记录
		Class.forName("com.mysql.jdbc.Driver");
		String url = "jdbc:mysql://localhost:3306/test";
		Connection connection = connection = DriverManager.getConnection(url,
				"A", "B");
		String sql = "insert into recored values (null,?,?,?)";// 这里之所以写null,是因为我的id字段设置的自动递增
		// data content expression分别与三个问号相对应
		PreparedStatement preparedStatement = connection.prepareStatement(sql);// 同上,预编译
		preparedStatement.setString(1, cord.getData());
		preparedStatement.setString(2, cord.getcontents());// 设置第二个问号的值,sql中
		preparedStatement.setString(3, cord.getExpression());
		int n = preparedStatement.executeUpdate();// 对几条记录做了更新,操作,这里就返回个数
		connection.close();// 关闭连接
		if (n > 0) {// 表示添加更新成功
			return true;
		}
		return false;
	}

	public static void pri() throws Exception {// 这个方法是将数据库的内容读取到文本域中,也可以理解为重绘
		// 首先拿到数据里的对象
		msbordcon.setText("留言内容:\n");
		ArrayList record = getSource();
		for (int i = 0; i < record.size(); i++) {// 将里面的每一条数据追加到留言板,也就是文本域
			msbordcon.append(record.get(i).toString());
			msbordcon.setSelectionStart(msbordcon.getText().length());// 将光标移动至最后一行,方便后面追加数据
		}

	}
}

class cord {// 这个用来存放从数据库里面查到的结果
	private int id;
	private String data;// 日期
	private String expression;// 表情
	private String contents;// 内容

	cord(int id, String data, String expression, String contents) {
		this.id = id;
		this.expression = expression;
		this.data = data;
		this.contents = contents;
	}

	public String getData() {
		return data;
	}

	public String getExpression() {
		return expression;
	}

	public String getcontents() {
		return contents;
	}

	public String toString() {// 重写,以便后面直接导出数据到文本聊天记录板
		String temp = data + " " + "你" + expression + "地说:" + contents + "\n";
		return temp;
	}

}

运行结果如下:
数据库留言板_第2张图片

你可能感兴趣的:(java大神之路)