错误怎么创建表格格无效流浮

1049人阅读
ibatis(9)
我们先来看一个问题:一个User用户对应多张信用卡Card
package com.demo.
import java.util.L
public class User {
private List&Card&
set get省略...
package com.demo.
public class Card {
private String cardN
private int userId;
set get省略...
对应数据库中的表结构:
CREATE TABLE `user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8;
CREATE TABLE `card` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`cardName` varchar(255) DEFAULT NULL,
`balance` double DEFAULT NULL,
`userId` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2006 DEFAULT CHARSET=utf8;
我们考虑这样一个需求:从数据库中获得所有用户的信息(包括他所持有的信用卡信息)。
对应的UserCards.xml:
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE sqlMap
PUBLIC &-//ibatis.apache.org//DTD SQL Map 2.0//EN&
&http://ibatis.apache.org/dtd/sql-map-2.dtd&&
&sqlMap namespace=&UserCards&&
&typeAlias alias=&Card& type=&com.demo.beans.Card& /&
&typeAlias alias=&User& type=&com.demo.beans.User&/&
&resultMap class=&User& id=&UserResult& &
&result property=&id& column=&id&/&
&result property=&name& column=&name&/&
&result property=&cards& select=&UserCards.getCardsByUserId& column=&id&/&
&/resultMap&
&resultMap id=&CardResult& class=&Card&&
&result property=&id& column=&id& /&
&result property=&cardName& column=&cardName& /&
&result property=&balance& column=&balance& /&
&result property=&userId& column=&userId& /&
&/resultMap&
&select id=&getUserById& resultMap=&UserResult& parameterClass=&int&&
select * from user where id = #value#
&select id=&getCardsByUserId& resultMap=&CardResult& parameterClass=&int&&
select * from card where userId = #value#
&select id=&getAllUsers& resultMap=&UserResult&&
select * from user
&insert id=&addCard& parameterClass=&Card& &
&selectKey resultClass=&int& type=&post&
keyProperty=&id& &
select LAST_INSERT_ID() as value
&/selectKey&
insert into card values(#id#,#cardName#,#balance#,#userId#)
&insert id=&addUser& parameterClass=&User& &
&selectKey resultClass=&int& type=&post&
keyProperty=&id& &
select LAST_INSERT_ID() as value
&/selectKey&
insert into user values(#id#,#name#)
注意上面xml关键部分:
&result property=&cards& select=&UserCards.getCardsByUserId& column=&id&/&
每查一个user,根据他的id来getCardsByUserId查卡信息
我们的单元测试部分:
public void testGetAll(){
BeanFactory factory = new ClassPathXmlApplicationContext(&applicationContext.xml&);
UserDao userDao = (UserDao) factory.getBean(&userDao&);
long start = System.currentTimeMillis();
List&User& userList = userDao.getAllUser();
for(User user : userList){
System.out.println(user.getName());
for(Card card : user.getCards()){
System.out.println(card.getCardName()+&|&+card.getBalance());
System.out.println(&------------------------&);
long end = System.currentTimeMillis();
System.out.println(end-start);
在数据库中我们添加了1000个左右的用户和1000张卡信息,相互对应
控制台输出如下:
10:38:52,218 DEBUG - {conn-102994} Connection
10:38:52,218 DEBUG - {conn-102994} Preparing Statement:
select * from card where userId = ?
10:38:52,218 DEBUG - {pstm-102995} Executing Statement:
select * from card where userId = ?
10:38:52,218 DEBUG - {pstm-102995} Parameters: [998]
10:38:52,218 DEBUG - {pstm-102995} Types: [java.lang.Integer]
------------------------
10:38:52,218 DEBUG - {conn-102997} Connection
10:38:52,218 DEBUG - {conn-102997} Preparing Statement:
select * from card where userId = ?
10:38:52,218 DEBUG - {pstm-102998} Executing Statement:
select * from card where userId = ?
10:38:52,218 DEBUG - {pstm-102998} Parameters: [999]
10:38:52,218 DEBUG - {pstm-102998} Types: [java.lang.Integer]
------------------------
可以看到每次输出一个用户名如&xiaoye995&,然后发出一条select * from card where userId = ?语句。
这就是N+1问题:我们有995个用户 那么就会发出995条上面的语句 另外一条则是查询用户的SQL语句select * from user,
这里的N即为995。可以看到,如果要查询所有用户及其卡信息,这样的效率是很差的,总共花了大约2000多毫秒的时间。
解决办法之一,使用懒加载 就是在需要用户卡信息的时候才触发sql调用
&settings lazyLoadingEnabled=&true& useStatementNamespaces=&true&/&
解决办法之二,ibatis中已经解决了N+1问题,具体看下面:
修改UserCards.xml文件,关键部分如下:
&resultMap class=&User& id=&UserResult& groupBy=&id&&
&result property=&id& column=&id& nullValue=&0&/&
&result property=&name& column=&name&/&
&result property=&cards& resultMap=&UserCardsN1.CardResult& /&
&/resultMap&
&select id=&getAllUsers& resultMap=&UserResult&&
select * from user a left join card b on a.id = b.userId
区别主要体现在groupBy=&id&和&result property=&cards& resultMap=&UserCardsN1.CardResult& /&及select用了表连接
控制台输出信息:
11:10:55,156 DEBUG - {conn-100000} Connection
11:10:55,171 DEBUG - {conn-100000} Preparing Statement:
select * from user a left join card b on a.id = b.userId
11:10:55,703 DEBUG - {pstm-100001} Executing Statement:
select * from user a left join card b on a.id = b.userId
11:10:55,703 DEBUG - {pstm-100001} Parameters: []
11:10:55,703 DEBUG - {pstm-100001} Types: []
建行卡|4353.0
招行卡|23112.0
中信A001|2.0
------------------------
工行卡|1000.0
中信A002|3.0
------------------------
..........
------------------------
可以看到只发出了一条sql语句 输出了所有的信息 大概用时766毫秒
1)懒加载适合不需要一次性取出用户信息及其关联信息的场景
2)N+1的解决方法是一次性取出的,适合数据量较少的情况
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:152721次
积分:2072
积分:2072
排名:第13289名
原创:51篇
转载:72篇
评论:11条
(1)(11)(5)(6)(2)(17)(1)(1)(1)(4)(1)(3)(4)(2)(1)(1)(12)(3)(3)(6)(1)(5)(32)excel做透视表做不了,显示数据透视表字段名无效。在创建透视表时,必须使用组合为带有标志列列表的数据。_百度知道
excel做透视表做不了,显示数据透视表字段名无效。在创建透视表时,必须使用组合为带有标志列列表的数据。
请问这是什么意思,请教专业人士这是为什么,今天突然就不行了?我以前也是这样作透视表的,都没有问题?
提问者采纳
是你的选定的标题行一个空白字段了.
没有选择空白字段啊
提问者评价
非常感谢,发现一个隐藏起来的空白字段了
来自团队:
其他类似问题
为您推荐:
数据透视表的相关知识
其他1条回答
你的标题行中有一个单元格是空的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁2053人阅读
1.前言& 有很多文章对Java的中文问题进行了论述,论坛上的许多问题也与此有关,所以中文问题实在是Java应用中的一个不小的问题。尽管已经有这么多的参考资料,但是由于Java的应用范围实在太广,包含的内容太多,虽然问题的根源往往万变不离其宗,然而很容易乱花渐欲迷人眼,导致各种各样的问题层出不穷。总的说来,Java的中文问题较多的出现在数据传输的场合,比如数据从A传递到B,将B得到的数据显示出来可能就成了乱码。Java中文问题产生的根源是编码,如果A和B存放字符的编码不同,则乱码就产生了。下面我就将iText中所遇到的一些中文问题进行一下力所能及的阐述,恐言有所未逮,不能尽善尽美,面面俱到之处,权当抛砖引玉耳。我将分两个部分进行阐述,一个是application中的中文问题,一个是在JSP中的中文问题。iText是一个用来生成PDF文件的开源类库,详细情况和用法请参考http: ///iText/tutorial/index.html,下载请至。如果有必要的话我会再写一篇iText的简单介绍。************************************2.iText在Java Application中的中文问题1)从&HelloWorld&开始我们从iText的一个入门程序开始:import java.io.FileOutputS
import java.io.IOE
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfW
public class Chap0101 {
public static void main(String[] args) {
System.out.println("Chapter 1 example 1: Hello World");
// step 1: creation of a document-object
Document document = new Document();
// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
PdfWriter.getInstance(document, new FileOutputStream
("Chap0101.pdf"));
// step 3: we open the document
document.open();
// step 4: we add a paragraph to the document
document.add(new Paragraph("Hello World"));
catch(DocumentException de) {
System.err.println(de.getMessage());
catch(IOException ioe) {
System.err.println(ioe.getMessage());
// step 5: we close the document
document.close();
该程序在PDF文件中写入HelloWorld,编译并运行该程序,我们可以在同级目录下得到一个名为&Chap0101&的PDF文件,打开这个文件,就可以看到左上角的&HelloWorld&。这样我们就完成了一个几乎就是最简单的PDF文件的制作,有心的朋友可能就想,如果把HelloWorld替换成中文字符效果如何。好的!2)用&我们是害虫&替换&HelloWorld&& 我们把document.add(new Paragraph("HelloWorld"));改成document.add(new Paragraph("我们是害虫"));然后编译运行,得到一个PDF文件,但是打开却发现,没有任何字符。添加中文字符失败!PDF文件完全不认这里的中文字符。& iText添加中文字符,需要设置相应的编码和字体。& 在程序开端添加import com.lowagie.text.pdf.BaseF引入所需要的类。& 然后将中文字符做成字符串:String chinese =&我们是害虫&;& 设置字体和编码:BaseFont bfChinese = BaseFont.createFont("STSong-Light", & & & & & & & & & & "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);& & & & & & Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);加入document:& & & & & & & Paragraph chunk = new Paragraph(chinese, FontChinese);& & & & & & & document.add(chunk);& 此时要正确编译,还需要下载一个包,该包包含了中、日、韩文字的一些字体和编码。该包名为iTextAsian.jar,访问可以下载。& 下载后加入classpath,则程序可以正确编译运行了。3)可能存在的意外& 一般来说,按照上述的步骤将中文字符加入到PDF文件中,是没有问题的。为什么这么说呢?这样就不得不说到Java的编译器javac。& 如果我们在命令行中输入javac然后回车,就可以看到屏幕上会输出一些javac的相关参数。其中有一个是encoding。我们一般很少用到这个参数,其实这个参数对于java的跨平台非常重要。如果在编译时不指定这个参数,则系统默认:在中文平台上为gb2312,英文平台上为ISO8859_1。编译器就是根据这个参数来读取java文件的,然后把用utf-8形式编译成class文件。& 想象一下,如果此时所用为英文操作系统,则在不指定encoding参数的情况下,javac以ISO8859_1为编码读取java文件,则中文字符串必定不能顺利读出,于是在PDF中出现乱码!!& 我们可以将上面可以正确生成中文的java文件重新编译和执行,指定encoding参数为ISO8859_1:javac ?Cencoding ISO8859_1 &&打开生成的PDF文件,你可以看到奇形怪状的乱码。& 我们一般用的都是中文平台,所以上述&凑巧&不会碰到,但是以后如果真遇上了这样的场合,只要指定encoding为相应的编码就可以了。& 还有一种方法就是将字符串放在文本文件中,用相应的编码保存,然后在程序中利用流读进来。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:152723次
积分:2072
积分:2072
排名:第13289名
原创:51篇
转载:72篇
评论:11条
(1)(11)(5)(6)(2)(17)(1)(1)(1)(4)(1)(3)(4)(2)(1)(1)(12)(3)(3)(6)(1)(5)(32)excel表格无法插入行列重新复制粘贴无效,提示错误为为防止可能的数据丢失不能移去表格中非空白单元格_百度知道
excel表格无法插入行列重新复制粘贴无效,提示错误为为防止可能的数据丢失不能移去表格中非空白单元格
我有更好的答案
就到了Excel的最右面,看有没有图形啊、数据啊,有的话选中删除、格式啊等同时按Ctrl和下方向键几次,就到了Excel的最下面、数据啊,看有没有图形啊、格式啊等,有的话选中删除。同时按Ctrl和右方向键几次
其他类似问题
为您推荐:
excel表格的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁U8年结错误_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
U8年结错误
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 怎么创建表格 的文章

 

随机推荐