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

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. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  2. tomcat访问日志

    * %a - Remote IP address # 远程ip地址 * %A - Local IP address # 本地ip地址 * %b - Bytes sent, excluding HTTP ...

  3. oracle 数据库安装及jdbc的连接

    今天,我在oracle的官网下载了数据库并进行安装,其中遇到一些问题,在此进行记录. 1.下载,之后,按照网上的教程进行安装,开始遇到 下载之后出现11g 出现ins13001环境不满足最低要求 这个 ...

  4. 2017 CVTE Windows开发一面 3.7

    下午3点接到了个广州打过来的电话,电话面试总体时间比较短,35分钟. 考察内容: 1.讲实习: 因人而异,将了之前公司做的项目,刚好和面的岗位匹配,面试官听完之后还不忘垂壁一下他们的产品. 2.C#事 ...

  5. 【51nod 1824】染色游戏

    题目 有 n 个红球, m 个蓝球,从中取出 x 个红球和 y 个蓝球排成一排的得分是 rx⋅by ,其中 r0=b0=1 . 定义 f(t) 表示恰好取出 t 个球排成一排的所有可能局面的得分之和. ...

  6. Python 面向对象Ⅴ

    基础重载方法 下表列出了一些通用的功能,你可以在自己的类重写: 运算符重载 Python同样支持运算符重载,实例如下: 以上代码执行结果如下所示: 类属性与方法 类的私有属性 __private_at ...

  7. Spring MVC遭遇checkbox的问题解决方案

    转:http://lavasoft.blog.51cto.com/62575/1407213 Spring MVC遭遇checkbox的问题是:当checkbox全不选时候,则该checkbox域的变 ...

  8. oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法

    转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...

  9. JS框架_(JQuery.js)带阴影贴纸标签按钮

    百度云盘 传送门 密码:azo6 纯CSS带阴影贴纸标签按钮效果: <!doctype html> <html> <head> <meta charset=& ...

  10. 「WC 2007」剪刀石头布

    题目链接 戳我 \(Solution\) 直接求很明显不太好求,于是考虑不构成剪刀石头布的情况. 我们现在假设一个人\(i\)赢了\(x\)场,那么就会有\(\frac{x*(x-1)}{2}\) 我 ...