person小项目
所用的IDE为idea,数据库用的是Navicat for MySQL。
好了,开始正题,今天要做person小项目,有以下几个步骤:
- Navicat for MySQL数据库的构建,以及如何建person表
- 在idea中导入mysql-connector-java-5.0.8-bin.jar包
- 创建person小项目的目录
- 具体代码的书写
第一步,Navicat for MySQL数据库的构建,以及如何person建表
Navicat for MySQL是一套管理和开发MySQL或MariaDB的理想解决方案,支持单一程序,可同时连接到MySQL和MariaDB。这个功能齐备的前端软件为数据库管理、开发和维护提供了直观而强大的图形界面,给MySQL或MariaDB新手以及专业人士提供了一组全面的工具。 —— [ 百度百科 ]
界面如图
其中,information_schema,mysql,performance_schema,test这四个数据库是这个软件自带的,我新建了两个数据库,命名规则是“db_object”.
新建person表,字段:id,name,age,description(注意数据类型及是否空值)
必须要强调一下,主键这个东西,因为这个吃了好多亏,出现了各种bug。。
主键:确定一个字段的唯一标识,一般都设置ID为主键,而且要设置自动递增。(被设置成主键的字段,务必是唯一标识)
很搞笑的一点,不管是int型,还是varchar型,长度就是最普通的长度(不用转换成二进制什么的),比如说:varchar的长度是6,那么“小旺财666”就是长度6,即为数据的最大值
第二步,在idea中导入mysql-connector-java-5.0.8-bin.jar包
首先要在WEB-INF文件夹里新建一个lib文件夹,把相应的jar包拖动到WEB-INF文件夹中,然后鼠标右键选择Add as Library,经过一系列的OK之后,就可以用这个jar包了。
第三步,创建person小项目的目录
注意在src中创建文件夹的时候,它可能有点怕生,要和之前的com.test黏在一起,这时候就可以选择Excluded(排斥的)把它们拆散。
如图,dao文件夹是红色的,不能在里面创建Java.class。这时候呢,老套路,Mark Directory As(把目录变为) Cancel Excluded(取消排斥)
依次创建com.test父目录,以及其下的三个子目录dao,entity,test。
-dao目录(Data Access Object), 数据访问对象是第一个面向对象的数据库接口
-entity目录(实体),实体就是一个特定的软件模块。
-test目录,最终的试行测试。
第四步,具体代码的书写
-PersonDao文件
public class Persondao {
private final static String DRIVER ="com.mysql.jdbc.Driver";
private final static String URL = "jdbc:mysql://localhost:3306/db_person";
private final static String USERNAME = "root";
private final static String PASSWORD = "root";
首先,你必须定义4个私有的静态全局变量。
/**
*添加一个人
* @param person
* @return boolean
*/
public static boolean insert(Person person) {
boolean flag = false;//
try {
Class.forName(DRIVER);//加载数据库驱动
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
/*
使用jar包中的connection接口,并通过DriveManager类的静态方法getConnection()创建连接对象conn
*/
String sql = "INSERT INTO t_person(name,age,description) VALUES(?,?,?)";//编写sql语句
PreparedStatement ps = conn.prepareStatement(sql);////创建预处理对象ps
ps.setString(1, person.getName());
ps.setInt(2, person.getAge());
ps.setString(3, person.getDescription());
if (ps.executeUpdate() > 0) {
flag = true;
}
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
注意,ps.setString(1,per.getName)这个必须严格按照顺序来,1,2,3在你建好的t_person表中,对应的就是name,age,description
/**
* 删除一个人
* @param id
* @return
*/
public static boolean delete(int id){
boolean flag = false;
try{
Class.forName(DRIVER);//加载数据库驱动
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//建立数据库连接
String sql = "DELETE FROM t_person WHERE id="+id;//编写sql语句
PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
if(ps.executeUpdate() > 0) {
flag = true;
}
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 根据ID改变一个人
* @param id
* @return
*/
public static boolean update(Person person,int id){
boolean flag = false;
try{
Class.forName(DRIVER);//加载数据库驱动
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//连接数据库
String sql = "UPDATE t_person SET name=?,age=?,description=? WHERE id= "+id;//编写sql语句
PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
ps.setString(1,person.getName());
ps.setInt(2,person.getAge());
ps.setString(3,person.getDescription());
if(ps.executeUpdate() > 0) {
flag = true;
}
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
*根据ID查找一个人
* @param id
* @return
*/
public static Person SelectById(int id){
Person person = null;
ResultSet rs = null;
try{
Class.forName(DRIVER);//加载数据库驱动
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//数据库连接
String sql = "SELECT * FROM t_person WHERE id="+id;//编写sql语句
PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
rs = ps.executeQuery();//在PrepareStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象
while (rs.next())//若当前语句不是最后一行,则执行循环
{
/*
ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针下移
*/
person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
person.setDescription(rs.getString("description"));
}
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return person;
}
/**
* 搜素所有的人
* @return
*/
public static List<Person> select(){
List<Person> list = new ArrayList<Person>();
ResultSet rs = null;
try{
Class.forName(DRIVER);//加载数据库驱动
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//数据库连接
String sql = "SELECT * FROM t_person";//编写sql语句
PreparedStatement ps = conn.prepareStatement(sql);//sql执行语句
rs = ps.executeQuery();
while (rs.next())
{
Person person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
person.setDescription(rs.getString("description"));
list.add(person);
}
ps.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
-Person文件
public class Person {
private int id;//主键
private String name;//姓名
private int age;//年龄
private String description;//描述
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
特别地,在根据ID查找一个人的时候
/**
* 需要把toString()方法重写。
* @return
*/
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", description='" + description + '\'' +
'}';
}
}
-test
public class test {
public static void main(String[] args){
// Person person = new Person();
// person.setAge(0);
// person.setName("吴晓阳");
// person.setDescription("是个傻逼");
// System.out.println(Persondao.insert(person));//增加一个人
// System.out.println(Persondao.delete(2));//删除一个人
// System.out.println(Persondao.update(person,4));
// Person person =Persondao.SelectById(4);
// System.out.println(person);
List<Person> list = Persondao.select();//查找列表
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
MySql保留的关键字
请特别注意,在写sql语句的时候,之前在Navicat定义的字段名称不能与上述关键词相同,会报错的。。
person小项目的更多相关文章
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- IOS-小项目(饿了么 网络部分 简单实现)
在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是 ...
- Andriod小项目——在线音乐播放器
转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...
- 模拟XShell的小项目
不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可 ...
- 小项目特供 贪吃蛇游戏(基于C语言)
C语言写贪吃蛇本来是打算去年暑假写的,结果因为ACM集训给耽搁了,因此借寒假的两天功夫写了这个贪吃蛇小项目,顺带把C语言重温了一次. 是发表博客的前一天开始写的,一共写了三个版本,第一天写了第一版,第 ...
- 【PHP小项目使用MVC架构】
小项目名称是雇员管理系统. mvc是一种项目的开发模式,中文名称为模式视图控制器,是强制程序员将数据的输入.处理.输出分开的一种开发模式. 在这个小项目中,控制器使用service作为后缀名. 项目u ...
- MOGRE学习笔记(3)--MOGRE小项目练习
学习OGRE有一段时间了,领导为了检测学习效果,根据已有C++项目,弄一个类似的用c#语言编写的小项目. 配置:win7,DirectX2009,vs2010. 项目要求: 1.有Ogre窗口(尺寸1 ...
- Web前端开发:SQL Jsp小项目(一)
Jsp的学习算是告一段落,针对这段时间的学习,写了一个Jsp小项目来巩固学到的知识. 框架示意图 User list process UserAdd process 需要的界面效果: 需要工具:Ecl ...
- Ado.Net小练习02(小项目CUID
前台界面: 后台代码: namespace ado.net小项目cuid { public partial class Form1 : Form { //连接字符串 ...
- testservice小项目总结
关于自做小项目testservice的总结: 1.Activity与Service的绑定及之间的通信: 1)关于Activity和Service的生命周期的理解: 2)bindService方法中Se ...
随机推荐
- html编码常见的有utf-8和gb2312编码等,应该如何判断选择?
html如何选择编码,常见utf-8和gb2312编码如何判断选择 一.首先了解目前国内中文网页常用编码是utf-8 还是gb2313. 比如: 百度搜索 网页使用utf-8 腾讯新闻 网页使用utf ...
- 77. Combinations(回溯)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...
- 38初识xml
XML(可扩展标记语言)是一种用于记录多种数据类型的标记语言.使用XML可以将各类型的文档定义为容易读取的格式,便于用户读取.而且,在应用程序中使用XML,可以轻松实现数据交换. QT中提供两种访问X ...
- Codeforces Round #523 (Div. 2) Solution
A. Coins Water. #include <bits/stdc++.h> using namespace std; int n, s; int main() { while (sc ...
- PHP保存Base64图片base64_decode的问题 文件打不开的问题
PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进 ...
- javascript原生事件总结
javascript原生的事件,总结了一下,包括事件流.处理函数.事件对象这几样东西.而在兼容性方面,主要是老牌ie8以及以下和现代浏览器的差异,也就是ie和DOM事件标准的差异. 事件流这个事件流i ...
- 《JDK 8.0 学习笔记》1~3章
第一章 Java平台概论 了解Java的发展历程和相关术语如JDK.JVM.JRE等 第二章 从JDK到IDE 书本介绍了新建Java程序的注意事项以及在cmd和Eclipse环境下如何运行Java, ...
- ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory 【学习笔记】【原创】
作者:庄泽彬(欢迎转载,请注明作者) 说明:千辛万苦终于在ubuntu18.04上安装好cuda9.1与cudnn7.0.5,但是导入import tensorflow as tf却报了这个错误. 上 ...
- postman中如何使用OAuth
https://learning.getpostman.com/docs/postman/sending_api_requests/authorization/ Authorization The a ...
- Mysql加锁处理分析-基于InnoDB存储引擎
MVCC MySQL INNODB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-VERSION Concurrency Control).MVCC最大的好处,相信也是耳熟能详: ...