JavaEE-实验三 Java数据库高级编程
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解
1、在MySQL中运行以下脚本
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE customers (
customerID varchar(8) primary key,
name varchar(40) default NULL,
phone varchar(16) default NULL
);
INSERT INTO customers VALUES ('ADDIFK01','Frank Addinsell',
'(718) 555-3911');
INSERT INTO customers VALUES ('ALBIBB01','Bob Albinoni',
'(213) 555-7566');
使用 JDBC编写程序读出数据库表中数据并在Console下如下输出内容

2、调试上面实验指导部分“四、数据库分层设计”部分代码
依据上课时教学内容补充SQLHelper类内容,为其增加
1) 执行带参数的SQL语句方法,含执行Select及CUID两个函数;
public static ResultSet executeQuery(String sql,Object[] params) {
try {
rs= getPreparedStatement(sql,params).executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2) 为其增加返回唯一值得函数(如计算最大值、记录数等);
public static Object executeQueryScala(String sql) {
Object o=null;
try {
rs=executeQuery(sql, null);
if(rs.next()) {
o=rs.getDate(1);
}
if(o!=null)
return o;
else
return null;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pst, DBUtil.connection);
}
}
3) 增加返回集合的函数
public static List<Object[]> executeQueryList(String sql){
Object[] o=new Object[2];
List<Object[]> obs=new ArrayList<Object[]>();
PreparedStatement pst =null;
ResultSet rs =null;
try {
rs = DBUtil.executeQuery(sql, null);
while(rs.next()) { /*未知列数 因此提取不出所有*/
o[0]=(rs.getObject(0));
o[1]=(rs.getObject(0));
obs.add(o);
}
return obs;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pst, DBUtil.connection);
}
}
3、运用上面数据库设计思想,继续完成上次实验。以JDBC技术创建一个通讯录应用程序,要求通讯录中必须含有编号、姓名,性别、电话、地址、Email等等。实现该类并包含添加、删除、修改、按姓名查等几个方法。编写主程序测试。

该程序体量较小 没增加server层 (用于连接dao层与view层)
第一步:编写一个Person联系人类
package entity;
public class Person {
private int pid; //编号
private String name; // 姓名
private String sex; // 性别
private String tel; // 电话
private String address; // 地址
private String email; //email
public Person(int pid, String name, String sex, String tel, String address, String email) {
this.pid = pid;
this.name = name;
this.sex = sex;
this.tel = tel;
this.address = address;
this.email = email;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", name=" + name + ", sex=" + sex + ", tel=" + tel + ", address=" + address
+ ", email=" + email + "]";
}
}
第二步:编写一个PersonDao封装对联系人类的有关操作
package dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import entity.Person;
import util.DBUtil;
public class PersonDao {
//增加人
public void addPerson(Person p){
String sql="insert into customers values(?,?,?,?,?,?);";
Object params[]= {p.getPid(),p.getName(),p.getSex(),p.getTel(),p.getAddress(),p.getEmail()};
DBUtil.executeUpdate(sql, params);
}
// 通过人的编号删除 联系人
public void deletePersonByID(int pid){
String sql="delete from person where pid=?";
Object params[]= {pid};
DBUtil.executeUpdate(sql,params);
}
//通过人的姓名查找联系人,返回一个集合
public List<Person> queryPersonByName(String name){
Person p=null;
List<Person> ps=new ArrayList<Person>();
PreparedStatement pst =null;
ResultSet rs =null;
try {
String sql="select * from person where name=?";
Object params[]= {name};
rs = DBUtil.executeQuery(sql, params);
while(rs.next()) {
int id=rs.getInt("customerID");
String sex=rs.getString("sex");
String tel=rs.getString("tel");
String address=rs.getString("address");
String email=rs.getString("email");
p=new Person(id, name, sex,tel,address,email);
ps.add(p);
}
return ps;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pst, DBUtil.connection);
}
}
// 查询所有人
public List<Person> quaryall(){
Person p=null;
List<Person> ps=new ArrayList<Person>();
PreparedStatement pst =null;
ResultSet rs =null;
try {
String sql="select * from person";
Object params[]= {};
rs = DBUtil.executeQuery(sql, params);
while(rs.next()) {
int id=rs.getInt("pid");
String name=rs.getString("name");
String sex=rs.getString("sex");
String tel=rs.getString("tel");
String address=rs.getString("address");
String email=rs.getString("email");
p=new Person(id, name, sex,tel,address,email);
ps.add(p);
}
return ps;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pst, DBUtil.connection);
}
}
public List<Person> quarybyitems(String strsql) {
Person p=null;
List<Person> ps=new ArrayList<Person>();
PreparedStatement pst =null;
ResultSet rs =null;
try {
String sql="select * from person where 1=1 "+strsql;
Object params[]= {};
rs = DBUtil.executeQuery(sql, params);
while(rs.next()) {
int id=rs.getInt("pid");
String name=rs.getString("name");
String sex=rs.getString("sex");
String tel=rs.getString("tel");
String address=rs.getString("address");
String email=rs.getString("email");
p=new Person(id, name, sex,tel,address,email);
ps.add(p);
}
return ps;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pst, DBUtil.connection);
} }
public boolean update(String strsql) {
String sql="insert person values"+strsql;
Object[] params= {};
return DBUtil.executeUpdate(sql, params);
}
}
第三步:编写一个测试Swing类,有界面使用JTable显示,参考书本上关于JTable控件的使用
演示截图

