java编程常见错误

2022-09-21

第一篇:java编程常见错误

Java常见异常和错误

1、 在某一路径下执行编译好的class文件出错。

异常如下:

E:liwy>java Test98

Exception in thread "main" java.lang.NoClassDefFoundError: Test98

如果出现了以上错误提示,常见问题有如下两种:1 大小写写错了, 2 路径不正确。

2、数组错误,访问不存在的数组,数组超出绑定,代码如下: public class ArrayDemo

{

} public static void main(String args[]){}int array[] = null; //声明数组 array = new int[3]; //为数组开辟空间,大小为3 for(int i=0;i

异常如下:

array[0]=0

array[1]=

1array[2]=

2Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3at ArrayDemo.main(ArrayDemo.java:11)

以上就是数组的索引超出绑定,就是表示数组越界。

3、某个类没有实例化,访问类属性时,出现空指针异常

class Person{

String name ; int age ;// 声明姓名属性 // 声明年龄属性 public void tell(){ // 取得信息

};} System.out.println("姓名:" + name + ",年龄:" + age) ;

public class ClassDemo03{

}; public static void main(String args[]){} Person per = null ; per.name = "张三" ; per.age = 30 ; per.tell() ;// 声明对象 // 为姓名赋值 // 为年龄赋值 //per = new Person() ; // 实例化对象 // 调用方法,打印信息

异常如下:

Exception in thread "main" java.lang.NullPointerException

at ClassDemo03.main(ClassDemo03.java:12)

4、错误的多态,出现异常

class A{

};

class B extends A{

};

public class PolDemo03{

}; public static void main(String asrgs[]){} A a = new A() ;B b = (B)a ;b.fun1() ; b.fun2() ; b.fun3() ;// 实例化了一个父类对象 // 发生了向下转型关系 public void fun1(){} public void fun3(){} System.out.println("B --> public void fun3(){}") ;// 此方法被子类覆写了 System.out.println("B --> public void fun1(){}") ;} public void fun2(){} this.fun1() ;// 调用fun1()方法// 定义类A // 定义fun1()方法 public void fun1(){ System.out.println("A --> public void fun1(){}") ;

异常如下:

Exception in thread "main" java.lang.ClassCastException: A

at PolDemo03.main(PolDemo03.java:20)

5、两个数字相除,被除数为0,出现异常

public class ExceptionDemo01{

}; public static void main(String args[]){} System.out.println("********** 计算开始 ***********") ; int i = 10 ;int j = 0 ;// 定义整型变量// 定义整型变量 int temp = i / j ; // 此处产生了异常 System.out.println("两个数字相除的结果:" + temp) ; System.out.println("********** 计算结束 ***********") ;

异常如下:

********** 计算开始 ***********

Exception in thread "main" java.lang.ArithmeticException: / by zero

at ExceptionDemo01.main(ExceptionDemo01.java:6)

6、两个数字相除,输入两个参数,分别为字母a 和b,出现异常,数字格式化出问题 public class ExceptionDemo04{

}; public static void main(String args[]){} System.out.println("********** 计算开始 ***********") ; int i = 0 ;int j = 0 ;try{} System.out.println("********** 计算结束 ***********") ; String str1 = args[0] ;String str2 = args[1] ;i = Integer.parseInt(str1) ; j = Integer.parseInt(str2) ; // 接收第一个参数 // 接收第二个参数 // 将第一个参数由字符串变为整型 // 将第二个参数由字符串变为整型 // 定义整型变量// 定义整型变量 int temp = i / j ; // 此处产生了异常 System.out.println("两个数字相除的结果:" + temp) ; System.out.println("----------------------------") ; // 捕获算术异常 System.out.println("出现异常了:" + e) ; }catch(ArithmeticException e){

异常如下:

********** 计算开始 ***********

Exception in thread "main" java.lang.NumberFormatException: For input string: "a"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)at java.lang.Integer.parseInt(Integer.java:447)

at java.lang.Integer.parseInt(Integer.java:497)

at ExceptionDemo04.main(ExceptionDemo04.java:9)

6、两个数字相除,输入两个参数,如果两个参数什么也不输入,出现异常,数组超出绑定。 异常如下:

