问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java web 数据库访问及传值问题

发布网友 发布时间:2022-04-07 22:49

我来回答

5个回答

懂视网 时间:2022-04-08 03:11

1.数据库的简介
常见数据库:
oracle:是收费
DB2数据库:收费,银行,
SQLServer数据库,中型的数据库
MySQL数据库:被Oracle
SQLite数据库,小型嵌入式的数据库,用在安卓
sybase数据库:没有使用,建模的数据库powerDesigner
都叫关系数据库:实体之间的关系

非关系数据库:mongodb redis

2.mysql的存储结构
    数据库
    数据库表:相当于javabean
    表中的记录:相当于javabean里面的对象

3.标准sql:这种语句不仅可以在mysql数据库里面使用,
4.SQL语言的简介
    Structured Query Language,结构化查询语言
    非过程形语言:不需要依赖任何条件就可以执行
    sql的分类   
    DDL :数据库定义语言:(Data Definition Language)用来定义数据库的对象,如数据表,视图,索引
    DML :数据操作语言,(Data Manipulation Language)曾删改查 :update,
    DCL :数据控制语言:Data Control Language 指用于设置用户权限和控制事务语句
    如grant,revoke,if…else,while,begin transaction
    =========官方分类===========
    DQL:数据查询语言:Data Query Language

5.对数据库进行操作
    要对数据库进行操作,首先连接数据库
    执行这个命令的前提:mysql服务必须是启动的
    打开cmd窗口,在窗口里面输入一个命令
    mysql -u root -p
    -u : username
    -p :password
    输入命令之后,当出现 mysql>,表示连接成功
    创建数据库
    语句:create database 数据库的名称;
    查看数据库(显示当前所有的数据库)
    语句:show databases
    删除数据库
    语句:drop database 要删除的数据库的名称;
    切换数据库
    语句:use 要进入的那个数据库的名称;

