Java入门,
Java入门,
一. 什么是java
java编程语言是个简答/完全面向对象/分布式/解释性/健壮性/安全与系统无关/可移植性/高性能/多线程和动态得编程语言。
二. java体系
三. java开发环境
四. java开发前提
java源代码是*.java得纯文本文件,可以使用任何文本编辑气编写,单不可执行。
JDK是java语言得开发包,可以将*.java文件编译盛可执行得java程序
可执行java程序需要JVM猜可以运行
JRE包含了JVM
JDK包含了JRE
*注:JRE(java runtime environment,java运行环境),运行java程序所需要得环境得集合,包含JVM标准实现及java核心类库。仅能够完成java得运行,而无法对java进行编译/调试等。
JDK(java development kit)是java语言得软甲开发工具包(SDK),面向java开发者发布的java套件。JDK包含得基本组件包括:编译器/jar打包工具/javadoc文档生成器/debug调试器/头文件生成器/反汇编器/监控工具等。*
五. 数据类型初阶
六. 自动类型转换
(1) byte->short->int->long->float->double
(2) int和char类型的数据在某种情况下可以自动相互转换。
七. 通过Scanner从控制台获取数据
(1) String next();
作用:接受控制台输入的一个字符串,空格或回车作为一次输入数据的结束,所以不能将空格作为字符串接受。
(2) String nextLine();
作用:接受控制台输入的一个字符串,以回车作为输入数据的结束。
(3) int nexInt();
作用:接受控制台输入的一个int类型的数据。
(4) double nextDouble();
(5) boolean nextBoolean();
(6) 从控制台输入char类型的数据
Scanner类没有提供直接输入char类型的方法,可以通过charAt()方法从next()或nextLine()获取输入的字符。
char String.charAt(int index);
作用:从字符串中获取指定下表的字符,下标从0开始。
八. 数组学习(实例:冒泡排序)
/**
* 正宗的冒泡排序
* 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
* 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
* 3.针对所有的元素重复以上的步骤,除了最后一个。
* 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*/
int a[] = {78,34,12,64,5,4};
int temp = 0;
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
//第i轮排序过后,最大数都会相应的放到后面,所以次数相应的减少i+1次
if (a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
九. String字符串
十. StringBuffer
缓冲区,本身也是操作字符串的,但是与String不同,StringBuffer是可以更改的,而String内容是不可修改的。
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("hello world!");
for (int i = 0; i < 100; i++){
stringBuffer.append(i);
}
System.out.print(stringBuffer.toString());
同样的如果用String添加
String str = "hello world!";
for(int i = 0; i < 100; i++){
str = str + i;
}
System.out.print(str);
说明:两种方法追加字符串输出的结果是相同的,但是执行的速度是不同的,相对来说,StringBuffer的执行速度更快一些,因为他只是在原先的字符位置进行修改,而String则需要每次改变都要开辟新的内存空间。
十一. StringBuilder
十二. 异常处理
//伪代码
try{
异常的语句;
}catch(Exception e){
异常的处理;
}finally{
一定会执行的代码;
}
实例:
int a = 10, b = 0 , temp = 0;
try {
temp = a/b;
}catch (Exception e){
System.out.println(e);
}
System.out.println(temp);
输出为:java.lang.ArithmeticException: / by zero
0
2. 常见异常
a. 数组越界异常:ArrayIndexOutOfBoundsException
b. 数字格式化异常:NumberFormatException
c. 算数异常:ArithmeticException
d. 空指针异常:NullPointerException
十三. java面向对象中类和对象
Class Person{
String name = null;
int age = 0;
}
//声名并实例化对象
Person per = new Person();
说明:Person per 创建栈内存per,使用new Person()开辟堆内存空间,栈内存的per指向对应的堆内存空间,堆内存空间存储name=null;age=0;
对象创建的内存划分,如图:
4. 构造器
构造器没有任何返回值,如果类中没有构造器,则编译器会自动帮你常见一个默认的构造器,如果已经定义了构造器(无论是否有参数),编译器都不会帮你自动创建默认的构造器。
a. 格式:
访问修饰符 类名称(){
程序语句
}
b. 注意点:
(1)构造方法名称必须与类名一致
(2)构造方法没有返回值
5. 面向对象三大特征
a. 封装性
对外部不可见
b. 继承
扩展类的功能
c. 多态性
方法的重载
对象的多态
6. 方法的递归调用 实例如下:
public static void main(String[] args){
/**
* 递归方法的调用
* 100+99+...+1
* 输出的值为5050
*/
System.out.print(addNum(100));
}
//静态方法
public static int addNum(int num) {
if (num == 1) {
return 1;
} else {
return num + addNum(num - 1);
}
}
7. static关键字
- 由static修饰的变量成为静态变量,也称为类变量。
- 静态变量定义的位置时在方法之外。
- 静态变量与静态方法都是在类从磁盘加载至内存后被创建的,与类同时存在,同时消亡。
- 静态变量又称类的成员变量,在类中时全局变量,可以别类中的所有方法调用。
- 静态变量的值由jvm自动初始化。
- 使用static声名全局属性
- 使用static是声名的方法可以直接通过类名进行调用
- 使用static方法的时候,只能访问static声名的属性和方法,而非static声名的属性和方法时不能访问的。
8. 匿名对象
匿名对象就是没有名字的对象,如果程序中只是用一次该对象,就可以使用匿名对象的方式。
实例:
//学生类
class Student{
public void tell(){
System.out.print("Hello World!");
}
}
public class test{
public static void main(String[] args){
/**
* 匿名对象的使用
* 输出:Hello world!
*/
new Student().tell();
}
}
9. this关键字
- 表示类中的属性和调用方法
- 调用本类中的构造方法
- 表示当前对象
十四. java面向对象的基本特征:继承
A(实例化子类对象) -->|1.先调用父类构造| B(调用父类构造)
A -->|2.再调用子类构造| C(调用子类构造)
5. java方法重写与super关键字
- 在继承中,也存在这重写的概念,起始就是子类定义了和父类同名的方法
- 定义:
方法名称相同,返回值类型相同,参数也相同。 - 重写的限制:
被子类重写的方法不能拥有比父类方法更加严格的访问权限 - 访问权限:
private
十五. java面向对象-抽象类和接口
- 抽象类概念:
包含一个抽象方法的类就是抽象类 - 抽象方法:
声名而未被实现的方法,抽象方法必须使用abstract关键字声名 - 抽象类被子类继承,子类(如果不是抽象类,必须重写抽象类中的所有抽象方法)
- 定义格式:
abstract class className{
属性
方法
抽象方法
} - 抽象类不能直接实例化,要通过其子类进行实例化
- 接口是java中最重要的概念,接口可以理解为一种特殊的类,里面全部是有全局常量和公共的抽象方法组成。
- 接口的格式:
interface interfaceName{
全局常量
抽象方法
} - 接口的实现也必须通过子类,使用关键字implements,而且接口是可以多实现的。
- 一个子类可以同时继承抽象类和实现接口
- 一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承。
实例:
interface Inter3 extends Inter1,Inter2{}
4. 接口和抽象类的访问修饰符
- 接口可以使用public或者默认访问修饰符,接口的方法只能使用public,属性可以使用public、static、final;
- 抽象类可以使用public或者默认的访问修饰符,抽象类的方法可以使用public、protected、默认的或private,属性可以是public、static、final、protected、private。
十六. java面向对象多态性
class A {
public void tell1() {
System.out.println("A====tell1");
}
public void tell2() {
System.out.println("A====tell2");
}
}
class B extends A {
public void tell1() {
System.out.println("B====tell1");
}
public void tell3() {
System.out.println("B====tell3");
}
}
public class Test1 {
public static void main(String[] args) {
/**
* 向上转型
* 输出:B====tell1
* A====tell2
*/
// B b = new B();
// A a = b;
// a.tell1();//tell1重写,调用被重写之后的方法
// a.tell2();
/**
* 向下转型
* 输出:B====tell1
* A====tell2
* B====tell3
*/
A a = new B();//注意向下转型之前,先要向上转型
B b = (B) a;
b.tell1();
b.tell2();
b.tell3();
}
}
c. 对象的多态的应用
class A1{
public void tell1(){
System.out.println("A1====tell1");
}
}
class B1 extends A1{
public void tell2(){
System.out.println("B1====tell2");
}
}
class C1 extends A1{
public void tell3(){
System.out.println("C1====tell3");
}
}
class D1 extends A1{
public void tell4(){
System.out.println("D1====tell4");
}
}
public class Test2 {
public static void main(String[] args){
/**
* 多态的应用
* 输出:A1====tell1
* A1====tell1
* A1====tell1
*/
say(new B1());
say(new C1());
say(new D1());
}
public static void say(A1 a1){
a1.tell1();
}
}
2. instanceof关键字
在java中可以使用instanceof关键字判断一个对象到底是不是一个类的实例
3. 抽象类的应用
4. 接口的应用
interface USB {
void start();
void stop();
}
class C {
public static void work(USB u) {
u.start();
System.out.println("工作中");
u.stop();
}
}
class USBDisk implements USB {
@Override
public void start() {
System.out.println("u盘开始工作");
}
@Override
public void stop() {
System.out.println("u盘停止工作");
}
}
class Printer implements USB {
@Override
public void start() {
System.out.println("打印机开始工作");
}
@Override
public void stop() {
System.out.println("打印机停止工作");
}
}
public class Test3 {
public static void main(String[] args) {
/**
* 接口的应用
* 输出:u盘开始工作
* 工作中
* u盘停止工作
* 打印机开始工作
* 工作中
* 打印机停止工作
*/
C.work(new USBDisk());
C.work(new Printer());
}
}
十七. java面向对象之泛型
class Gen<T,K>{
private T take;
private K key;
}
//实例化
Gen<Integer,String> g = new Gen<Integer,String>();
4. 通配符
- 可以使用?作为通配符
5. 泛型接口
- 格式:
interface 接口名称<泛型标识>{}
6. 泛型方法
- 泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据类型。
- 格式:
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])
7. 泛型数组
public class Test3{
public static void main(String[] args){
Integer arr[] = {1,2,3,4};
tell(arr);
}
public static <T>void tell(T arr[]){
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
十八. 常用javaAPI详解
- java本地文件操作
public class Test5 {
public static void main(String[] args){
printFiles(new File("E:\\workspace\\interlIDEA\\JavaStudy"),1);
}
public static void printFiles(File dir,int tab){
if(dir.isDirectory()){
File next[] = dir.listFiles();
for (int i = 0; i < next.length; i++) {
for (int j = 0; j < tab; j++) {
System.out.print("|--");
}
System.out.println(next[i].getName());
if (next[i].isDirectory()) {
printFiles(next[i],tab + 1);
}
}
}
}
}
文件的简单读取
public class Test6 {
public static void main(String[] args){
File file = new File("text.txt");
if (file.exists()) {
System.out.println("exist");
try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine())!=null){
System.out.println(line);
}
br.close();
isr.close();
fis.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
File newFile = new File("newtext.txt");
FileOutputStream fos = new FileOutputStream(newFile);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("我深爱这你\n");
bw.write("我深深的爱着\n");
bw.close();
osw.close();
fos.close();
System.out.println("写入完成!");
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
十九. java的日期与时间处理
实例:
public class Test8 {
public static void main(String[] args) throws ParseException {
/**
* 时间实例:
* 设定女朋友的生日,并在提前2个星期的星期六提醒
*/
//1.设定生日,String
String birthday = "2015-05-30";
//2.将String类型转换为日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(birthday);
//3.对日期进行计算
Date spec = prepareBirthday(date);
//4.将计算后的结果,转换为String类型,输出
String str2 = simpleDateFormat.format(spec);
System.out.println(birthday + "提前2周的周六为:" + str2);
}
/**
* 传入一个日期,计算出该日期的2个星期前的周六的日期
*
* @param birthdayDate
* @return
*/
public static Date prepareBirthday(Date birthdayDate) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(birthdayDate);//传入的date日期,转换为calendar
calendar.add(Calendar.WEEK_OF_MONTH, -2);//提前2周
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//调整为当前星期的周六
return calendar.getTime();
}
}
二十. java工程结构管理
- Build Path事指定java工程所包含的额资源属性集合,在一个成熟的java工程中,不仅仅有自己编写的源代码,还需要引用系统运行库(JRE),第三方的功能扩展库,工作空间中的其他工程,甚至外部的类文件,所有这些资源都是被这个工程所依赖的,并且背引用后,才能够将工程编译成功,而build path就是用来配置和管理对这些资源的引用的。
Build Path一般包括:
二十一. jsp基础
方法名 | 对应规范 |
---|---|
GET | 向特定的资源发出请求 |
POST | 向指定资源提交数据进行处理请求 |
3. jsp基本语法
- jsp程序段定义
<!--jsp表达式输出-->
输出:<%="hello woWorld!"%>
<br/>
<%!
//jsp声名使用,相当于全局变量,可以再jsp的其他地方使用该变量。
String str2 = "Hello newWorld!";
%>
<%
//jsp程序段中定义的变量相当于局部变量,不同请求之间都会有一份独立的变量定义
String str1 = "Hello World";
out.println(str1);//jsp内置对象out
%>
<br/>
<%
out.println(str2);
%>
jsp代码注释
<!-- 1.Html注释 说明:此注释会被发送到客户端,用户是可以看到的,不安全 -->
<%--
2.jsp代码段注释,不会发送到客户端,相对安全
--%>
<%
//3.java程序段中的注释如下
//java程序段中的单行注释
/**
*多行注释,和在纯java代码中的注释相同
*/
%>
4. jsp编译指令和动作指令
- 说明:WEB-INF中的jsp就是无法通过地址栏访问的,所以安全。
访问web-inf下jsp资源的几种方式:
方法一:
如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置servlet格式差不多的配置就ok了 如下:
<servlet>
<servlet-name>runtain</servlet-name>
<jsp-file>/WEB-INF/INF.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>runtain</servlet-name>
<url-pattern>/XXX</url-pattern>
访问地址:http://localhost:8080/runtain/xxx 即可访问jsp页面内容
方法二:
<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />
方法三:
request.getRequestDispatcher("/WEB-INF/a.jsp").forward(request, response);
怎么样让servlet访问web-inf下的网页或jsp文件呢?
因为web-inf下,应用服务器把它指为禁访目录,即直接在浏览器里是不能访问到的。
因些,可以让servlet进行访问,如web-inf下有a.jsp,则可以用request.getRequestDispatcher(“/WEB-INF/a.jsp”).forward(request,response);进行派遣访问
但如果web-inf下有a.htm,则用request.getRequestDispatcher(“/WEB-INF/a.htm”).forward(request,response);则不能访问。
一开始想不通,觉得怪。后来想想,jsp其实也是servlet,会自动编译的,于是work目录下会有/web-inf/ajsp.class类型,于是有头绪了,让应用服务器能够编译.htm,如a htm.class.抱有这个想法,开始动手
在tomcat下的conf/web.xml,找到jsp的访问方式
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
于是在下面添加
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
随后,一切OK,此时可访问a.htm。
a.html在work/web-inf/下者有a$htm.class,a$html.class生成
编译指令:
““
<%@ include file=”“%>
动作指令:
说明:forward指令下面的内容不会被执行
说明:注意区分编译指令的include和动作指令的include的区别
对于静态包含,<%@include%>,中包含的文件,只是简单的嵌入到主文件中,就是在jsp页面转化成Servlet时才嵌入到主文件中,因为运行的结果是只生成了一个Servlet。
而对于动态包含<jsp:incude>,如果被包含文件是动态的,那么就会生成两个Servlet,也就是被包含文件也要经过jsp引擎编译执行生成一个Servlet,两个Servlet通过request和reponse进行通信。如果被包含的文件是静态的,那么这种情况和<%@include>就很相似,只生成了一个Servlet,但是他们之间没有进行简单的嵌入,而依然是通过request和reponse进行的通信。
<br>
5. jsp内置对象
- out对象
```jsp
<%
out.print("william");
out.newLine();
out.flush();//强制刷新服务器缓冲区中的数据
out.clearBuffer();//清空缓冲区数据
out.clear();//
out.println("获取当前缓冲区大小:"+out.getBufferSize());
out.println("获取缓冲区剩余字节数目:"+out.getRemaining());
%>
<div class="se-preview-section-delimiter"></div>
- request对象
<form action="" method="post">
<input type="text" name="userName"/>
<input type="submit" value="提交">
</form>
请求的方法名:<%= request.getMethod() %><br/>
请求的资源:<%= request.getRequestURI() %><br/>
请求使用的协议:<%= request.getProtocol() %><br/>
请求的服务器IP:<%= request.getServerName() %><br/>
请求的服务器端口:<%= request.getServerPort() %><br/>
客户端IP地址:<%= request.getRemoteAddr() %><br/>
客户端主机名:<%= request.getRemoteHost() %><br/>
表单提交来的值:<%= request.getParameter("userName") %><br/>
<!--
输出:
请求的方法名:GET
请求的资源:/Web01/jsps/Test05/request.jsp
请求使用的协议:HTTP/1.1
请求的服务器IP:localhost
请求的服务器端口:8080
客户端IP地址:127.0.0.1
客户端主机名:127.0.0.1
表单提交来的值:null
-->
<div class="se-preview-section-delimiter"></div>
- response对象
<%
response.setHeader("Cache-Control","no-cache");
response.setIntHeader("Refresh",2);
out.println("date is" + new java.util.Date().toString() + "<br/>");
%>
<%
//response实例
Cookie myCookie = new Cookie("william","123456");
myCookie.setMaxAge(3600);
response.addCookie(myCookie);
%>
<div class="se-preview-section-delimiter"></div>
- exception对象
异常描述信息:<br/>
<%
out.println(exception.getMessage());
%>
<br/>
exception对象的字符串描述:<br/>
<%
out.println(exception.toString());
%>
<br/>
<%
exception.printStackTrace();
%>
<div class="se-preview-section-delimiter"></div>
- config对象
在web.xml中添加配置:
<servlet>
<servlet-name>config</servlet-name>
<jsp-file>/jsps/Test08/config.jsp</jsp-file>
<init-param>
<param-name>username</param-name>
<param-value>william</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<div class="se-preview-section-delimiter"></div>
jsp中使用config获取:
用户名:<%= config.getInitParameter("username")%><br/>
密码:<%= config.getInitParameter("password")%>
<%--
浏览器中输出:用户名:william
密码:123456
--%>
<div class="se-preview-section-delimiter"></div>
- page对象
<%
out.println("page对象字符串"+page.toString());
page.getClass();
page.hashCode();
//page.equals(obj);
%>
<div class="se-preview-section-delimiter"></div>
- session对象
sessionId:<%= session.getId()%><br/>
session的创建时间:<%= new java.util.Date(session.getCreationTime())%><br/>
session的最后访问时间:<%= new java.util.Date(session.getLastAccessedTime())%><br/>
session的失效时间:<%= session.getMaxInactiveInterval()%><br/>
<div class="se-preview-section-delimiter"></div>
- application对象
服务器信息:<%= application.getServerInfo()%><br/>
应用名称:<%= application.getServletContextName()%><br/>
主机名称:<%= application.getVirtualServerName()%><br/>
<%
//页面访问计数器实例
Object obj = application.getAttribute("counter");
if (obj == null) {
application.setAttribute("counter",new Integer(1));
out.println("该页面被访问了1次<br/>");
}else{
int counterValue = Integer.parseInt(obj.toString());
counterValue++;
out.println("该页面被访问了 " + counterValue + "次<br/>");
application.setAttribute("counter",counterValue);
}
%>
<div class="se-preview-section-delimiter"></div>
- pageContext对象
<%
JspWriter myOut = pageContext.getOut();
myOut.println("Hello world!");
pageContext.setAttribute("userName","william",pageContext.SESSION_SCOPE);
String value = session.getAttribute("userName").toString();
out.println(value);
out.println("<br/>");
%>
<div class="se-preview-section-delimiter"></div>
二十二. JDBC相关知识
术语:
1NF(原子性)
2NF(唯一性)
3NF(冗余行判断)
sql功能:DDL、DML、DCL
JDBC编程
- JDBC(Java Data Base Connectivity)
- JDBC的组成:JDBC API/JDBC Driver API
- JDBC API:DriverManager/Connection/Statement/PreparedStatement/ResultSet
- JDBC Driver API;JDBC-ODBC bridge/部分java技术的本地API驱动程序/全部基于java技术的本地API驱动程序/全部基于java技术的本地协议驱动程序
JDBC程序编写步骤:
A(JDBC编程流程) -->B(1.加载驱动)
A -->C(2.打开连接)
A -->D(3.执行查询)
A -->E(4.处理结果)
A -->F(5.清理环境)
<div class="se-preview-section-delimiter"></div>
实例:
public static void main(String[] args){
String sql = "select * from tbl_user";
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//获取数据库连接
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","");
st = conn.createStatement();
rs = st.executeQuery(sql);
while(rs.next()){
System.out.print(rs.getInt("id")+" ");
System.out.print(rs.getString("name")+" ");
System.out.print(rs.getString("password")+" ");
System.out.print(rs.getString("email")+" ");
System.out.println();
}
}catch (Exception e){
e.printStackTrace();
}finally{
try {
rs.close();
}catch (Exception e2){}
try {
st.close();
}catch (Exception e3){}
try {
conn.close();
}catch (Exception e4){}
}
}
<div class="se-preview-section-delimiter"></div>
4. 事务处理
- 事务的四个特性:原子性/一致性/隔离性/持久性
事务实例:
public class TransactionTest {
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","");
}catch (Exception e){
e.printStackTrace();
}
return conn;
}
public static void insertUserData(Connection conn) throws SQLException{
String sql = "insert into tbl_user(id,name,password,email) values (10,'Tom','123456','tom@gmail.com')";
Statement st = conn.createStatement();
int count = st.executeUpdate(sql);
System.out.println("向用户表中插入了" + count + "条记录");
//conn.close();
}
public static void insertAddressData(Connection conn) throws SQLException{
String sql = "insert into tbl_address(id,city,country,user_id) values (1,'shanghai','China','10')";
Statement st = conn.createStatement();
int count = st.executeUpdate(sql);
System.out.println("向地址表中插入了" + count + "条记录");
//conn.close();
}
public static void main(String[] args){
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
insertUserData(conn);
insertAddressData(conn);
conn.commit();
} catch (SQLException e) {
System.out.println("=========捕获到sql异常==========");
e.printStackTrace();
try {
conn.rollback();
System.out.println("=========事务回归==========");
} catch (Exception e1) {
e1.printStackTrace();
}
}finally{
try {
if (conn!=null) {
conn.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
<div class="se-preview-section-delimiter"></div>
5. JDBC编程优化
二十三. Servlet概述
A(Servlet) --> B(Server+Applet)
A --> C(特殊的java类)
A --> D(Servlet与HTTP)
- servlet处理流程分析
- servlet过滤器
二十四. java基础知识面试指导
本课时巩固知识点:
- java关键字及功能
- java数据类型
- java基本运算符
- java基本程序控制语句
java数组
常见java基础知识陷阱
实例:
谈谈final,finally,finalize的区别?
答:final—修饰符(关键字)
finally—再异常处理时提供finally块来执行任何清除操作
finalize—方法名
二十五. java面向对象面试指导
- java面向对象必会知识点
- java面向对象知识点精华
- java面向对象面试案例解析
实例:接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
答:接口可以继承接口。抽象类可以实现接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。
二十六. jsp和servlet面试指导
二十七. mysql初级面试指导
http://www.jikexueyuan.com/course/1362_3.html
相关文章
- 暂无相关文章
用户点评