********** 计算开始 ***********

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

at ExceptionDemo04.main(ExceptionDemo04.java:7)

7、assert断言的使用,当断言结果不对出现异常。

public class Test

{

} public static void main(String args[]){} int i[] = {1,2,3};// 数组长度为3 assert i.length==0;// 此处断言数组长度为0

异常如下:

D:d代码>java -ea Test

Exception in thread "main" java.lang.AssertionError

at Test.main(Test.java:5)

 断言需要在运行时需要加上“-ea”,如上java –ea 类名。

第二篇:Java编程

《Java编程》

计算器

班级:****** 姓名:******

学号: ******* 指导老师:******

实验名称:JAVA计算器

1实验目的: Java编程语言在编程方面的具体应用,以及使用面向对象方法,对小应用程序进行需求分

析、概要设计、详细设计,最后使用Java编程实现的全过程。

2实验意义:

在编程我们使用的java语言,是目前比较流行的编程语言。在当今这个时代,java语言在编程方面的优势使得编程有了更好的选择。Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。

3 实训性质

本课程是计算机信息管理专业的一门实践性课程,是《Java编程》课程的实践性教学环节。

4 实训目标

⑴综合应用JAVA程序设计的知识解决实际问题。

⑵学会在应用程序的设计过程中,应用面向对象的程序设计方法。 ⑶学会应用JDBC创建数据库应用程序。

⑷学会开发基于Swing的应用程序及多文档应用程序的设计。

5 实训任务

用Java语言开发工具(例如JDK、Jcreator、NetBeans等)制作一个简单的可运行的完整的应用程序或小型系统,并编制出各阶段必要的文档。

将创建一个计算器,可以进行常用的加减乘除算术运算。本实例的知识点有:窗口布局器Gridlayout的应用,对按钮消息的监听和响应。

6实训条件

<软件:>Windows XP,NetBeans IDE 6.

52 7开发背景: Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。

8系统部分分析:

1) Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。

2) Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定

3) Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

4) Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。

5) Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制.

6) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。

7) Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的.

8) Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。

9) Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。

10) Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。

11) Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。

目录

课程设计题目 ……………………………… p1

课程设计简介 ……………………………… p2

课程设计源代码…………………………… p5

课程设计运行结果 ……………………… p15 课程设计心得体会 ………………………

p16

package computerpad; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.LinkedList; import java.text.NumberFormat; public class ComputerPad extends Frame implements ActionListener {

NumberButton numberButton[];

OperationButton oprationButton[];

Button 小数点按钮,正负号按钮,退格按钮,

求倒数按钮,等号按钮,清零按钮;

Panel panel;

JTextField resultShow;

String 运算符号[]={"+","-","*","/"};

LinkedList 链表;

boolean 是否按下等号=false;

public ComputerPad()

{

super("计算器");

链表=new LinkedList();

numberButton=new NumberButton[10];

for(int i=0;i<=9;i++)

{

numberButton[i]=new NumberButton(i);

numberButton[i].addActionListener(this);

}

oprationButton=new OperationButton[4];

for(int i=0;i<4;i++)

{

oprationButton[i]=new OperationButton(运算符号[i]);

oprationButton[i].addActionListener(this);

}

小数点按钮=new Button(".");

正负号按钮

=new Button("+/-");

等号按钮=new Button("=");

求倒数按钮=new Button("1/x");

退格按钮=new Button("退格");

清零按钮=new Button("C");

清零按钮.setForeground(Color.red);

退格按钮.setForeground(Color.red);

等号按钮.setForeground(Color.red);

求倒数按钮.setForeground(Color.blue);

正负号按钮.setForeground(Color.blue);

小数点按钮.setForeground(Color.blue);

退格按钮.addActionListener(this);

清零按钮.addActionListener(this);

等号按钮.addActionListener(this);

小数点按钮.addActionListener(this);

正负号按钮.addActionListener(this);

求倒数按钮.addActionListener(this);

resultShow=new JTextField(10);

resultShow.setHorizontalAlignment(JTextField.RIGHT);

resultShow.setForeground(Color.blue);

resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14));

resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));

resultShow.setBackground(Color.white);

resultShow.setEditable(false);

panel=new Panel();