package view; import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField; import dao.PersonDao;
import entity.Person; public class TestFrm extends JFrame{
private static final long serialVersionUID = 1L;
PersonDao pd=new PersonDao();
JPanel jp1=new JPanel();
Object[] Names1 = {"编号","姓名","性别","电话","地址","email"};
JTable table1;
TestFrm(){
JLabel label1=new JLabel("编号");
JLabel label2=new JLabel("姓名");
JLabel label3=new JLabel("性别");
JLabel label4=new JLabel("电话");
JLabel label5=new JLabel("地址");
JLabel label6=new JLabel("email");
JTextField jt1=new JTextField();
JTextField jt2=new JTextField();
JTextField jt3=new JTextField();
JTextField jt4=new JTextField();
JTextField jt5=new JTextField();
JTextField jt6=new JTextField();
JButton jb1=new JButton("查询");
JButton jb2=new JButton("增加");
JButton jb3=new JButton("删除");
JButton jb4=new JButton("显示所有"); jp1.setLayout(new GridLayout(4, 4));
jp1.add(label1);
jp1.add(jt1);
jp1.add(label2);
jp1.add(jt2);
jp1.add(label3);
jp1.add(jt3);
jp1.add(label4);
jp1.add(jt4);
jp1.add(label5);
jp1.add(jt5);
jp1.add(label6);
jp1.add(jt6);
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3);
jp1.add(jb4);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String strsql="";
if(!jt1.getText().isEmpty())
strsql+=" and pid="+jt1.getText();
if(!jt2.getText().isEmpty())
strsql+=" and name='"+jt2.getText()+"'";
if(!jt3.getText().isEmpty())
strsql+=" and sex='"+jt3.getText()+"'";
if(!jt4.getText().isEmpty())
strsql+=" and tel='"+jt4.getText()+"'";
if(!jt5.getText().isEmpty())
strsql+=" and address='"+jt5.getText()+"'";
if(!jt6.getText().isEmpty())
strsql+=" and email='"+jt6.getText()+"'";
List<Person> list = pd.quarybyitems(strsql); reset(list);
}
});
jb2.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
if(jt1.getText().isEmpty()||jt2.getText().isEmpty()||jt3.getText().isEmpty()||jt4.getText().isEmpty()||jt5.getText().isEmpty()||jt6.getText().isEmpty())
JOptionPane.showMessageDialog(null, "请输入完整!!");
else {
String strsql="("+jt1.getText()+",\""+jt2.getText()+"\",\""+jt3.getText()+"\",\""+jt4.getText()+"\",\""+jt5.getText()+"\",\""+jt6.getText()+"\")";
if(pd.update(strsql)) {
JOptionPane.showMessageDialog(null, "插入成功");
List<Person> list = pd.quaryall();
reset(list);
}else {
JOptionPane.showMessageDialog(null, "插入失败");
}
}
}
});
jb3.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
int pid= (int)table1.getModel().getValueAt(table1.getSelectedRow(), 0);
pd.deletePersonByID(pid);
List<Person> list = pd.quaryall();
reset(list);
}
});
jb4.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
List<Person> list = pd.quaryall();
reset(list);
}
});
List<Person> list = pd.quaryall();
reset(list); setTitle("我的通讯录");
setBounds(600,400,600,350);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
private void reset(List<Person> list){
List<Object[]> b=new ArrayList<Object[]>();
for(Person p:list) {
Object[] o= {p.getPid(),p.getName(),p.getSex(),p.getTel(),p.getAddress(),p.getEmail()};
b.add(o);
}
Object[][] a = (Object[][])b.toArray(new Object[b.size()][]);
table1=new JTable(a,Names1);
getContentPane().removeAll();
add(jp1,BorderLayout.NORTH);
add(new JScrollPane(table1),BorderLayout.CENTER);
validate();
}
public static void main(String[] args) {
new TestFrm();
}
}
DBUtil包代码