6.对数据库表进行操作
(1) 创建数据库表
    如果想要创建表,首先要到某个数据库里面去
    语句:
    create table 表名 (
    字段名称1 字段类型,
    字段名称2 字段类型
     );
    向数据库表里面添加记录时候,如果记录类型是一个字符串类型或者日期类型,
    注意一:字符串类型需要写长度
    注意二:这两个类型的值必须使用引号括起来(单引号)
    字段的类型
    字符串型 
    VARCHAR、CHAR
    如果把字段的类型设置成字符串类型,类型后面必须要加上长度 varchar(20) char(20)
    VARCHAR和CHAR区别:
    char类型长度是固定的
    如果定义char(20),长度固定20,记录比如值aa,到数据库表里面存储的方式 aa加很多空格
    varchar类型长度是可变的
    如果定义varchar(20),记录值是bb,到数据库表里面存储方式:直接存bb,没有空格
    大数据类型
    BLOB、TEXT
    主要用于存储文件到数据库,但是在实际应用中,不可能直接把文件存到数据库里面
    数值型
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    对应于java里面基本数据类型里面 
     byte        short    int long    float   double
    逻辑性 
    BIT
    对应于java基本数据类型的boolean
    日期型
    DATE、TIME、DATETIME、TIMESTAMP
    data:只能表示日期 
    time:只能表示实际
     ==========================
 下面两个类型既可用表示日期,也可以表示时间
    datetime:需要手动输入日期的格式
    TIMESTAMP:不需要手动输入,字段添加当前的日期到数据库表里面
    创建一个员工表 employee
     字段 属性
     id int型
     name 字符型
     sex 字符型
     bir 字符型
     job 字符型
     sal int型
    语句
     create table employee (
      id int,
      name varchar(40),
      sex varchar(20),
      bir varchar(40),
      job varchar(40),
      sal int
     )
 (2) 查看创建的表结构
        语句:desc 表名称;
 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | YES  |     | NULL    |       |
 | name  | varchar(40) | YES  |     | NULL    |       |
 | sex   | varchar(20) | YES  |     | NULL    |       |
 | bir   | varchar(40) | YES  |     | NULL    |       |
 | job   | varchar(40) | YES  |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
     关于desc语句的使用中问题
    如果电脑上安装了杀毒软件,在某些情况下,这个语句不能执行,
    卖咖啡,卡巴斯基....
    (3)创建带约束的标签
    约束有三种
    第一种约束:主键约束
        定义的类型后面
        语句:primary key :非空,唯一性
        自动增长:auto_increment
        每次插入记录,自动增加一个值
        比如添加第一条记录 自动添加一个值 1
        比如添加第二条记录,在之前的基础之上+1
    第二种约束:唯一性约束
        这条记录值不能有重复的
        定义的类型后面 unique
    第三种约束:非空约束
        表里面字段上面不能有空数据,必须有数据
        语句 在name varchar(40) not null,
    创建一个带约束的表
 create table person (
  id int primary key,
  name varchar(40) not null,
  sex varchar(20) not null,
  bir varchar(40) not null,
  job varchar(40) not null,
  sal int
 )

 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | NO   | PRI | NULL    |       |
 | name  | varchar(40) | NO   |     | NULL    |       |
 | sex   | varchar(20) | NO   |     | NULL    |       |
 | bir   | varchar(40) | NO   |     | NULL    |       |
 | job   | varchar(40) | NO   |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
 (4)删除数据库表
    语句 drop table 要删除的表;
 (5)查看数据库里面所有的标签
    语句 show tables;
 (6)向数据库表中添加记录操作
    语句 insert into  要添加的表名称 values(要添加的值);

 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | YES  |     | NULL    |       |
 | name  | varchar(40) | YES  |     | NULL    |       |
 | sex   | varchar(20) | YES  |     | NULL    |       |
 | bir   | varchar(40) | YES  |     | NULL    |       |
 | job   | varchar(40) | YES  |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
 insert into employee values(100,‘lucy‘,‘nv‘,‘2015-11-11‘,‘worker‘,500);
    查看表中的记录
    语句 select * from 表名;
    insert into employee values(100,‘lucy‘,‘nv‘,‘2015-11-11‘,‘worker‘,500)
    insert into employee values(101,‘小黑‘,‘unknow‘,‘2011-01-11‘,‘door‘,1000)
    insert into employee values(102,‘小白‘,‘nv‘,‘1911-11-11‘,‘it‘,2000)
    insert into employee values(103,‘大白‘,‘nan‘,‘1811-11-01‘,‘aaa‘,100000)
 +------+------+------+------------+--------+------+
 | id   | name | sex  | bir        | job    | sal  |
 +------+------+------+------------+--------+------+
 |  100 | lucy | nv   | 2015-11-11 | worker |  500 |
 +------+------+------+------------+--------+------+
 (7)修改表中的记录操作
    语句 update 表名 set 要修改字段名称=要修改成的值  where ....
    练习
    将所有员工薪水修改为5000元。
    update employee set sal=5000;
    将姓名为’lucy’的员工薪水修改为3000元
    update employee set sal=3000 where name=‘lucy‘;
    将姓名为’lucy’的员工薪水修改为4000元,job改为ccc。
    update employee set sal=4000,job=‘ccc‘ where name=‘lucy‘;
    将姓名为’lucy’的员工薪水在原有基础上增加1000元。
    update employee set sal=sal+1000  where name=‘lucy‘;
 (10)删除表中的记录的操作
    语句 delete from 表名称 where...
    如果添加where添加,根据添加进行删除;如果没有添加where,把表里面的所有数据都删除
    练习
    删除表中名称为’lucy’的记录。
    delete from employee where name=‘lucy‘;
    删除表中所有记录。
    delete from employee;
===========================================================
 查询语句是今天最重要的内容,重点掌握