panel.setLayout(new GridLayout(4,5));

panel.add(numberButton[1]);

panel.add(numberButton[2]);

panel.add(numberButton[3]);

panel.add(oprationButton[0]);

panel.add(清零按钮);

panel.add(numberButton[4]);

panel.add(numberButton[5]);

panel.add(numberButton[6]);

panel.add(oprationButton[1]);

panel.add(退格按钮);

panel.add(numberButton[7]);

panel.add(numberButton[8]);

panel.add(numberButton[9]);

panel.add(oprationButton[2]);

panel.add(求倒数按钮);

panel.add(numberButton[0]);

panel.add(正负号按钮);

panel.add(小数点按钮);

panel.add(oprationButton[3]);

panel.add(等号按钮);

add(panel,BorderLayout.CENTER);

add(resultShow,BorderLayout.NORTH);

addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

setVisible(true);

setBounds(100,50,240,180);

setResizable(false);

validate();

} public void actionPerformed(ActionEvent e)

{

if(e.getSource() instanceof NumberButton)

{

NumberButton b=(NumberButton)e.getSource();

if(链表.size()==0)

{

int number=b.getNumber();

链表.add(""+number);

resultShow.setText(""+number);

是否按下等号=false;

}

else if(链表.size()==1&&是否按下等号==false)

{

int number=b.getNumber();

String num=(String)链表.getFirst();

String s=num.concat(""+number);

链表.set(0,s);

resultShow.setText(s);

}

else if(链表.size()==1&&是否按下等号==true)

{

int number=b.getNumber();

链表.removeFirst();

链表.add(""+number);

是否按下等号=false;

resultShow.setText(""+number);

}

else if(链表.size()==2)

{

int number=b.getNumber();

链表.add(""+number);

resultShow.setText(""+number);

}

else if(链表.size()==3)

{

int number=b.getNumber();

String num=(String)链表.getLast();

String s=num.concat(""+number);

链表.set(2,s);

resultShow.setText(s);

}

}

else if(e.getSource() instanceof OperationButton)

{

OperationButton b=(OperationButton)e.getSource();

if(链表.size()==1)

{

String fuhao=b.get运算符号();

链表.add(fuhao);

}

else if(链表.size()==2)

{

String fuhao=b.get运算符号();

链表.set(1,fuhao);

}

else if(链表.size()==3)

{

String fuhao=b.get运算符号();

String number1=(String)链表.getFirst();

String number2=(String)链表.getLast();

String 运算符号=(String)链表.get(1);

try

{

double n1=Double.parseDouble(number1);

double n2=Double.parseDouble(number2);

double n=0;

if(运算符号.equals("+"))

{

n=n1+n2;

}

else if(运算符号.equals("-"))

{

n=n1-n2;

}

else if(运算符号.equals("*"))

{

n=n1*n2;

}

else if(运算符号.equals("/"))

{

n=n1/n2;

}

链表.clear();

链表.add(""+n);

链表.add(fuhao);

resultShow.setText(""+n);

}

catch(Exception ee)

{

}

}

}

else if(e.getSource()==等号按钮)

{

是否按下等号=true;

if(链表.size()==1||链表.size()==2)

{

String num=(String)链表.getFirst();

resultShow.setText(""+num);

}

else if(链表.size()==3)

{

String number1=(String)链表.getFirst();

String number2=(String)链表.getLast();

String 运算符号=(String)链表.get(1);

try

{

double n1=Double.parseDouble(number1);

double n2=Double.parseDouble(number2);

double n=0;

if(运算符号.equals("+"))

{

n=n1+n2;

}

else if(运算符号.equals("-"))

{

n=n1-n2;

}

else if(运算符号.equals("*"))

{

n=n1*n2;

}

else if(运算符号.equals("/"))

{

n=n1/n2;

}

resultShow.setText(""+n);

链表.set(0,""+n);

链表.removeLast();

链表.removeLast();

}

catch(Exception ee)

{

}

}

}

else if(e.getSource()==小数点按钮)

{

if(链表.size()==0)

{

是否按下等号=false;

}

else if(链表.size()==1)

{

String dot=小数点按钮.getLabel();

String num=(String)链表.getFirst();

String s=null;

if(num.indexOf(dot)==-1)

{

s=num.concat(dot);

链表.set(0,s);

}

else

{

s=num;

}

链表.set(0,s);

resultShow.setText(s);

}

else if(链表.size()==3)

{

String dot=小数点按钮.getLabel();

String num=(String)链表.getLast();

String s=null;

if(num.indexOf(dot)==-1)

{

s=num.concat(dot);

链表.set(2,s);

}

else

{

s=num;

}

resultShow.setText(s);

}

}

else if(e.getSource()==退格按钮)

{

if(链表.size()==1)

{

String num=(String)链表.getFirst();

if(num.length()>=1)

{

num=num.substring(0,num.length()-1);

链表.set(0,num);

resultShow.setText(num);

}

else

{

链表.removeLast();

resultShow.setText("0");

}

}

else if(链表.size()==3)

{

String num=(String)链表.getLast();

if(num.length()>=1)

{ num=num.substring(0,num.length()-1);

链表.set(2,num);

resultShow.setText(num);

}

else

{

链表.removeLast();

resultShow.setText("0");

}

}

}

else if(e.getSource()==正负号按钮)

{

if(链表.size()==1)

{

String number1=(String)链表.getFirst();

try

{

double d=Double.parseDouble(number1);

d=-1*d;

String str=String.valueOf(d);

链表.set(0,str);

resultShow.setText(str);

}

catch(Exception ee)

{

}

}

else if(链表.size()==3)

{

String number2=(String)链表.getLast();

try

{

double d=Double.parseDouble(number2);

d=-1*d;

String str=String.valueOf(d);

链表.set(2,str);

resultShow.setText(str);

}

catch(Exception ee){

}

}

}

else if(e.getSource()==求倒数按钮)

{

if(链表.size()==1||链表.size()==2)

{

String number1=(String)链表.getFirst();

try

{

double d=Double.parseDouble(number1);

d=1.0/d;

String str=String.valueOf(d);

链表.set(0,str);

resultShow.setText(str);

}

catch(Exception ee){

}

}

else if(链表.size()==3)

{

String number2=(String)链表.getLast();

try

{

double d=Double.parseDouble(number2);

d=1.0/d;

String str=String.valueOf(d);

链表.set(0,str);

resultShow.setText(str);

}

catch(Exception ee){

}

}

}

else if(e.getSource()==清零按钮)

{

是否按下等号=false;

resultShow.setText("0");

链表.clear();

}

} public static void main(String args[])

