Java 专综
Java 课设
客运专线信息管理系统
Java 用GUI 实现 增删查改 界面 并且能修改数据库中的数据
好了,以上就是多放一些 关键词,方便需要的同学都能看到!
运行环境: IDEA 编译器, MySQL 数据库
先给大家看效果图,后面有完整代码及代码使用方法
这是登录界面
这是 主界面 ,你在登录界面用户名 密码输入正确后,它就会自动跳转这个界面
好了,FH不多说,直接上代码
第一个代码类
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class John2 {
public static void createAndShowGUI(){
// 1.创建一个JFrame容器
JFrame f = new JFrame("登录");
f.setSize(400,300);
f.setLocation(600,300);
f.setLayout(new BorderLayout());
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JPanel panel1 = new JPanel();
JTextField inputField = new JTextField(23);
JTextField password = new JPasswordField(23);
JLabel label = new JLabel("用户名",JLabel.CENTER);
label.setFont(new Font("宋体",Font.PLAIN,20));
JLabel label2 = new JLabel("密码",JLabel.CENTER);
label2.setFont(new Font("宋体",Font.PLAIN,20));
JButton btn = new JButton("登录");
JButton btn2 = new JButton("清空");
btn.setPreferredSize(new Dimension(100,25));
btn2.setPreferredSize(new Dimension(100,25));
panel.add(label);
panel.add(inputField);
panel1.add(label2);
panel1.add(password);
panel1.add(btn);
panel1.add(btn2);
f.add(panel,BorderLayout.PAGE_START);
f.add(panel1,BorderLayout.CENTER);
//事件处理
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String input = inputField.getText();
String pwd = password.getText();
boolean flag = findData(input,pwd);
if (flag == true) {
JOptionPane.showMessageDialog(null, "登录成功");
f.dispose();
shiftWindows();
}else{
JOptionPane.showMessageDialog(null,"账号或密码有误,登录失败!");
}
}
});
//清空的事件处理
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
inputField.setText("");
password.setText("");
}
});
}
public static boolean findData(String user, String pwd) {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
//1.建立连接
connection = John.getConnection();
//2.构造sql
String sql = "select * from usertable where user = ?";
statement = connection.prepareStatement(sql);
statement.setString(1, user);
//3.执行sql
resultSet = statement.executeQuery();
//4.对遍历结果进行检查
while (resultSet.next()) {
String username = resultSet.getString("user");
String password = resultSet.getString("password");
if (username == null) {
return false;
} else {
if (username.equals(user) && password.equals(pwd)) {
return true;
} else
return false;
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5.回收资源
John.close(connection, statement, resultSet);
}
//如果查询中途出了异常,就直接到了这一步,也是查询失败
return false;
}
static JTable table;
static Object[] columeNames = {"车牌号", "司机姓名", "年龄", "路线号", "起终点", "票价"};
static Object[][] dataName = new Object[80][6];
static int rowCount = 0; //获取当前的有效行数
static DefaultTableModel model;
public static void shiftWindows() {
JFrame frame = new JFrame("数据页面");
frame.setSize(1000, 700);
frame.setLocation(600, 300);
frame.setLayout(new BorderLayout());
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();//显示最上面的提示信息
panel.setPreferredSize(new Dimension(200, 80));
JLabel lableName = new JLabel("姓名 ");
JLabel labelPath = new JLabel("路线 ");
JLabel labelRangeMixAge = new JLabel("最小年龄 ", JLabel.LEFT);
JLabel labelRangeMaxAge = new JLabel("最大年龄 ");
lableName.setFont(new Font("宋体", Font.PLAIN, 20));
labelPath.setFont(new Font("宋体", Font.PLAIN, 20));
labelRangeMixAge.setFont(new Font("宋体", Font.PLAIN, 20));
labelRangeMaxAge.setFont(new Font("宋体", Font.PLAIN, 20));
JTextField textName = new JTextField(22);
JTextField textPath = new JTextField(22);
JTextField textMinAge = new JTextField(8);
JTextField textMaxAge = new JTextField(8);
JButton btnNameQuery = new JButton(" 姓名查询 ");
JButton btnPathQuery = new JButton(" 路线查询 ");
JButton btnRangeQuery = new JButton("年龄范围查询");
JButton btnDelete = new JButton("删除");
JButton btnUpdate = new JButton("修改");
JButton btnAdddate = new JButton("增加");
btnNameQuery.setPreferredSize(new Dimension(120, 25));
btnPathQuery.setPreferredSize(new Dimension(120, 25));
btnRangeQuery.setPreferredSize(new Dimension(120, 25));
btnDelete.setPreferredSize(new Dimension(80, 25));
btnUpdate.setPreferredSize(new Dimension(80, 25));
btnAdddate.setPreferredSize(new Dimension(80, 25));
//往展示面板放组件
panel.add(lableName);
panel.add(textName);
panel.add(btnNameQuery);
panel.add(labelPath);
panel.add(textPath);
panel.add(btnPathQuery);
panel.add(labelRangeMixAge);
panel.add(textMinAge);
panel.add(labelRangeMaxAge);
panel.add(textMaxAge);
panel.add(btnRangeQuery);
panel.add(btnDelete);
panel.add(btnUpdate);
panel.add(btnAdddate);
//此用于一进入界面展示所有数据
John2.dataQuery("无", 1);
model = new DefaultTableModel(dataName, John2.columeNames);
John2.table = new JTable(model);
//创建滚动面板
JScrollPane jScrollPane = new JScrollPane(John2.table);
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane.setPreferredSize(new Dimension(500, 50));
frame.add(panel, BorderLayout.NORTH);
frame.add(jScrollPane, BorderLayout.CENTER);
// 姓名查询 按钮
btnNameQuery.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[][] nameQuery;
JFrame frame1 = new JFrame("查询界面");
frame1.setSize(500, 500);
frame1.setLocation(700, 300);
frame1.setLayout(new BorderLayout());
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
String name = textName.getText();
if (textName.getText().trim().equals("")) { //作用是 当输入为空,显示全部内容
nameQuery = John2.dataQuery(name, 1);
} else {
nameQuery = John2.dataQuery(name, 2);
}
DefaultTableModel model = new DefaultTableModel(nameQuery, columeNames);
JTable table1 = new JTable(model);
JScrollPane jScrollPane = new JScrollPane(table1);
frame1.add(jScrollPane, BorderLayout.CENTER);
}
});
//年龄范围查询 按钮
btnRangeQuery.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[][] rangeQuery;
JFrame frame1 = new JFrame("查询界面");
frame1.setSize(500, 500);
frame1.setLocation(700, 300);
frame1.setLayout(new BorderLayout());
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
//作用是 当输入为空,显示全部内容
if (textMinAge.getText().trim().equals("") || textMaxAge.getText().trim().equals("")) {
rangeQuery = John2.dataQuery("", 1);
} else {
int min = Integer.parseInt(textMinAge.getText());
int max = Integer.parseInt(textMaxAge.getText());
rangeQuery = John2.rangeQuery(min, max);
}
DefaultTableModel model = new DefaultTableModel(rangeQuery, columeNames);
JTable table1 = new JTable(model);
JScrollPane jScrollPane = new JScrollPane(table1);
frame1.add(jScrollPane, BorderLayout.CENTER);
}
});
//路线查询 按钮
btnPathQuery.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[][] nameQuery;
JFrame frame1 = new JFrame("查询界面");
frame1.setSize(500, 500);
frame1.setLocation(700, 300);
frame1.setLayout(new BorderLayout());
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
String path = textPath.getText();//为适应调用函数,临时用字符串接收
if (textPath.getText().trim().equals("")) {
nameQuery = John2.dataQuery(path, 1);
} else {
nameQuery = John2.dataQuery(path, 3);
}
DefaultTableModel model = new DefaultTableModel(nameQuery, columeNames);
JTable table1 = new JTable(model);
JScrollPane jScrollPane = new JScrollPane(table1);
frame1.add(jScrollPane, BorderLayout.CENTER);
}
});
//删除事件处理
btnDelete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent eb) {
dataQuery(null,1);
String[] options = {"确认", "取消"};
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int row = table.getSelectedRow();//获取被选中的行
if (row >= 0 ) {
String id = (String) table.getValueAt(row, 0);//获取单元格值
tableModel.removeRow(row);
dataDelete(id);//删除库里的数据
JOptionPane.showMessageDialog(null, "删除成功");
table.updateUI();//刷新
}
}
});
//修改事件处理
btnUpdate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent eb) {
int updateRow = table.getSelectedRow();//获取被选中的行
dataQuery(null,1);
if (updateRow >= 0 && updateRow < rowCount) {
JFrame frame1 = new JFrame("修改界面");
frame1.setSize(400, 300);
frame1.setLocation(700, 300);
frame1.setLayout(new BorderLayout());
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
JPanel panel = new JPanel();//显示最上面的提示信息
panel.setPreferredSize(new Dimension(200, 80));
JLabel lableId = new JLabel("车牌号 ");
JLabel labelName = new JLabel("司机姓名 ");
JLabel labelAge = new JLabel("年龄 ", JLabel.LEFT);
JLabel labelPath = new JLabel("路线号 ");
JLabel labelStartDesPoint = new JLabel("起终点 ");
JLabel labelCharge = new JLabel(" 票价 ");
lableId.setFont(new Font("宋体", Font.PLAIN, 20));
labelName.setFont(new Font("宋体", Font.PLAIN, 20));
labelAge.setFont(new Font("宋体", Font.PLAIN, 20));
labelPath.setFont(new Font("宋体", Font.PLAIN, 20));
labelStartDesPoint.setFont(new Font("宋体", Font.PLAIN, 20));
labelCharge.setFont(new Font("宋体", Font.PLAIN, 20));
//将选择行获取的列强转为 String,将其作为初始文本
JTextField textId = new JTextField((String) table.getValueAt(updateRow, 0), 23);
JTextField textName = new JTextField((String) table.getValueAt(updateRow, 1), 23);
JTextField textAge = new JTextField((int) table.getValueAt(updateRow, 2) + "", 23);
JTextField textPath = new JTextField((int) table.getValueAt(updateRow, 3) + "", 23);
JTextField textStartDesPoint = new JTextField((String) table.getValueAt(updateRow, 4), 23);
JTextField textCharge = new JTextField((int) table.getValueAt(updateRow, 5) + "", 23);
textId.setEditable(false);//设定车牌号不可修改
JButton btnConfirm = new JButton(" 确定 ");
JButton btnCancel = new JButton(" 取消 ");
btnConfirm.setPreferredSize(new Dimension(100, 20));
btnCancel.setPreferredSize(new Dimension(100, 20));
btnCancel.setLocation(150, 200);
panel.add(lableId);
panel.add(textId);
panel.add(labelName);
panel.add(textName);
panel.add(labelAge);
panel.add(textAge);
panel.add(labelPath);
panel.add(textPath);
panel.add(labelStartDesPoint);
panel.add(textStartDesPoint);
panel.add(labelCharge);
panel.add(textCharge);
panel.add(btnConfirm);
panel.add(btnCancel);
frame1.add(panel);
//修改完以后,对输入的数据传输到数据库
btnConfirm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String id = textId.getText();
String name = textName.getText();
int age = Integer.parseInt(textAge.getText());
int path = Integer.parseInt(textPath.getText());
String startDesPoint = textStartDesPoint.getText();
int charge = Integer.parseInt(textCharge.getText());
if (!name.equals((String) table.getValueAt(updateRow, 1))) {
table.setValueAt(name, updateRow, 1);
dataUpdata(name, id, 1);
}
if (age != (int) table.getValueAt(updateRow, 2)) {
String ages = age+"";
table.setValueAt(age, updateRow, 2);
dataUpdata(ages, id, 2);
}
if (path != (int) table.getValueAt(updateRow, 3)) {
String paths = path + "";
table.setValueAt(path, updateRow, 3);
dataUpdata(paths, id, 3);
}
if (!startDesPoint.equals((String) table.getValueAt(updateRow, 4))) {
table.setValueAt(startDesPoint, updateRow, 4);
dataUpdata(startDesPoint, id, 4);
}
if (age != (int) table.getValueAt(updateRow, 5)) {
String charges = charge + "";
table.setValueAt(charge, updateRow, 5);
dataUpdata(charges, id, 5);
}
table.updateUI();
JOptionPane.showMessageDialog(null, "修改成功");
}
});
//修改到中途,突然想放弃修改
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"取消修改");
}
});
} else {
}
}
});
//添加事件处理
btnAdddate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent eb) {
JFrame frame1 = new JFrame("修改界面");
frame1.setSize(400, 300);
frame1.setLocation(700, 300);
frame1.setLayout(new BorderLayout());
frame1.setVisible(true);
frame1.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 80));
JLabel lableId = new JLabel("车牌号 ");
JLabel labelName = new JLabel("司机姓名 ");
JLabel labelAge = new JLabel("年龄 ", JLabel.LEFT);
JLabel labelPath = new JLabel("路线号 ");
JLabel labelStartDesPoint = new JLabel("起终点 ");
JLabel labelCharge = new JLabel(" 票价 ");
lableId.setFont(new Font("宋体", Font.PLAIN, 20));
labelName.setFont(new Font("宋体", Font.PLAIN, 20));
labelAge.setFont(new Font("宋体", Font.PLAIN, 20));
labelPath.setFont(new Font("宋体", Font.PLAIN, 20));
labelStartDesPoint.setFont(new Font("宋体", Font.PLAIN, 20));
labelCharge.setFont(new Font("宋体", Font.PLAIN, 20));
//将选择行获取的列强转为 String,将其作为初始文本
JTextField textId = new JTextField( 23);
JTextField textName = new JTextField(23);
JTextField textAge = new JTextField( 23);
JTextField textPath = new JTextField(23);
JTextField textStartDesPoint = new JTextField(23);
JTextField textCharge = new JTextField(23);
JButton confirmAdd = new JButton(" 确定 ");
JButton btnCancel = new JButton(" 取消 ");
confirmAdd.setPreferredSize(new Dimension(100, 20));
btnCancel.setPreferredSize(new Dimension(100, 20));
btnCancel.setLocation(150, 200);
panel.add(lableId);
panel.add(textId);
panel.add(labelName);
panel.add(textName);
panel.add(labelAge);
panel.add(textAge);
panel.add(labelPath);
panel.add(textPath);
panel.add(labelStartDesPoint);
panel.add(textStartDesPoint);
panel.add(labelCharge);
panel.add(textCharge);
panel.add(confirmAdd);
panel.add(btnCancel);
frame1.add(panel);
confirmAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)throws NumberFormatException {
try {
String id = textId.getText();
String name = textName.getText();
int age = Integer.parseInt(textAge.getText());
int path = Integer.parseInt(textPath.getText());
String startDesPoint = textStartDesPoint.getText();
int charge = Integer.parseInt(textCharge.getText());
if(!textId.getText().equals("") && !textName.getText().equals("")&&
!textAge.getText().equals("") && !textPath.getText().equals("")&&
!textStartDesPoint.getText().equals("")&& !textCharge.getText().equals("")){
dataAdd(id,name,age,path,startDesPoint,charge);//在数据库中添加数据
dataName[rowCount][0] = id;//在表中添加数据
dataName[rowCount][1] = name;
dataName[rowCount][2] = age;
dataName[rowCount][3] = path;
dataName[rowCount][4] = startDesPoint;
dataName[rowCount][5] = charge;
//更新表格
John2.dataQuery("无", 1);
John2.model = new DefaultTableModel(dataName,columeNames);
John2.table.setModel( John2.model);
table.updateUI();//刷新
JOptionPane.showMessageDialog(null, "新增数据成功");
frame1.dispose();//提示新增成功后 就把窗口关闭
}else{
JOptionPane.showMessageDialog(null,"输入有误,请正确输入");
}
} catch (Exception ex) {
ex.printStackTrace();
}finally {
frame1.dispose();
}
}
});
//修改到中途,突然想放弃修改
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"取消新增数据");
}
});
}
});
}
//数据库单个字段查询(姓名,路线)
public static Object[][] dataQuery(String item,int num){
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
Object[][] nameQuery = new Object[80][6];
try {
//建立连接
connection = John.getConnection();
//构造sql
String sql;
if(num == 1) {
sql = "select * from busdriver order by age";
statement = connection.prepareStatement(sql);
}
if(num == 2) {
sql = "select * from busdriver where name like \"%\"?\"%\" order by age";
statement = connection.prepareStatement(sql);
statement.setString(1, item);
}
if(num == 3) {
int pathInt = Integer.parseInt(item);
sql = "select * from busdriver where path = ? order by age";
statement = connection.prepareStatement(sql);
statement.setInt(1,pathInt );
}
rowCount = 0;
//执行sql
assert statement != null;//由于是查询,结果可能为空,因此要有一个中断器避免此情况的继续发生
resultSet = statement.executeQuery();
//4.对遍历结果进行检查
for(int i =0;resultSet.next();i++) {
dataName[i][0] = resultSet.getString("id");
dataName[i][1] = resultSet.getString("name");
dataName[i][2] = resultSet.getInt("age");
dataName[i][3] = resultSet.getInt("path");
dataName[i][4] = resultSet.getString("startdespoint");
dataName[i][5] = resultSet.getInt("charge");
nameQuery[i][0] = resultSet.getString("id");
nameQuery[i][1] = resultSet.getString("name");
nameQuery[i][2] = resultSet.getInt("age");
nameQuery[i][3] = resultSet.getInt("path");
nameQuery[i][4] = resultSet.getString("startdespoint");
nameQuery[i][5] = resultSet.getInt("charge");
rowCount++;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//回收资源
John.close(connection,statement,resultSet);
}
return nameQuery;
}
//数据库年龄范围查询
public static Object[][] rangeQuery(int min ,int max ){
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
Object[][] nameQuery = new Object[80][6];
try {
//建立连接
connection = John.getConnection();
//构造sql
String sql;
sql = "select * from busdriver where age >= ? and age <= ? order by age";
statement = connection.prepareStatement(sql);
statement.setInt(1,min);
statement.setInt(2,max);
//执行sql
resultSet = statement.executeQuery();
//4.对遍历结果进行检查
for(int i =0;resultSet.next();i++) {
dataName[i][0] = resultSet.getString("id");
dataName[i][1] = resultSet.getString("name");
dataName[i][2] = resultSet.getInt("age");
dataName[i][3] = resultSet.getInt("path");
dataName[i][4] = resultSet.getString("startdespoint");
dataName[i][5] = resultSet.getInt("charge");
nameQuery[i][0] = resultSet.getString("id");
nameQuery[i][1] = resultSet.getString("name");
nameQuery[i][2] = resultSet.getInt("age");
nameQuery[i][3] = resultSet.getInt("path");
nameQuery[i][4] = resultSet.getString("startdespoint");
nameQuery[i][5] = resultSet.getInt("charge");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//回收资源
John.close(connection,statement,resultSet);
}
return nameQuery;
}
//数据的删除
public static void dataDelete(String id){
Connection connection = null;
PreparedStatement statement = null;
try {
//建立连接
connection = John.getConnection();
//构造sql
String sql;
sql = "delete from busdriver where id = ? ";
statement = connection.prepareStatement(sql);
statement.setString(1, id);
//执行sql
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//回收资源
John.close(connection,statement,null);
}
}
//数据的修改
public static void dataUpdata(String attribute,String id,int num){
Connection connection = null;
PreparedStatement statement = null;
try {
//建立连接
connection = John.getConnection();
//构造sql
String sql;
if(num == 1)
{
sql = "update busdriver set name = ? where id = ? ";
statement = connection.prepareStatement(sql);
statement.setString(1, attribute);
statement.setString(2,id);
}
if(num == 2)
{
int age = Integer.parseInt(attribute);
sql = "update busdriver set age = ? where id = ?";
statement = connection.prepareStatement(sql);
statement.setInt(1, age);
statement.setString(2,id);
}
if(num == 3)
{
int path = Integer.parseInt(attribute);
sql = "update busdriver set path = ? where id = ?";
statement = connection.prepareStatement(sql);
statement.setInt(1, path);
statement.setString(2,id);
}
if(num == 4)
{
sql = "update busdriver set startdespoint = ? where id = ?";
statement = connection.prepareStatement(sql);
statement.setString(1, attribute);
statement.setString(2,id);
}
if(num == 5)
{
int charge = Integer.parseInt(attribute);
sql = "update busdriver set charge = ? where id = ?";
statement = connection.prepareStatement(sql);
statement.setInt(1, charge);
statement.setString(2,id);
}
//执行sql
assert statement != null;
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//回收资源
John.close(connection,statement,null);
}
}
//数据的添加
public static void dataAdd(String id, String name,int age,int path,String startdespoint ,int charge){
Connection connection = null;
PreparedStatement statement = null;
try {
//建立连接
connection = John.getConnection();
//构造sql
String sql;
sql = "insert into busdriver values(?,?,?,?,?,?) ";
statement = connection.prepareStatement(sql);
statement.setString(1, id);
statement.setString(2, name);
statement.setInt(3, age);
statement.setInt(4, path);
statement.setString(5, startdespoint);
statement.setInt(6, charge);
//执行sql1
statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//回收资源
John.close(connection,statement,null);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(John2::createAndShowGUI);
}
}
第二个代码类
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.*;
import javax.sql.DataSource;
public class John{
//放着数据库名字
private static String url = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&&useSSL=false";
private static String username ="root";
private static String password = "数据库密码";
//1.创建数据源
private static DataSource dataSource = new MysqlDataSource();
//2.通过静态代码块完成 URL协议,数据库用户和密码的设置
static {
((MysqlDataSource) dataSource).setURL(url);
((MysqlDataSource) dataSource).setUser(username);
((MysqlDataSource) dataSource).setPassword(password);
}
//3.提供外部一个方法连接数据库
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//4.资源的回收
public static void close(Connection connection, PreparedStatement statement , ResultSet resultSet) {
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
下面讲如何使用上面这些代码,
1, 在IDEA 中 创建一个class 类文件,文件名 John2 ,创建后 它会自动生成以下代码
public class John2{
}
**2,**你把这个代码删掉,把我的第一个代码类完全放进去, 然后再创建第二个 class类 ,文件名 John ,方法同上,然后把我第二个代码类 放进去即可。
(ps: John2是我给自己起的别名,你在了解我的代码逻辑后,也可以改其他的名字,但刚开始不建议,因为它会大量报错)
完成以上步骤后,你还需要做以下事情:
**3,**在第二个代码段中 有个中文,你把它改成 你下载MySQL 时设置的密码,
4, 然后在MySQL中 创建一个数据库,起名 test, 再创建两个表,一个usertable 和一个busdriver,参照我下面放的两个数据表的详情,起相同的列名,放一些数据。
5, 在MySQL中完成以上事情后,你需要在IDEA中安装数据库驱动包,这个步骤 ,你去我的博客中查看我的 名为 JDBC连接数据库驱动 的博文,里面讲的有 如何下载,以及如何把驱动包 放进IDEA ,里面讲的很详细。
以下是MySQL 信息表格式及内容
下面是第一个 信息表,表格名为 usertable ,有两个属性名
下面就是usertable 表的具体内容,放的是登录界面中的 管理员用户名 和 密码 ,在登录界面 输入任意一个管理员与其相应的密码,即可登录成功 (由于里面涉及朋友信息,故做了处理哈 )
下面这个表是 第二个表,表名 busdriver ,里面放了六个属性
下面这个放着第二个表里的信息
总结:
1,创建两个 名为 John2 和 John 的class文件 ,把两个代码类分别放进去
2,把第二个代码段的数据库密码改为自己的
3,在MySQL 中创建 名为 test的数据库,和两个名为 usertable 和 busdriver的table表
4, 在我的博客中 搜索 JDBC连接数据库驱动 的博文,找到与你数据库适配的驱动器,下载并放在IDEA中。
对了,你的MySQL中要插入中文数据,可能会报错, 自己去搜索下 如何设置 MySQL的字符集,此类博客很多,参照里面的方法把自己的 MySQL字符集改成 utf8 ,一定要是utf8 ,不能是gbk,会和我这里面的URL协议冲突而报错。
我把我能想到的都写了,你按照我的方法,完全照做后,是能看到和效果图一样的结果的。
写到最后:
希望能尽可能的帮到看到它的你!
课设题目很多,我的也只是其中一个,但是你成功运行我的代码后,改一些关键词即可。
下面附了课设报告,这个报告只是个模板,里面内容与我的代码效果样图不同,仅供参考。
链接:https://pan.baidu.com/s/1J2vKqcXVgSGCXZY9QjV7YA
提取码:udxh