7、查询数据库表中的记录
 (1)sql分类:DQL (数据查询语言)
    语句 select 要查询的字段(写*表示所有的字段) from 要查询的表名称 where  ..........
    关键字 DISTINCT:表示去除表中重复的记录
    创建一个学生表
 create table stu (
  id int,
  sname varchar(40),
  chinese int,
  english int,
  math int
 )

 * +---------+-------------+------+-----+---------+-------+
 | Field   | Type        | Null | Key | Default | Extra |
 +---------+-------------+------+-----+---------+-------+
 | id      | int(11)     | YES  |     | NULL    |       |
 | sname   | varchar(40) | YES  |     | NULL    |       |
 | chinese | int(11)     | YES  |     | NULL    |       |
 | english | int(11)     | YES  |     | NULL    |       |
 | math    | int(11)     | YES  |     | NULL    |       |
 +---------+-------------+------+-----+---------+-------+
 insert into stu values(201,‘熊大‘,120,20,80);
 insert into stu values(202,‘熊二‘,50,100,60);
 insert into stu values(203,‘光头强‘,200,100,500);
 insert into stu values(204,‘李老板‘,300,10,1000);
    练习:
    查询表中所有学生的信息。
    select * from stu;
    查询表中所有学生的姓名和对应的英语成绩。
    select sname,english from stu;
    去除重复的记录
    select distinct * from stu;
 (2)别名操作
    使用 as 别名的名称
    select sname as n1,english as e1 from stu;
    练习
    在所有学生分数上加10分特长分。
    select chinese+10,english+10,math+10 from stu;
    统计每个学生的总分。
    select chinese+english+math as sum1 from stu;
    查询姓名为熊二的学生成绩
    select * from stu where sname=‘熊二‘;
    查询英语成绩大于90分的同学
    select * from stu where english>90;
 (3)显示当前的数据库 : select database();
 (4)select语句里面where条件部分有关键字
    in:记录在范围里面值 
    练习:查询数学分数为60,500的同学
    select * from stu where math in(60,500);
    like:用在模糊查询 
    练习:查询表里面名字里面包含熊的学生
    select * from stu where sname like ‘%熊%‘;
    and:表示条件同时满足
    练习:查询数学分>80和语文分>80的同学
    select * from stu where math>80 and chinese>80;
    or: 表示或者
    练习:查询数学分>80 或者 语文分>50的同学   
    select * from stu where math>80 or chinese>50;

 (5)查询操作排序
    语句:order by 要排序的字段
    order by语句要写在select语句的最后
    默认是升序的排序 order by 要排序的字段 asc
    设置降序排序  order by 要排序的字段 desc
    练习:对数学成绩降序排序后输出。
    select * from stu order by math desc;
8、sql语句中的聚集函数
    封装了一些固定的功能,可以在sql语句里面直接使用这个函数实现某些功能
    count函数:得到表中有多少条记录
    语句 select count(*) from 表名  where....
    练习:
    统计一个班级共有多少学生?
    select count(*) as count1 from stu;
    统计数学成绩大于90的学生有多少个?
    select count(*) from stu where math>500;
    统计总分大于220的人数有多少?    
    select count(*) from stu where math+chinese+english>500;
    sum函数: 求和的操作
    语句 select sum(要求和的字段) from 表名 where.....
    练习:
    统计一个班级数学总成绩?
    select sum(math) from stu;
    统计一个班级语文、英语、数学各科的总成绩
    select sum(chinese),sum(english),sum(math) from stu;
    统计一个班级语文成绩平均分
    平均分:总成绩/总人数
    select sum(chinese)/count(*) from stu;

    avg函数:计算平均数
    语句 select  avg(字段) from 表名 where....
    练习:
    求一个班级数学平均分?
     select avg(math) from stu;
    求一个班级总分平均分
    select avg(math+chinese+english) from stu;
    max函数:计算最大值    
    min函数:计算最小值
    练习 
    求班级数学最高分
     select max(math) from stu;
     select min(math) from stu;

9、sql语句的分组的操作
    使用分组操作  
    语句 group by  要分组字段
    创建一个orders 订单表
 insert into orders(id,product,price) values(1,‘电视‘,900);
 insert into orders(id,product,price) values(2,‘洗衣机‘,100);
 insert into orders(id,product,price) values(3,‘手电‘,90);
 insert into orders(id,product,price) values(4,‘桔子‘,9);
 insert into orders(id,product,price) values(5,‘手电‘,90);
 insert into orders(id,product,price) values(6,‘电视‘,900);
 insert into orders(id,product,price) values(7,‘洗衣机‘,100);
    练习:显示每一类商品的总价
        总价格 使用sum(price)
        每一类商品 group by product
        select product,sum(price) from orders group by product;
    having关键字
    在分组的基础上再进行条件的判断
    group by product having sum(price)>100;
    where后面不能写聚集函数,但是having后面可以写聚集函数
    练习:查询购买了几类商品,并且每类总价大于100的商品
    这种写法从逻辑上没有问题的,但是where后面不能写聚集函数
    select product,sum(price) from orders where sum(price)>100  group by product;
    select product,sum(price) from orders  group by product having sum(price)>100;
10、sql语句里面关键字顺序
    select ... from  ... where  .... group by  ... having  .... order by...
    S-F-W-G-H-O 组合 