{

new ComputerPad();

}

}

package computerpad; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class NumberButton extends Button {

int number;

public NumberButton(int number)

{

super(""+number);

this.number=number;

setForeground(Color.blue);

}

public int getNumber()

{

return number;

} }

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class OperationButton extends Button {

String 运算符号;

public OperationButton(String s)

{

super(s);

运算符号=s;

setForeground(Color.red);

}

public String get运算符号()

{

return 运算符号;

} } 14

15 Java实训心得:

未接触Java之前,听人说Java这门语言如何的强大和难以入门,但学习之后,给我的感觉却是语言没有所谓的难于不难,关键是自己有没有真正投入去学,有没有花时间去学。Java是一门很好的语言,经过周围人对Java的宣传,我一开始不敢去学习这门语言,因为一门高级语言总是让人想到一开始的学习会很难,但是后来在自己的努力和老师同学的帮助下,我加入了Java学习者的行列。

老师把我们带进了门,那么,以后漫长的深入学习还是要靠自己。经常性的编写一些程序,或则去看懂、研究透别人编写的程序对于我们打好基础是非常有利的。让我们怀着对Java的一腔热情,用自己的刻苦努力去把Java学好。将来,用自己的成绩去回报有恩于我们的社会、家人和朋友。

第三篇:Java编程学习顺序

1. 第一阶段 掌握要点:Java语基础知识。包括异常、IO流、多线程、集合类、数据库。

(切记基础知识一定要时时刻刻巩固)eg:Java编程思想、Java2 核心技术

2. 第二阶段掌握要点:Tomcat,毋庸置疑,Tomcat为学习web服务首选。而应用服务器

目前主要有:jboss , weblogic . websphere. 而Tomcat和jboss是首选。

