① java里面的prepareStatement中的“预编译”的概念的理解
开始执行的时候放入内存··
还有一个好处就是 防止sql注入··
预编译的sql语句比普通的sql语句要安全很多··
② 求教JAVA编译与运行的区别。
编译只是编译成了字节码,就是可执行的.class文件
运行时识别,主要是java的RTTI(运行时类型识别)机制和反射机制,而两者之间的区别在于:
”对RTTI来说,编译器在编译期打开和检查.class文件。(换句话说,我们可以用“普通”的方式调用一个对象的所有方法。),而对于反射机制来说,.class文件在编译期是不可获取的,所以是在运行期打开和检查.class文件。“
但是同样的,反射也需要加载这个类的Class对象,所以那个类的class对象对于jvm必须是可取的的,比如在本地机器上,或者通过网络取得,比如取得一串字节串。
具体的内容可以参考《Thinking in java》的”类型识别“那一章,讲的比较详细的
③ 在java中如何实现预编译
/*
* ProCompile.java *预处理要编译的文件,删除多余的空白,注释,换行,回车等
* Created on 2007年9月18日, 下午8:58 */ package javacompile; import java.io.*;
import java.util.regex.*;
import javax.swing.JOptionPane; /** * @com.junjian.sun public class PerCompile { File f = null;
String fileString = null;
Pattern p = null;
Matcher m = null;
String regex; //正则表达式 //初始化p
public PerCompile() {
regex ="(//.+)" + //(//.+) 对应单行注释
//"|(/\\*(.+\\n)+\\*/)"+ // 想对应多行注释... "|(\\r\\n)" + "|(\\n)"+//(\\r\\n)|(\\n)对应换行
"|(\\B\\s+)" ; // 空白符
String ss;
f = new File(new JOptionPane()
.showInputDialog("请输入文件所在路径~"));
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
ss = bf.readLine()+"\n";
fileString = ss; //如果没有这两句,ss的开头会有“null”
while((ss = bf.readLine())!= null){
fileString += ss+"\n"; bf.close();
} catch (IOException ex) {
ex.printStackTrace(); p = Pattern.compile(regex);
m = p.matcher(fileString); //执行替换所有多余空行,空白符,注释
void Dels(){
System.out.println("before: "+fileString);
if(m.find()) System.out.println("find!!");
System.out.println(m.replaceAll("")); } }
-
④ 什么叫预编译语句。
预编译就是在所有的程序启动编译前,对某些特殊的程序进行编译,这些特殊的程序一般是类库的文件,全局变量或其他可能要被非预编译代码使用的程序。
⑤ java里的(关于PreparedStatement接口)预编译
当你向数据库提交SQL语句后,数据库要对这条语句进行编译,例如语法分析、优化路径选择、分配资源等一系列操作,这是需要时间的。
当你向数据库插入10条记录时,如果使用常规做法,数据库需要编译10次。
而使用PreparedStatement接口,数据库只需要编译一次,其他只是更改参数就可以了。
所以,当你向数据库中进行批量操作的时候,预编译效率比较高。
⑥ java中preparedstatement为什么可以防止sql注入
其实是预编译功能,用preparedstatement就会把sql的结构给数据库预编译。
SQL注入 攻 击 是利用是指利用 设计 上的漏洞,在目 标 服 务 器上运行 Sql语 句以及 进 行其他方式的 攻 击 ,
动态 生成 Sql语 句 时 没有 对 用 户输 入的数据 进 行 验证 是 Sql注入 攻 击 得逞的主要原因。
对 于 JDBC而言, SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的, 这 是因 为 PreparedStatement 不允 许 在不同的插入 时间 改 变查询 的 逻辑结 构。
如 验证 用 户 是否存在的 SQL语 句 为 :
select count(*) from usertable where name='用 户 名 ' and pswd='密 码 '
如果在 用 户 名字段 中 输 入 ' or '1'='1' or '1'='1
或是在 密 码 字段 中 输 入 1' or '1'='1
将 绕过验证 ,但 这种 手段只 对 只 对 Statement有效, 对 PreparedStatement 无效。
PreparedStatement 相 对 Statement有以下 优 点:
1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代 码 的可读性可维护性好
加油!
⑦ java jdbc 预编译语句和普通语句的区别
应该指的是Statement和PreparedStatement把。
如果你的查询语句很少用的话, 用Statement,
如果你的查询语句常用的话, 就用PreparedStatement。
⑧ 什么是 jsp 的预编译特征
1.2 JSP技术特征
JSP技术所开发的Web应用程序是基于Java的,它拥有Java语言跨平台的特性,以及业务代码分离、组件重用、基础Java Servlet功能和预编译等特征。
1.2.1 跨平台
既然JSP是基于Java语言的,那么它就可以使用Java API,所以它也是跨平台的,可以应用在不同的系统中,如Windows、Linux、Mac和Solaris等。这同时也拓宽了JSP可以使用的Web服务器的范围。另外,应用于不同操作系统的数据库也可以为JSP服务,JSP使用JDBC技术操作数据库,从而避免了代码移植导致更换数据库时的代码修改问题。
正是因为跨平台的特性,使得采用JSP技术开发的项目可以不加修改地应用到任何不同的平台上,这也应验了Java语言的"一次编写,到处运行"的特点。
1.2.2 业务代码分离
采用JSP技术开发的项目,通常使用HTML语言来设计和格式化静态页面的内容,而使用JSP标签和Java代码片段来实现动态部分。程序开发人员可以将业务处理代码全部放到JavaBean中,或者把业务处理代码交给Servlet、Struts等其他业务控制层来处理,从而实现业务代码从视图层分离。这样JSP页面只负责显示数据即可,当需要修改业务代码时,不会影响JSP页面的代码。
1.2.3 组件重用
JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面甚至整个项目中都可以重复使用这个JavaBean。JavaBean也可以应用到其他Java应用程序中,包括桌面应用程序。
1.2.4 继承Java Servlet功能
Servlet是JSP出现之前的主要Java Web处理技术。它接受用户请求,在Servlet类中编写所有Java和HTML代码,然后通过输出流把结果页面返回给浏览器。其缺点是:在类中编写HTML代码非常不便,也不利于阅读。使用JSP技术之后,开发Web应用便变得相对简单快捷多了,并且JSP最终要编译成Servlet才能处理用户请求,因此我们说JSP拥有Servlet的所有功能和特性。
1.2.5 预编译
预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大提升了客户端的访问速度
⑨ java jdbc 预编译语句和普通语句的区别
一般是在需要反复使用一个SQL语句时才使用预编译语句,预编译语句常常放在一个for或者while循环里面使用,通过反复设置参数从而多次使用该SQL语句;为了防止SQL注入漏洞,在某些数据操作中也使用预编译语句。这点是预编译语句和普通语句最大的区别。
⑩ 如何预编译java源文件
eclipse里面就能打包jar