此句话作用 用于设置写入数据库与读取数据库数据编码
若遇到mysql中文编码问题 赶紧戳这里解决mysql编码常见问题分享
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; //通用的数据库操作方法
public class DBUtil {
//sql数据库连接字符串
private static final String URL="jdbc:mysql://127.0.0.1:3306/mydatabase?useUnicode=true&characterEncoding=utf8";
//sql用户名 和密码 用作连接用
private static final String USERNAME="root";
private static final String PWD="cc123nice"; public static Connection connection=null;
public static PreparedStatement pst =null;
public static ResultSet rs =null; /*
* 得到PreparedStatement减少代码冗余
*/
public static PreparedStatement getPreparedStatement(String sql,Object[] params) {
//导入驱动,加载具体驱动类
try {
Class.forName("com.mysql.jdbc.Driver");
//与数据库建立链接
connection = DriverManager.getConnection(URL, USERNAME, PWD);
pst=connection.prepareStatement(sql);
if(params!=null) {
for(int i=0;i<params.length;i++){
pst.setObject(i+1,params[i]);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return pst;
}
/*
* 最后关闭所有
*/
public static void closeAll(ResultSet rs,Statement stmt,Connection connection) {
try {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(connection!=null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} /*
* 通用的增删改 通过传入的sql和obj数组确认语句
*/
public static boolean executeUpdate(String sql,Object[] params) {
try {
int count = getPreparedStatement(sql,params).executeUpdate();
if(count>0)
return true;
else
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
} catch (Exception e) {
e.printStackTrace();
return false;
}finally {
closeAll(null, pst, connection);
}
} /*
* 通用的查询(只能返回到ResultSet)之后必须与具体类型耦合
*/
public static ResultSet executeQuery(String sql,Object[] params) { try {
rs= getPreparedStatement(sql,params).executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} }
JavaEE-实验三 Java数据库高级编程的更多相关文章
- 20145208 实验三 Java面向对象程序设计
20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 实验三 Java基本程序设计(2)
实验三 Java基本程序设计(2) ...
- 20145325张梓靖 实验五 "JAVA的网络编程"
20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...
- 实验三 Java基本程序设计
第一部分:理论知识复习部分 第一章:第一章介绍的是Java程序设计的概述,通过两周的Java学习中,重温了Java“白皮书的关键术语,更深一步理解乐11个关键术语. 第二章:本章主要介绍如何安装JDK ...
- Java Web高级编程(三)
使用过滤器改进应用程序 一.过滤器的目的 过滤器是可以拦截访问资源的请求.资源的响应或者同时拦截两者的应用组件.过滤器可以检测和修改请求和响应,同时也可以拒绝.重定向或转发请求.javax.servl ...
- 实验三 java敏捷开发与XP
一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...
- Java Web高级编程(一)
Servlet 一.创建Servlet类 在Java EE中,Servlet用来接收和响应终端用户的请求.Servlet是所有Web应用程序的核心类,是唯一既可以直接处理和响应用户请求,也可以将处理工 ...
- 实验三 Java敏捷开发与xp实现
实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实 ...
- 实验三 Java猜数字游戏开发
课程:Java实验 班级:201352 姓名:程涵 学号:20135210 成绩: 指导教师:娄佳鹏 实验日期:15.06.03 实验密级: ...
随机推荐
- laravel swoole Call to undefined method Illuminate\Events\Dispatcher::fire()
报错: Call to undefined method Illuminate\Events\Dispatcher::fire() Whoops\Run::handleError("Unca ...
- mysql数据库表自增ID批量清零 AUTO_INCREMENT = 0
mysql数据库表自增ID批量清零 AUTO_INCREMENT = 0 #将数据库表自增ID批量清零 SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' AUT ...
- python--moviepy--视频编辑
MoviePy是一个用于视频编辑的python模块,你可以用它实现一些基本的操作(比如视频剪辑,视频拼接,插入标题),还可以实现视频合成,还有视频处理,抑或用它加入一些自定义的高级的特效.总之,它的功 ...
- matplotlib动画
注意:要有动画效果,必须独立窗口:独立窗口的设置方法:https://www.cnblogs.com/liming19680104/p/10614070.html import matplotlib. ...
- 【leetcode】745. Prefix and Suffix Search
题目如下: Given many words, words[i] has weight i. Design a class WordFilter that supports one function, ...
- linux运维、架构之路-MongoDB单机部署
一.MongoDB介绍 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系型数据库和非关系 ...
- 一种sql优化方案
--select @type3Count=count(1) from TWEB_ALogisticsYD bb -- LEFT JOIN dbo.TWEB_BCompanyJJ as B3 WITH( ...
- 删除文件中的 ^M 字符
删除文件中的 ^M 字符 有时候,我们在 Linux 中打开曾在 Win 中编辑过的文件时,会在行尾看到 ^M 字符.虽然,这并不影响什么,但心里面还是有点不痛快.如果想要删除这些 ^M 字符,可以使 ...
- 51 nod 1127最短的包含字符串(尺取法)
1127 最短的包含字符串 收藏 关注 给出一个字符串,求该字符串的一个子串S,S包含A-Z中的全部字母,并且S是所有符合条件的子串中最短的,输出S的长度.如果给出的字符串中并不包括A-Z中的全 ...
- 【杂题】[ARC070F] Honest Or Unkind【交互】
Description 这是一道交互题 有A+B个人,编号从0~A+B-1,其中有A个人是诚实的,B个人是居心叵测的. 你想知道每个人是诚实的还是居心叵测的. 询问可以用二元组(i,j)表示,代表问编 ...