3. 第三阶段掌握要点:Java网络编程。包括:SocketRMLHTMLJSPJavaBean

Servlet.开发工具:Myeclipsedreamweaver顺序:

1、学习web 知识:htmldreamwavejavascript

2、先学习jsp设计、Javaservlet编程

3、学习jdbc数据库编程

4、学习 ,他和学习ejb可以结合起来《《精通ejb》》学习ejb设计模式和看代码(最重要)《jsp2.0 技术手册》 在jsp上不要花太多时间,在时间放在servlet多一些

4. 第四阶段 掌握要点:流行MVC 架构和Java对象持久化技术。包括struts

SpringHibernate JSF.学习过程:先学Struts,再学习Hibernate,最后学习Spring

第四篇:java软件编程培训

最好的Java软件编程培训

西安雁塔尚学堂计算机学校创办于2009年,是陕西省培养计算机实用性人才的学校,学校以“程序运行人生,快乐魔力学堂”的口号名扬陕西,并且开创了V教学法等软件人才培养的模式先河。学校采用“理论+实践”并行的教学方式,使学生在这两者的结合中掌握一技之长,为社会培养和输送了大量的高级软件人才。

学校坐落于西安软件园交大捷普大厦,环境优美,更与国内外知名软件企业毗邻,人文气息浓厚。学校拥有自己的网站和机房供学生进行软件开发、设计等课程的实践。同时学校也是西安工业大学计算机与工程学院、陕西国际商贸学院、西安财经学院统计学院、陕西科技大学理学院、杨陵职业技术学 院等大学的实习就业项训基地。

开设课程软件编程培训,android高级课程,iphone高级课程

招生对象

1. iPhone培训课程面向希望把握历史性机遇,希望成为iPhone手机软件开发的紧缺人才。

2. 计算机相关专业、大专以及以上学历。

3. 本课程同样适用于希望了解iPhone手机软件开发,为未来业务转型奠定基础的企业技术团队。

免费复训 + 企业进阶课程 + 终身辅导

我们为学员专门开设QQ群、技术博客、微博等,学员到企业之后,如在技术和职业方向遇到任何瓶颈,都可以向导师请教。我们保持对行业和技术的高度敏感,不断优化和丰富课程内容,这些新技术毕业学员都可以免费学习,同时定期举办的技术讲座和活动,也是对学员免费开放的。

第五篇:Java JDBC编程总结

Hibernate、TopLink等OR Mapping操作数据库的技术都是建立JDBC技术之上的,实际来说,他们的性能和JDBC是有很大差距的,但反过来说,如果JDBC用不好,还不如hibernate呢。暂且不说这些孰优孰劣的话了,再次主要是对Java的基础技术做个总结,以加深认识。

一、JDBC的基本原理

JDBC是Java操作数据库的技术规范。他实际上定义了一组标准的操作数据库的接口。为了能让Java操作数据库,必须要有实现了JDBC这些接口的类,不同的数据库厂商为了让Java语言能操作自己的数据库,都提供了对JDBC接口的实现--这些实现了JDBC接口的类打成一个jar包,就是我们平时看到的数据库驱动。由于不同的数据库操作数据的机制不一样,因此JDBC的具体实现也就千差万别,但是你作为java程序员,你只和Java JDBC的接口打交到,才不用理会他们怎么实现的!呵呵,现在知道JDBC驱动是怎么回事了。当然,这些类可

以自己去写--如果你很牛!

二、JDBC编程的步骤

为了说明这个步骤,假设你要通过java程序执行一个sql查询,你需要按照如下的步骤去走:

1、创建指定数据库的URL 这个URL实际上还是统一资源定位器,里面包含了一些连接数据库的信息:数据库类型、端口、驱动类型、连接方式、数据库服务器的ip(或名字)、数据库名(有的是别名)等。其格

式如下:

jdbc:subProtocol:subName://DBserverIP:port/DatabaseName 例如mysql的一个url:jdbc:mysql://192.168.3.143:3306/zfvims

2、加载驱动类到JVM内存区域中

有两种方法:

一种是用Class.forName()方法加载指定的驱动程序。

一种是将驱动程序添加到java.lang.System的属性jdbc.drivers中。

