第一篇:黑马程序员:动态数据写入pdf心得
黑马程序员:动态数据写入pdf模板心得
前言
1.背景: 在项目中前段时间遇到一个问题,就是客户要求学生在线填写一些基础信息,保存到数据库的同时,给学生提供下载填写好的信息的pdf文件供下载,一开始我选择用Itext类去解析word文档模板,生成rtf文件,之后将学生填写的信息保存到数据时将数据同时写入到rtf模板中,在进行转为pdf,但是实现之后下载查看发现,中文不会乱码,纯数字也不会乱码,但是中文加数字,和特殊符号会出现名义上的乱码,(其实不是程序的乱码,只是写到word的rtf文件中的数据不会自动识别要用那些字体导致的),上网,翻墙,茶不思饭不想的去找解决办法,终于在我不懈的努力下还是没有解决,故放弃.注:程序员要有一个舍得的心,不能在一个方向上钻牛角尖,跳跳代码同我家,有舍必有得.2.正文: 好了,废话不大多说,上正确的代码和思路(其中有完成之前我所遇到的问题和踩的坑): 材料: itext的jar包包:官网:http://sourceforge.net/projects/itext/files/ Word文档模板-->转为pdf(不会的,网上有教程)Adobe Acrobat软件编辑pdf加载文本域填充数据用(网上有关于此软件的使用教程)
黑马程序员郑州中心 编著
Demo展示: public void test1_1(){
BaseFont bf;
Font font = null;
try {
bf
=
BaseFont.createFont(“STSong-Light”, “UniGB-UCS2-H”,BaseFont.NOT_EMBEDDED);//创建字体
font = new Font(bf,12);//使用字体
} catch(DocumentException | IOException e){
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document,new FileOutputStream(“pdfFolder/2.pdf”));
document.open();
document.add(new Paragraph(“hello word 你好 世界”,font));//引用字体
document.close();
} catch(FileNotFoundException | DocumentException e)
黑马程序员郑州中心 编著
{
System.out.println(“file create exception”);
}
} 上处代码会产生一个pdf文件,如下:
以上掌握之后,只是塞个牙缝,总不能用代码去向pdf中花一些复杂的表格吧,要死人不说,还不能优化和变通,最主要的是不能控制样式.---编辑pdf模板文件:
网上截图(展示利用此软件进行编辑pdf的文本域):
黑马程序员郑州中心 编著
Word模板(部分截图):
黑马程序员郑州中心 编著
代码展示: public void fillTemplate(){//利用模板生成pdf //模板路径
String templatePath = “pdfFolder/template_demo.pdf”;//生成的新文件路径
String newPDFPath = “pdfFolder/newPdf.pdf”;PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {
out = new FileOutputStream(newPDFPath);//输出流 reader = new PdfReader(templatePath);//读取pdf模板 bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();
String[] str = {“123456789”,“传智播客”,“男”,“1994-00-00”,“110”,“郑州市”};
int i = 0;
java.util.Iterator
String name = it.next().toString();
黑马程序员郑州中心 编著
System.out.println(name);form.setField(name, str[i++]);}
stamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.close();
Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();
PdfImportedPage importPage =copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();
} catch(IOException e){ System.out.println(1);
} catch(DocumentException e){ System.out.println(2);} }
3.成品代码:
上述代码只是一个小的demo,下面是进行再开发中自己写的符合业务需求
黑马程序员郑州中心 编著 的代码配合上述的word文档模板进行编写,代码改变度不大,自己可以琢磨一下: public void save(Page page,HttpServletResponse
response,httpServletRequest request){ //利用模板生成pdf //模板路径
String templatePath = “项目中的模板路径”;//生成的新文件路径
String newPDFPath = “要生成的文件的存放文件”;PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try { //设置种字体,默认选中的是下面这个,在windows系统中是这样的,在其他的非windows系统中不敢保证:(不想用这种,可以在Adobe Acrobat去设置一个为Adobe 宋体 SL的字体,一下代码可以省略,并且不用在塞入数据是加入font字体,以下代码中的三处①一起使用,一起死亡)
//BaseFont bfChinese = BaseFont.createFont(“STSongStd-Light”, “UniGB-UCS2-H”, false);--①
//Font font = new Font(bfChinese, 10, Font.NORMAL);--①
out = new FileOutputStream(newPDFPath);//输出流
reader = new PdfReader(templatePath);//读取pdf模板
黑马程序员郑州中心 编著
bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);
//读取pdf模板中的文本域们,(此处的用Adobe Acrobat编辑的模板没有截图,仿照上面的demo中的盗图进行对比)
AcroFields form = stamper.getAcroFields();
//form.setField(“studentName”, “font”,null,”数据”);//姓名中文--①
foem.setField(“studentName”, ”数据”);
form.setField(“sex”, “男”);//婚前姓名
stamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为true stamper.close();
Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);
//打开模板文档进行开始编辑: doc.open();
PdfImportedPage importPage =copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);//此处一定要关闭,否则有一个进程会一直使用此模板文件,就会造成下载时报异常,此异常自己体会是什么异常: doc.close();
} catch(IOException e){
黑马程序员郑州中心 编著
System.out.println(1);
} catch(DocumentException e){ System.out.println(2);} }
到此处已经完成了此小小功能,希望能帮助一些遇到此问题的人,以下附上本人参考的大神播客地址: http:// http://zhuchengzzcc.iteye.com/blog/1603671
https://jingyan.baidu.com/article/295430f1fb049f0c7e0050d5.html
黑马程序员郑州中心 编著
第二篇:程序员职业规划Pdf
程序员职业规划
很多人刚毕业时充满活力,然而几年的摸爬滚打后,冲劲就会慢慢减弱甚至消失。再加上IT大环境的起伏不定,一旦无法跟上技术或者行业发展的步伐,便会迷茫。王洪超说:“以前晚上睡觉之前想事情,经常都不知道自己以后做什么。”
这并不奇怪,工作的新鲜感褪程序员首先需要提高系统设计能力。从2000年以后,软件业的编程思维和模式、方法发生了翻天覆地的转变,与九十年代、甚至2000年前是完全不同的。但是,很多在企业工作的程序员的知识架构很难跟上。中科天博谢新华老师直率的指出:“现在很多程序员不是按照应该如何设计最好做得,而是按照我会什么来做的,最终造成设计思想落后。现在做项目需要的是新的、巧的设计思想。我们可以将从无数次失败中得到的理念告诉他们,包括如何学习,如何思考,技术变化的原因在哪里,其核心在哪里。这样程序员的理解力就会完全不同。现在,对程序员的要求降低了,但对系统设计的要求提高了。所以程序员必须要提高系统设计的能力,否则永远出不了头。”
而曾经从事过宏观经济研究工作的李巨锋更喜欢从行业走向来谈问题。他说:“现在中国纯软件公司不多,但是,中国的经济非常好,从整个社会的经济和行业角度可以得出很多有价值的内容。很多人不了解行业的需求情况,因此做不了判断。”
跟随一个快速发展的行业,就比较容易取得发展,而在一个发展缓慢的行业中成功就比较困难。当然,有了市场容量有多大和机会,并不代表一定会成功,但没有这个因素成功的几率会更低。工作一两年的人,最关键的是要有一个方向感,不要太盲目,这就需要程序员有一定的判断力。李巨锋认为,电信行业新增的市场容量每年有1万亿,而且由于是新增市场,人员也比较容易进入。
此外,中国的手机市场非常大,由于无线应用的迅速发展,可以预料,基于手机和电信结合的软件的就业前景就比较好,事实证明,很多人也在向这个方面转变。达内的成功与行业需求也不无关系,韩少云说:“从金融和电信行业角度看,对软件人才的需求每年以30-50%的比例增长。熟悉这两个行业所需要的IT技术和背景的人才,需求量是最大,缺口也是最大的。”
中国的信息管理软件市场也是容易就业的市场。现在市场上有数不胜数的小管理软件公司,这是同中国社会走转型之路相关的。李巨锋说,“基于商流、资金流、信息流、物流的行业都有相当的发展前景。
通过产权交易的商流,带动资金流和信息流的发展。物流是新兴的行业,这些都需要主流的IT技术。中国的物流成本现在是20.9%,美国是
9.8%,差距非常很大,这其中有1万亿的市场容量,如果软件和信息化服务占20%的份额,也有几千亿的市场,行业需求很大了。事实也证明供应链等类型的软件市场发展非常迅猛。”
而对于游戏,李巨锋认为这不能称之为一个产业,因为它不像电信那样带动很大的一个产业链,现在取得成功的只有几个游戏,而且还主要偏重销售,不是一个上下游的产业。尽管比较热,但李巨锋认为相比来说,至少一两年内可能不会有很大的市场容量,这就需要进行判断。
李巨锋认为,已经工作两年以上的程序员可以有几种基本的职业规划:技术专家、软件架构师、实施顾问或销售。其中程序员最主要的发展方向是资深技术专家,无论是Java还是.NET,还是数据库领域,都要首先成为专家,然后才可能继续发展为架构师。“尽管架构师的职位可以工作一辈子,待遇也非常好,对于科班出身的程序员最为适合,但这种工作职位非
常有限。”一位毕业的学员到IBM软件开发中心后,过了一年左右,开始请教其未来的发展,结合对方的情况,建议他先深入的技术,因为在中国架构师需要的条件比较复杂,而且需求量也比较少。
实施顾问和销售就比较偏向市场了,除了一定的技术能力外,需要掌握很多IT以外的知识。这些发展方向对于从其他专业转入IT的人员更为适合。比如用友就培养了很多实施顾问,这些人加上行业背景,收入也很高。要做行业专家,就要比自己的行业客户还了解这个产业的发展现状。
李巨锋说:“比如烟草行业,一定要了解大的趋势,中国最多的烟民在哪里,其实是在山西和辽宁,烟草行业的产业政策是什么,直接导致我的需求是什么,这些信息对于职业发展很重要。IBM的一些顾问都是行业内的资深专家,他们的发展就非常具有代表性。”
对大多数人来说,首先是要专,在技术上做的比较深入,然后进行工作调整,把自己转变为某个领域的专家,第三步,根据自己的情况,决定自己做软件架构师还是高级的顾问销售,另外一部分人可能就会走向行政管理,这和个人性格有关。
要获得职业成长,培训也很有帮助。韩少云说:“在北美,职业培训是一种高端的培训,即便是专业的人员也需要职业培训。一个人在一生中需要经过很多职业培训才能成为一个资深或者专业的人员。而在国内大家的观念中,职业培训还没有被大家广泛的认同。”
对于更高级的技术人员,他们所关注的就不是解决基本的生活问题了。他们所关注的就是发展和成就感。从现在看,他们更为缺乏的是交流,尤其是和水平差不多或者更高的人进行交流。李巨锋说:“我建议他们做一些国产的产品,做一些自主产权的技术。比如,我们还有产品开发的部门就在做国产数据库设计。”
职业规划带动更好的成长
从中国的软件开发人员的层次看,工作几年以内处于初级水平的程序员占据最大的比例,至少在50%之上,高级的人员最多也就10%左右。但无论处在哪个层面,一定要有规划,按照自己的个性和优势做一些规划。一个程序员的成长,学习过程中首先要读到好书,然后是交到好的学友,找到好的老师,在这三个外围的条件下,找到适合的工作环境,结合自己的特点,然后在一些重要的环节上遇到适合的人和合适的项目,这样才能成功。有些职位可能在开始的时候不适合,但工作一段时间后,可能就可以走上更高的职位。最近,IBM软件学院就开始做一个“软件人才库”的项目,为的就是跟踪技术人员的成长,给他们在合适的时机提供合适的职位。业内人士说:“IT行业良性的人员流动也是很好的。”
有了一定的职业规划,就需要补充自己缺乏的经验,只有经历过足够的项目,才有可能不断积累。对行业的判断有一定的理解之后,对一般的企业适应起来是没有问题的,但高级的人才需要长时间的积累。
在中国,除了个人的基本技能,还需要具备一定的社会资源,行业资源和资本。学生要学会在提高智商的情况下,提高自己的情商。因为,在人和人交往中情商起很大的作用。技术人员需要慢慢改变自己的一些思维方式。个人成长要有意识的积累社会资源,认识相关的人,了解相关的政策和行业发展的过程和规则,这些东西是非技术的,非智商的,只要你关注就是可以得到的。我觉得最关键的就是多认识人,然后有意识的寻找合适的事情来做。情商也就需要有渠道,有多少人能够帮助你,否则成不了。
机遇和经历对于职业的发展有相当的影响力。某些人或者某些事情都可能会影响到未来的发展。王洪超也认为成为微软MVP是自己的一个转
折点,由于成为MVP,便有机会接触更多的技术朋友和微软人,为自己的发展奠定了基础。
总而言之,每个人至少三年要点评一下自己:是环境的原因,还是自己个人的原因,如果是环境的原因,可以考虑是否需要换地方,如果知道自己,可以调整自己或者设的目标现实一些。从一个普通的程序员做起,3年时间至少能够做到做独立需求分析和设计的。色后,就设法需要通过一个目标为自己输送动力。这便是职业规划。
第三篇:黑马程序员自荐信
自荐信_XXX_151********
姓名:XXX
电话:151********
邮箱:********n2009@126.com
尊敬的老师:
你好,我叫XXX,今年24岁,就读于XXXX,XXXX专业,将于2012年毕业。性格稍内向,善于交流,看待事情能够理性认识,善于思考,有团队合作精神。在学校的这三年多的时间里,由于专业需要,对计算机接触较多。在开设的课程中学过C语言、C#、java等编程语言,对编程语言有一定的了解。在接触java程序语言和J2ME手机游戏开发的学习中,对java产生了强烈的兴趣,并对java学习有了一定的基础。通过“黑马程序员训练营”的官网,我了解到了javaee+3G课程体系所包含的知识面广,是经过对java前景分析和现在就业所需技术要求而制定的,对我们这些即将参加就业、想参加java方面工作的人来说是最好的强心剂。课程安排科学合理,有助于学员深化对java的学习,使学员掌握到真正前沿的技术。我深信,“黑马程序员训练营”的讲师是java培训和开发方面最棒的,这也是我钟情于“黑马程序训练营”的原因之一。由于家里生活拮据,不想让父母操心、给家里增加经济负担,是“黑马程序员”给了我一个机会、给了我一份保证。
作为一名理科生,我有着很强的求知欲,勤奋,有上进心,对于坚信的事情能够坚持到底。在平时学习过程中,善于独立思考,遇到问题会尝试各种方法去解决(网络、老师、同学都是我的获得知识的途径)。平时喜欢看一些和自己专业的书籍,乐于了解一些最前沿的科技和未来的发展趋势。注重的基础知识的同时,喜欢探索新知识,在收获知识的同时也收获着乐趣。学习是一辈子的事情,也是一件乐事,就算将来学校的生活结束了,学习也永远不会落下。
我非常期待能成为“黑马程序员训练营”的一员,如果这个愿望能实现,我将以最大的热情投入到“黑马程序员训练营”的学习中去,用自己的努力去实现的自身价值,用自己的成绩回报“黑马程序员训练营”。我坚定工作后的第一件事就是努力工作,用工资偿还培训期间的费用,绝不辜负“黑马程序员训练营”对我的信任和老师的培养!请给我一份信任,我将以自己的自己的行动去回报。
择是我的期望,给我一次机会还你一份惊喜。
非常感激你能在百忙之中翻阅我的自荐信。祝你工作顺利,事业蒸蒸日上!
此致
敬礼
自荐人:XXX
2012年02月17号
第四篇:黑马程序员:IOS面试宝典数据存储
数据存储(★★)
1、IOS中常用的数据存储方式有哪些?
答:1.数据存储有四种方案,NSUserDefault,KeyChain,File,DB.2.其中File有三种方式:plist,Archiver,Stream 3.DB包括core Data和FMDB
2、说一说你对sqlite的认识
SQLite是目前主流的嵌入式关系型数据库,其最主要的特点就是轻量级、跨平台,当前很多嵌入式操作系统都将其作为数据库首选。虽然SQLite是一款轻型数据库,但是其功能也绝不亚于很多大型关系数据库。学习数据库就要学习其相关的定义、操作、查询语言,也就是大家日常说得SQL语句。和其他数据库相比,SQLite中的SQL语法并没有太大的差别,因此这里对于SQL语句的内容不会过多赘述,大家可以参考SQLite中其他SQL相关的内容,这里还是重点讲解iOS中如何使用SQLite构建应用程序。先看一下SQLite数据库的几个特点:
1.基于C语言开发的轻型数据库
2.在iOS中需要使用C语言语法进行数据库操作、访问(无法使用ObjC直接访问,因为libqlite3框架基于C语言编写)
3.SQLite中采用的是动态数据类型,即使创建时定义了一种类型,在实际操作时也可以存储其他类型,但是推荐建库时使用合适的类型(特别是应用需要考虑跨平台的情况时)
4.建立连接后通常不需要关闭连接(尽管可以手动关闭)
在iOS中操作SQLite数据库可以分为以下几步(注意先在项目中导入libsqlite3框架):
1.打开数据库,利用sqlite3_open()打开数据库会指定一个数据库文件保存路径,如果文件存在则直接打开,否则创建并打开。打开数据库会得到一个sqlite3类型的对象,后面需要借助这个对象进行其他操作。
2.执行SQL语句,执行SQL语句又包括有返回值的语句和无返回值语句。3.对于无返回值的语句(如增加、删除、修改等)直接通过sqlite3_exec()函数执行;
4.对于有返回值的语句则首先通过sqlite3_prepare_v2()进行sql语句评估(语法检测),然后通过sqlite3_step()依次取出查询结果的每一行数据,对于每行数据都可以通过对应的sqlite3_column_类型()方法获得对应列的数据,如此反复循环直到遍历完成。当然,最后需要释放句柄。
3、说一说你对FMDB的认识
FMDB是一个处理数据存储的第三方框架,框架是对sqlite的封装,整个框架非常轻量级但又不失灵活性,而且更加面向对象。FMDB有如下几个特性:
1.FMDB既然是对于libsqlite3框架的封装,自然使用起来也是类似的,使用前也要打开一个数据库,这个数据库文件存在则直接打开否则会创建并打开。这里FMDB引入了一个MFDatabase对象来表示数据库,打开数据库和后面的数据库操作全部依
赖此对象。
2.对于数据库的操作跟前面KCDbManager的封装是类似的,在FMDB中FMDatabase类提供了两个方法executeUpdate:和executeQuery:分别用于执行无返回结果的查询和有返回结果的查询。当然这两个方法有很多的重载这里就不详细解释了。唯一需要指出的是,如果调用有格式化参数的sql语句时,格式化符号使用“?”而不是“%@”、等。
3.我们知道直接使用libsqlite3进行数据库操作其实是线程不安全的,如果遇到多个线程同时操作一个表的时候可能会发生意想不到的结果。为了解决这个问题建议在多线程中使用FMDatabaseQueue对象,相比FMDatabase而言,它是线程安全的。
4.将事务放到FMDB中去说并不是因为只有FMDB才支持事务,而是因为FMDB将其封装成了几个方法来调用,不用自己写对应的sql而已。其实在在使用libsqlite3操作数据库时也是原生支持事务的(因为这里的事务是基于数据库的,FMDB还是使用的SQLite数据库),只要在执行sql语句前加上“begin transaction;”执行完之后执行“commit transaction;”或者“rollback transaction;”进行提交或回滚即可。另外在Core Data中大家也可以发现,所有的增、删、改操作之后必须调用上下文的保存方法,其实本身就提供了事务的支持,只要不调用保存方法,之前所有的操作是不会提交的。在FMDB中FMDatabase有beginTransaction、commit、rollback三个方法进行开启事务、提交事务和回滚事务。
4、说一说你对Core Data的认识
Core Data使用起来相对直接使用SQLite3的API而言更加的面向对象,操作过
程通常分为以下几个步骤:
1.创建管理上下文
创建管理上下可以细分为:加载模型文件->指定数据存储路径->创建对应数据类型的存储->创建管理对象上下方并指定存储。
经过这几个步骤之后可以得到管理对象上下文NSManagedObjectContext,以后所有的数据操作都由此对象负责。同时如果是第一次创建上下文,Core Data会自动创建存储文件(例如这里使用SQLite3存储),并且根据模型对象创建对应的表结构。
2.查询数据
对于有条件的查询,在Core Data中是通过谓词来实现的。首先创建一个请求,然后设置请求条件,最后调用上下文执行请求的方法。
3.插入数据
插入数据需要调用实体描述对象NSEntityDescription返回一个实体对象,然后设置对象属性,最后保存当前上下文即可。这里需要注意,增、删、改操作完最后必须调用管理对象上下文的保存方法,否则操作不会执行。
4.删除数据
删除数据可以直接调用管理对象上下文的deleteObject方法,删除完保存上下文即可。注意,删除数据前必须先查询到对应对象。
5.修改数据
修改数据首先也是取出对应的实体对象,然后通过修改对象的属性,最后保存上下文。
5、OC中有哪些数据存储方式,各有什么区别? OC中有四种数据存储方式: 1).NSUserDefaults,用于存储配置信息 2).SQLite,用于存储查询需求较多的数据 3).CoreData,用于规划应用中的对象
4).使用基本对象类型定制的个性化缓存方案.NSUserDefaults:对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,也可以按照自己的需求创建新的配置项。SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。开发者可以以关系型数据库的方式组织数据,使用SQL DML来管理数据。一般来说应用中的格式化的文本类数据可以存放在数据库中,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。CoreData是一个管理方案,它的持久化可以通过SQLite、XML或二进制文件储存。它可以把整个应用中的对象建模并进行自动化的管理。从归档文件还原模型时CoreData并不是一次性把整个模型中的所有数据都载入内存,而是根据运行时状态,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。无论从设计原理还是使用方法上看,CoreData都比较复杂。因此,如果仅仅是考虑缓存数据这个需求,CoreData绝对不是一个优选方案。CoreData的使用场景在于:整个应用使用CoreData规划,把应用内的数据通过CoreData建模,完全基于CoreData架构应用。使用基本对象类型定制的个性化缓存方案:从需求出发分析缓存数据有哪些要求:按Key查找,快速读取,写入不影响正常操作,不浪费内存,支持归档。这些都是基本需求,那么再进一步或许还需要固定缓存项数量,支持队列缓存,缓存过期等。
数据存储这一块,面试常问, 你常用哪一种数据存储?什么是序列化?sqlite是直接用它还是用封装了它的第三方库?尤其是会问sqlite和core data的区别?
5、IOS平台怎么做数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?
iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data coredata可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用coredata的时候,你不用安装额外的数据库系统,因为coredata使用内置的sqlite数据库。coredata将你app的模型层放入到一组定义在内存中的数据对象。coredata会追踪这些对象的改变,同时可以根据需要做相应的改变,例如用户执行撤销命令。当coredata在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与coredata框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型, 但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对
一、对多的关系。
6、如果后期需要增加数据库中的字段怎么实现,如果不使用CoreData呢?
编写SQL语句来操作原来表中的字段 增加表字段
ALTER TABLE 表名 ADD COLUMN 字段名字段类型;• 删除表字段
ALTER TABLE 表名 DROP COLUMN 字段名;
.修改表字段
ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;
7、SQLite数据存储是怎么用?
添加SQLite动态库:
导入主头文件:#import
8、简单描述下客户端的缓存机制?
1>缓存可以分为:内存数据缓存、数据库缓存、文件缓存 2>每次想获取数据的时候 3>先检测内存中有无缓存
4>再检测本地有无缓存(数据库文件)5>最终发送网络请求
6>将服务器返回的网络数据进行缓存(内存、数据库、文件),以便下次读取
9、你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?
1>CoreData是对SQLite数据库的封装
2>CoreData中的NSManagedObjectContext在多线程中不安全
3>如果想要多线程访问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext 4>每个NSManagedObjectContext对象实例都可以使用同一个NSPersistentStoreCoordinator实例,这是因为NSManagedObjectContext会在便用NSPersistentStoreCoordinator前上锁
10、core data数据迁移
博客地址: http://blog.csdn.net/jasonblog/article/details/17842535
11、FMDB的使用和对多张表的处理
博客地址: http://blog.csdn.net/wscqqlucy/article/details/8464398
12、说说数据库的左连接和右连接的区别
数据库左连接和右连接的区别:主表不一样通过左连接和右连接,最小条数为3(记录条数较小的记录数),最大条数为12(3×4)技术博客的地址 : http://
第五篇:黑马程序员c语言教程:过滤和排序数据
过滤和排序数据
在查询中过滤行
过滤
字符和日期
字符和日期要包含在单引号中。字符大小写敏感,日期格式敏感。默认的日期格式是 DD-MON-RR。
比较运算
其它比较运算