==========================================================
 1、对数据库表中的记录插入,修改,删除操作
 2、对数据库表中记录的查询操作

11、mysql可视化工具的使用
    通过cmd窗口,向表中插入中文记录,有乱码问题
    解决方法:找到mysql的安装路径,找到一个文件my.ini
    注意:如果要修改mysql里面的文件,首先备份
    default-character-set=gbk
    可视化工具的使用
    在不建议使用这个工具,先通过cmd窗口把sql语句熟悉之后再使用这个工具
12、mysql里面limit关键字
    imit使用
    首先可以写一个参数  limit  3:查询前三条记录
    也可以写两个参数    limit 2,3 : 第一个参数开始位置,从0开始
                                    第二个参数,从第一个参数位置开始向后取几条记录
    查询数据库表中前几条记录 
    select * from stu limit 2;
    查询数据库表中的第几条到第几条记录
    select * from stu limit 1,2;
    这个关键字一般用在分页功能里面
    limit关键字不是标准sql的一部分,只能在mysql里面使用,在其他数据库里面不能使用
    在oracle里面:使用 rownum关键字
    在sqlserver里面:使用top关键字
13、表之间的关系
    一对多的关系
    一个学生只能在一个学院,但是一个学院有多个学生
    一个员工只能在一个部门,一个部门有多个员工
    多对多的关系
    一门课程可以被多个学生选择,一个学生也可以选择多门课程
    一对一的关系
    在中国,一个男人只能有一个妻子
     一个女人只能有一个丈夫
    一个公司只能有一个注册地址,一个注册地址包含一个公司
14、一对多建表原则
    一个员工只能在一个部门,一个部门有多个员工
    首先要确定一对多里面,谁是多的那一边,谁是一的那一边
    其次在多的那一边创建一个字段,这个字段指向一的那一边的主键

15、多对多的建表原则
    一门课程可以被多个学生选择,一个学生也可以选择多门课程
    首先确定表之间的关系
    其次创建第三张表,在创建两个字段,分别指向那两张表的主键
    用第三张表作为两个表关系表

16、一对一建表原则
    一个公司只能有一个注册地址,一个注册地址包含一个公司
    在实际开发中,一般都把数据存到一张表里面

17、多表之间的查询的操作
    创建一个部门表
 create table dept (
  did int,
  dname varchar(40)
 )

 insert into dept values(101,‘丐帮‘);
 insert into dept values(102,‘少林‘);
 insert into dept values(103,‘血刀门‘);
 insert into dept values(104,‘崆峒‘);

 insert into dept values(105,‘太极门‘);
 insert into dept values(106,‘宣武门‘);

 * 创建一个员工表
 create table employee1 (
  eid int,
  ename varchar(40),
  did int
 )

 insert into employee1 values(2001,‘乔峰‘,101);
 insert into employee1 values(2002,‘田伯光‘,102);
 insert into employee1 values(2003,‘二师兄‘,102);
 insert into employee1 values(2004,‘孙二娘‘,104);
 insert into employee1 values(2005,‘扈三娘‘,103);
 insert into employee1 values(2006,‘苗人凤‘,103);

 insert into employee1 values(2007,‘苗若兰‘,null);
 insert into employee1 values(2008,‘李寻欢‘,null);

 * 查询员工对应的门派显示出来
 select * from dept,employee1

 * 得到结果是 笛卡尔积

 (1)使用内连接进行操作

 * 语法 inner join 表 on 两个表关联的条件

 * 最终语句
 select dept.*,employee1.* from dept inner join employee1 on dept.did=employee1.did;

 * 使用内连接其实实现的是交集操作

 * 还有另外一种方式,也可以实现类似于内连接的效果
 select dept.*,employee1.* from dept,employee1 where dept.did=employee1.did;

 
 (2)使用外连接进行操作
 * 外连接有两种:
 ** 左外连接:left outer join 表 on 两个表关联的条件
 select dept.*,employee1.* from dept left outer join employee1 on dept.did=employee1.did;
 *** 左边的表里面的所有内容都显示出来,右边的表只是显示关联的内容

 ** 右外连接:right outer join 表 on 两个表关联的条件
 select dept.*,employee1.* from dept right outer join employee1 on dept.did=employee1.did;
 *** 效果;右边的表里面所有内容都显示出来,左边的表显示关联的内容