最后说明一点,有时候添加到系统的CLASSPATH环境变量是不行的,原因是在使用JDBC接口

操作数据库前,JVM还没有加载上驱动。 Class.forName("com.mysql.jdbc.Driver")

3、、通过DriverManager类管理驱动、创建数据库连接。

DriverManager类作用于程序员和JDBC驱动程序之间,提供注册管理驱动建立连接细节等方法,它所有成员均为静态的。通过其getConnection方法会创建一个JDBC Connection对象。

Connection conn=DriverManager.registerDriver("jdbc:mysql://192.168.3.143:3306/zfvims","lava

soft","password");

4、Connection类--数据库连接

这里所说的Connection类实际上是实现了JDBC的Connection接口的类,这个类一般都是jdbc驱动程序实现了。Connection类表示了数据库连接,通过其对象可以获取一个获取数据库和表等数据库对象的详细信息。但更多的是通过这个连接更进一步去向数据库发送SQL语

句去执行,下面会讲到。

数据库的连接的建立是很耗费资源和时间的,因此在不用连接的情况下要通过其close()方

法将连接关闭,以释放系统资源。

5、Statement类--发送并执行(静态)SQL语句

通过Connection对象的createStatement()方法可以创建一个Statement对象,通过该对象的方法可以(发送)并执行一个静态sql语句。如果要执行动态的sql(sql串中有参数),那么就用PreparedStatement类,用法和Statement类似。

Statement stmt=con.createStatement()

6、ResultSet类--结果集

当你执行一条sql查询后,就会产生一个查询结果。ResultSet就表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet 对象具有指向其当前数据行的指针。通过ResultSet对象不但可以结果集数据,还可以获取结果集表的列名、数据类型等信息。

ResultSet rs=stmt.executeQuery(sql)

7、关闭数据库连接

当对sql操作完成后,应该关闭数据库连接,这样避免因为连接未关闭而耗费系统资源,如果每次都不关闭,多次操作将建立多个连接,最终数据库连接会达到最大限度,或者耗尽系统的资源,从而导致应用崩溃。因此要注意关闭资源,尤其是数据库连接。

三、JDBC编程最基本的实例

下面通过一个执行一条简单的MySQL查询来说名上面的JDBC编程的一般方法和步骤。

public

class TestJDBC(){

1.public

static Connection getConnectionByJDBC() { Connection conn =

null; 2.

try { //装载驱动类

3. Class.forName("com.mysql.jdbc.Driver"); } catch

(ClassNotFoundException e) { 4. System.out.println("装载驱动异

常!"); e.printStackTrace();

5. }

try { 6.

//建立JDBC连接

conn = DriverManager.getConnection(""jdbc:mysql://192.168.3.143:3306/zfvims

","lavasoft","password");

7. } catch (SQLException e) { System.out.println("

链接数据库异常!"); 8. e.printStackTrace(); }

9.

return conn; }

10.

public

static String test() { 11. String sqlx = "select t.code,t.name from province t order by

t.code asc";

try { 12.

//创建一个JDBC声明

Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,

ResultSet.CONCUR_READ_ONLY);

13.

//执行查询

ResultSet = stmt.executeQuery(sqlx);

14.

while (rs.next()) { String code =

rs.getString("code");

15. String name = rs.getString("name"); System.out.println(code+name)

; 16. } } catch (SQLException e) { 17. System.out.println(e.getMessage()); e.print

StackTrace();

18. } finally { //预防性关闭连接(避免异常发生时在try语句块关闭连接没有执行)

19.

try {

if (conn != null) conn.close(); 20. } catch (SQLException e) { System.out.println(e.getMessage()); 21. e.printStackTrace(); }

22. } }

23.

public static

void main(String args[]) { new TestJDBC().test();

24. }

25. }

四、JDBC编程的陷阱

1、conn一定要在finally语句块进行关闭。

2、Statement、ResultSet尽可能缩小其变量作用域。

3、Statement可以使用多次,定义多个。一个Statement对象只和一个ResultSet对象关联,

并且是最后一次查询。

4、ResultSet在Connection、ResultSet关闭后自动关闭。

还有很多需要写的,以后再慢慢总结。