该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解

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数据库高级编程的更多相关文章

  1. 20145208 实验三 Java面向对象程序设计

    20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...

  2. 实验三 Java基本程序设计(2)

                                             实验三 Java基本程序设计(2)                                           ...

  3. 20145325张梓靖 实验五 "JAVA的网络编程"

    20145325张梓靖 实验五 "JAVA的网络编程" 实验内容 使用 JVAV语言 进行网络编程 对明文进行加密 设计过程 我完成的是客户端,服务端同伴 20145308刘昊阳 ...

  4. 实验三 Java基本程序设计

    第一部分:理论知识复习部分 第一章:第一章介绍的是Java程序设计的概述,通过两周的Java学习中,重温了Java“白皮书的关键术语,更深一步理解乐11个关键术语. 第二章:本章主要介绍如何安装JDK ...

  5. Java Web高级编程(三)

    使用过滤器改进应用程序 一.过滤器的目的 过滤器是可以拦截访问资源的请求.资源的响应或者同时拦截两者的应用组件.过滤器可以检测和修改请求和响应,同时也可以拒绝.重定向或转发请求.javax.servl ...

  6. 实验三 java敏捷开发与XP

    一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...

  7. Java Web高级编程(一)

    Servlet 一.创建Servlet类 在Java EE中,Servlet用来接收和响应终端用户的请求.Servlet是所有Web应用程序的核心类,是唯一既可以直接处理和响应用户请求,也可以将处理工 ...

  8. 实验三 Java敏捷开发与xp实现

    实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实 ...

  9. 实验三 Java猜数字游戏开发

    课程:Java实验   班级:201352     姓名:程涵  学号:20135210 成绩:             指导教师:娄佳鹏   实验日期:15.06.03 实验密级:         ...

随机推荐

  1. idea一键生成mybatis工具

    1.创建maven项目,导包 <build> <plugins> <plugin> <groupId>org.mybatis.generator< ...

  2. 初识linux内核漏洞利用

    0x00 简介 之前只接触过应用层的漏洞利用, 这次第一次接触到内核层次的,小结一下. 0x01 概况 这次接触到的,是吾爱破解挑战赛里的一个题,给了一个有问题的驱动程序,要求在ubuntu 14.0 ...

  3. Firefox 的User Agent 将移除 CPU 架构信息

    Mozilla 计划从 Firefox 的 User Agent(用户代理)和几个支持的 API 中移除 CPU 架构信息,以减少 Firefox 用户的“数字指纹”.Web 浏览器会自动向用户在应用 ...

  4. JavaWeb零基础入门-02 开发环境安装

    大家好!我又来了,上一篇我们讲了一些基础概念:Html.Web服务器.数据库.Http和JavaWeb三大组件,它们是什么,有什么作用,都有了初步的了解.接下来我们进入学习JavaWeb的第一步,开发 ...

  5. 如何在 Ubuntu 上安装 pip

    1.为 Python 2 安装 pip 首先,确保已经安装了 Python 2. 在 Ubuntu 上,可以使用以下命令进行验证 python2 --version 如果没有错误并且显示了 Pytho ...

  6. CentOS 7 中英文桌面安装步骤详细图解

    https://www.cnblogs.com/haoliyou/p/7694868.html

  7. Gym - 101173H Hangar Hurdles (kruskal重构树/最小生成树+LCA)

    题目大意:给出一个n*n的矩阵,有一些点是障碍,给出Q组询问,每组询问求两点间能通过的最大正方形宽度. 首先需要求出以每个点(i,j)为中心的最大正方形宽度mxl[i][j],可以用二维前缀和+二分或 ...

  8. BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]

    数    位    D    P    开    long    long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...

  9. Python 正则表达式Ⅲ

    re.match与re.search的区别 re.match只匹配字符串的开始,如果字符串开始https://www.xuanhe.net/不符合正则表达式,则匹配失败,函数返回None:而re.se ...

  10. jquery dblclick()方法 语法

    jquery dblclick()方法 语法 作用:当双击元素时,会发生 dblclick 事件.当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会发生一次 click.在很短的时间内发生两次 ...