===================================================
 1、掌握对数据库表中记录的操作的语句 (插入,修改,删除语句)
 ** 把插入,修改,删除语句至少写一遍
 2、重点掌握查询表中记录的语句
 ** 把查询语句至少两遍

 * 希望不要使用工具,直接使用cmd窗口进行操作

 3、昨天案例,继续完成





javaWeb系列之十一(数据库)

标签:

热心网友 时间:2022-04-08 00:19

//** * 修改后的查询学生列表方法 */
public List<UserForm> queryStuList() {
List<UserForm> stu_list=new ArrayList<UserForm>();
UserForm user=null;
String sql="select * from tb_user where level ='3' ";
ResultSet rs=conn.executeQuery(sql);
System.out.println("查询学生列表:");
try {
while (rs.next()) {
System.out.println(":"+rs.getString("id")+":"+rs.getString("username"));
user=new UserForm();
user.setId(rs.getString("id"));
user.setUsername(rs.getString("username"));
user.setSex(rs.getString("sex"));
user.setBirth(rs.getString("birth"));
user.setTel(rs.getString("tel"));
user.setAdd(rs.getString("address"));
user.setPassword(rs.getString("password"));
System.out.println("。。。"+user.getId()+":"+user.getUsername());
stu_list.add(user);
}
} catch (SQLException e) {
}
return stu_list;
}

也就是说你每循环一次都应该封装一个新的对象,否则的话你只是在不断的操作同一个对象,并且这个对象中的各个属性值永远都是结果集最后一条的值,stu_list中放的也永远都是重复的对象。

热心网友 时间:2022-04-08 01:37

你把user定义在循环外边了。UserForm user=new UserForm(); 

你每次循环都是用同一个对象来set这个对象的字段,然后最后add到你的list里。

所以你最后return的stu_list里存的每个对象都是同一个,并且对象的各个字段信息是最后一次循环的user信息。

正确做法是,在循环外声明UserForm user = null;

然后在循环内new出对象:

while(.......){
    user = new UserForm()
    //你的逻辑操作
}

热心网友 时间:2022-04-08 03:11

UserForm user=new UserForm();
这句放到
while (rs.next()) {

热心网友 时间:2022-04-08 05:03

上面的方法执行了两次打印,当然输出是相同两次了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 聊聊当前的热点话题(六年级下册口语交际) 当原料和其他条件相同时,在清蛋糕胚中加入什么,所需烘烤温度最高?_百 ... 海绵蛋糕的名称是怎么来的? 所谓的金融危机到底是指什么内容啊 邮政银行工资代发一般是几点 光盘上的数据能保持多少时间? 张家口宣泰农村商业银行安全么? 贷款的时候卡号填错了钱被冻结了然后需要往自己的卡里交钱? 我买的云南红茶为什么有点苦涩味道,虽然不太明显。 求专业回答:形成滇红茶苦涩味的原因 请过来人指教,我是学C++还是java? 小米Civi和OPPO K9 Pro哪个更值得买? 河南有哪些旅游景点? C# WebService调用报错 System.Web.Services.Protocols.SoapException: Index: 2, Size: 2 Java WebService为什么有些要在地址后面加?wsdl才能访问,有些不用 类库中调用webservice问题~ oppok9pro是曲面屏吗 河南景点排名一览表是怎样的? 1.WebServiceParams.xml这个是文件在项目中的作用,解释下, 2.培训出来,公司的项目不知道怎么看?请教下 为什么php培训都不讲webservice 为什么现在甜品店的提拉米苏都是用海绵蛋糕? 简短介绍金融危机的成因 如何用手机设置路由器连接路由器 你有哪些奇葩的减压方法呢? 装修什么是半包呢? 法院判决离婚有哪些条件? 判决离婚的条件有什么 判决离婚的法定理由有哪些 那么什么情形下法院能判决离婚呢? 地震动峰值加速度为0.10是什么概念 法院判决离婚的标准是怎样 婚姻法判决离婚的情形有哪些 民法典判决离婚的条件 起诉离婚多久能判决离婚 判决离婚的还要办离婚证吗? 死的大闸蟹能吃吗? 判决离婚与协议离婚区别 如何护理毛囊炎好得快 死大闸蟹能吃吗 人民法院审判决离婚的法定条件是什么?