Java开发者编写SQL语句时常见的10种错误
异常
如何解决异常定位分析原因在发生异常的位置解决产生异常的原因纪录异常异常名字java.sql.SQLException: Io 异常: Connection refused(产生原因数据库服务名错误conn = DriverManager.getConnection("jdbc:oracle:thin:@解决方案服务名应该和管理 OracleService后面的名称一样1异常名字ng.ClassNotFoundException: oracle.jdbc.driver.OracleDri 找不到类完全限定类名产生原因完全限定类名错误没有导入类库 jar解决方案检查是否导入合适类库检查完全限定类名是否正确修正错误2异常名字ng.NullPointerException空指针异常产生原因对象是null,调用方法或者访问属性解决方案查找对象应该在哪里创建未被创建的原因3异常名字java.sql.SQLException: No suitable driverjava.sql.SQLException: 指定了无效的 Oracle URL产生原因连接字符串协议部分拼写错误解决方案4异常名字java.sql.SQLException: ORA-01017: invalid username/password; lo 产生原因用户名或密码错误解决方案5异常名字java.sql.SQLException: Io 异常: The Network Adapter could not e 产生原因数据库服务可能未启动,或数据库ip错误解决方案6异常名字Exception in thread "main" java.sql.SQLException: ORA-00911: 无产生原因sql语句错误解决方案7异常名字Exception in thread "main" java.sql.SQLException: 列名无效产生原因rs.getString("列名");sql语句 select 后面的列名不解决方案8异常名字java.sql.SQLException: ORA-00904: "SSID": 无效的标识符产生原因sql语句列名拼写错误解决方案9异常名字java.sql.SQLException: ORA-00942: 表或视图不存在产生原因表名错误或者 表不存在解决方案10异常名字java.sql.SQLException: ORA-01008: 并非所有变量都已关联产生原因sql语句中的问号没有全部被替换解决方案11没有异常。
java.sql 详解
Java.sql详解Java.sql是Java语言中用于处理数据库操作的API,它提供了用于连接数据库、执行SQL查询和更新、处理结果集等功能。
通过使用Java.sql,开发人员可以轻松地与关系型数据库进行交互,从而在Java应用程序中实现数据持久化。
以下是Java.sql的一些主要功能和组件:1.数据库连接要使用Java.sql进行数据库操作,首先需要建立与数据库的连接。
Java.sql提供了java.sql.DriverManager类和java.sql.Connection接口来管理数据库连接。
通过调用DriverManager的getConnection()方法并传递适当的连接字符串和凭据,可以建立与数据库的连接。
1.SQL语句执行一旦建立了数据库连接,就可以使用java.sql.Statement、java.sql.PreparedStatement和java.sql.CallableStatement等接口来执行SQL语句。
Statement用于执行静态SQL语句,而PreparedStatement用于执行参数化SQL语句。
这两种方式都可以执行查询和更新操作。
CallableStatement用于执行存储过程。
1.结果集处理执行SQL查询后,将返回一个java.sql.ResultSet对象,该对象表示查询结果集。
ResultSet提供了用于检索数据的方法,如next()、getInt()、getString()等。
通过遍历结果集,可以获取查询结果并进行处理。
1.事务管理Java.sql还提供了事务管理功能,以确保数据的完整性和一致性。
通过使用java.sql.Connection的setAutoCommit()和commit()方法,可以控制事务的提交和回滚。
在执行一系列数据库操作后,可以使用commit()方法将它们提交到数据库,或者使用rollback()方法撤销它们。
1.异常处理Java.sql还提供了异常处理机制,以处理在数据库操作中可能出现的错误和异常情况。
Java中常见错误和异常解决方法(打印)要点
ng.NullPointerException原因是:有空指针,有地址没赋值2.Exception in thread "main" ng.ArithmeticException: / by zero原因是除数是03.ArrayIndexOutOfBoundsException原因是:数组越界ng.NumberFormatException原因是:数字格式化有问题5.Unhandled exception type Exception原因是:没有进行异常处理6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN答:因为在命令提示符中,是没有错误的解决方法是:在myeclipse中,会出现这个错误java国际化之Can't find bundle for base name1.初步学习最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。
原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法!2.中文显示:测试文件java 代码package com.lht.ResourseBundleStudy;import java.util.ResourceBundle;public class ResourseBundleDemo {public static void main(String[] args) {ResourceBundle resource = ResourceBundle.getBundle("test");System.out.print(resource.getString("msg0") + "!");System.out.println(resource.getString("msg1") + "!"); }}test.propertiesmsg0="Hello World"msg1="da jia hao"开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛(/thread.jspa?threadID=660477&messageID=4231534)中找到了线索下面是帖子的内容:I've solved the problem the best way possible. Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference the properties file by "Email".Hope this helps anyone else who is having similiar problems.基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了:加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder 将刚才建立的文件夹加入就可以了!结果如下:"Hello World"!"da jia hao";!2.中文显示在classes目录下建立message_CH.properties内容如下:ms0="大家好"同样用上面的测试文件!结果如下:"?ó????"!乱码怎么回事啊!在百度里搜索后找到了答案有以为网友写的很清楚:/3885062.html 下面引用如下:原理Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。
Java常见编译错误信息及说明
Java常见编译错误信息及说明Java编译错误信息及说明1、java:33: 不是语句解释:程序中出现了没有任何意义的字符(串),可能是无意中打出了没有任何意义的字符;2、java:34: 需要';'解释:某条语句没有以分号结束;3、java:36: 缺少返回语句解释:带返回值的函数缺少return语句;4、java:33: 不兼容的类型解释:运算符两边的数据类型不一致或者不能做隐式转换;5、java:36: 无法访问的语句解释:此语句永远不可能被执行,可能是此语句之前存在类似于while(true)的语句,导致此语句永远不可能被执行;6、java:34: 非法的表达式开始解释:有不符合语法规范的表达式出现;7、java:34: 找不到符号解释:使用了没有定义或没有引入的变量;8、java:33: 非法字符:\\65307解释:在中文输入状态下输入了一些标点符号;9、java:18: 不可转换的类型解释:运算符两边的数据类型不一致或者不能做隐式转换;10、java:19: "else" 不带有"if"解释:编译器找到else语句但是没有找到与之对应的if语句,可能是由于大括号没有成对出现;11、java:12: 可能损失精度解释:把高精确度类型的数据赋值给低精确度类型的变量;12、java:17: 需要')'解释:括号没有成对出现;13、java:8: 可能尚未初始化变量s解释:局部变量s没有赋初值;14、java:7: 不可比较的类型:int 和Boolean解释:运算符两边操作数的数据类型不符合运算符的使用规范;15、java:6: 已在isLeap(int) 中定义year解释:变量year被重复定义;16、java:21: 字符字面值的行结尾不合法解释:程序语句的结尾不是java规定的结束符号,而是其他的符号;17、java:9: 需要<标识符>解释:可能是由于用户指定了数据类型,但未指定该类型的变量名;18、java:8: 无法从静态上下文中引用非静态变量this解释:在静态方法中使用了非静态变量this;19、java:12: 在switch 或loop 外部中断解释:在非循环语句或非switch语句中使用了中断循环功能的语句break;20、java:21: 对于结果类型为void 的方法,无法返回值解释:空返回值方法中出现了return语句;21、java:12: 需要数组,但找到int解释:在应该出现数组的地方没有找到数组类型的变量,而是找到int类型的变量;22、java:13: 无法将Node 中的setData(int) 应用于()解释:一般情况下是方法调用时缺少了参数;23、java:5: 缺少数组维数解释:数组的定义过程中没有指定数组的维数;24、进行语法解析时已到达文件结尾解释:一般情况是缺少{}造成的;25、需要为class、interface 或enum解释:一般情况下是多了{}造成的;26、无法为最终变量length 指定值解释:Length为final类型的变量,值不能修改。
jdbc column index out of range -回复
jdbc column index out of range -回复什么是[jdbc column index out of range]错误?在Java开发中,JDBC(Java数据库连接)是一个标准的Java API,用于与各种关系型数据库进行交互。
JDBC提供了一种方法,使得Java程序可以通过执行SQL语句来与数据库进行通信。
然而,在使用JDBC时,开发人员有时会遇到一些错误。
其中一个常见的错误是[jdbc column index out of range]。
该错误表明代码中引用的列索引超出了所查询结果集的范围。
这意味着,通过ResultSet对象无法获取所请求的列。
该错误通常出现在以下情况下:1. 查询结果集中没有足够的列。
2. 将错误的列索引传递给了ResultSet的getter方法。
3. 在查询结果集中列的次序与代码中访问列的次序不匹配。
出现该错误时,执行相关的JDBC代码会引发异常,告诉开发人员出错的具体位置。
通过检查错误信息,可以找到引发错误的代码行和相关信息。
如何解决[jdbc column index out of range]错误?1. 检查SQL语句和查询结果集:- 确保SQL语句正确,查询包含所需的列。
- 可以在数据库管理工具中直接执行该SQL语句,确保返回了正确的结果。
- 确认查询语句中列的次序与代码中访问列的次序一致。
2. 检查代码中的列索引:- 确保在ResultSet的getter方法中传递正确的列索引。
- 注意,列索引是从1开始计数的,而不是从0开始。
- 在代码中使用硬编码的列索引而不是使用列名是最好避免这种错误的方法。
3. 使用ResultSetMetaData对象获取结果集信息:- 通过ResultSet对象的getMetaData()方法,获取结果集的元数据信息。
- 使用ResultSetMetaData对象的getColumnCount()方法获取结果集中列的数量。
java程序错误类型及异常处理
java程序错误类型及异常处理一、程序的错误类型在程序设计中,无论规模是大是小,错误总是难免的。
程序的设计很少有能够一次完成,没有错误的(不是指HelloWorld这样的程序,而是要实现一定的功能,具备一定实用价值的程序),在编程的过程中由于种种原因,总会出现这样或那样的错误,这些程序的错误就是我们常说的“Bug”,而检测并修正这些错误的方法就是“Debug”(调试)。
基本上所有的集成开发环境都提供了强大的和程序调试功能,在程序进行编译,连接,运行时,会对程序中错误进行诊断。
程序的错误可以抽象分为三类:语法错误、运行错误和逻辑错误。
1、语法错误是指由于编程中输入不符合语法规则而产生的。
程序编译就通不过,程序不能运行起来。
此类错误最简单,调试起来比较容易例如:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。
通常,编译器对程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,又称为编译错误。
语法错误的调试,则可以由集成开发环境提供的调试功能来实现,在程序进行编译时,编译器会对程序中的语法错误进行诊断。
编译诊断的语法错误分为3中:致命错误、错误和警告。
(1)致命错误:这个错误大多是编译程序内部发生的错误,发生这类错误时,编译被迫中止,只能重新启动编译程序,但是这类错误很少发生,为了安全,编译前最好还是先保存程序。
(2)错误:这个错误通常是在编译时,语法不当所引起的。
例如:括号不匹配,变量未声明等。
产生这类错误时,编译程序会出现报错提示,我们根据提示对源程序进行修改即可。
这类错误是出现最多的。
(3)警告:是指被编译程序怀疑有错,但是不确定,有时可强行通过。
例如:没有加void声明的主函数没有返回值,double数据被转换为float类型等。
这些警告中有些会导致错误,有些可以通过。
常规解决方法:此类错误一般程序编译系统会自动提示相应的错误地点和错误原因,比如哪一行代码少了个括号等诸如此类的提示,常见的错误,看懂直接改正即可,如果是看不懂原因,可以将错误提示信息输入搜索引擎查找一下,一般都能找到具体的解决办法。
java sql注入漏洞解决方法
java sql注入漏洞解决方法Java SQL注入漏洞解决方法概述:SQL注入攻击是一种常见的网络安全漏洞,它可以利用应用程序对用户输入的处理不当,将恶意的SQL代码注入到数据库查询语句中,从而导致数据库被非法访问、数据泄露、篡改或删除等问题。
本文将介绍一些常见的Java SQL注入漏洞解决方法,帮助开发者提高应用程序的安全性。
1. 使用预编译语句:预编译语句是一种可以在执行之前预处理SQL语句的机制,它可以将输入参数与SQL语句分离,从而避免了SQL注入攻击。
在Java 中,可以使用PreparedStatement对象来创建预编译语句。
通过使用占位符(?)来代替参数,然后通过setXXX()方法设置参数的值,最后执行SQL语句。
示例代码:```javaString sql = "SELECT * FROM users WHERE username = ? AND password = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1, username);statement.setString(2, password);ResultSet result = statement.executeQuery();```2. 输入验证和过滤:在接收用户输入之前,对输入进行验证和过滤是一种有效的防御措施。
可以使用正则表达式、白名单或黑名单等方式,对输入进行验证和过滤,只允许符合规则的输入通过。
例如,对于用户名和密码,可以限制长度、字符类型等。
示例代码:```javaif (username.matches("^[a-zA-Z0-9]{6,20}$") && password.matches("^[a-zA-Z0-9]{8,16}$")) {// 执行数据库查询操作} else {// 输入不合法,做相应处理}```3. 参数化查询:参数化查询是将用户输入的参数与SQL语句进行分离,从而避免了SQL注入攻击。
java常见调试错误信息
"Test1.java": class Test2 is public; should be declared in a file named Test2.java at line 3, column 1错误解释:"Test1.java": 类Test2是公共类,应该在名为Test2.java的文件中被宣告3行1列处解决方案:1、修改类名或文件名,保证两者一致//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: class Connection in class com.he.Test1 at line 5, column 5错误解释:"Test1.java": 不能识别的标志(类):在类com.he.Test1中的类Connection 5行5列处可能原因:1、没有引包,如java.sql.*2、Connection类名拼写错误//////////////////////////////////////////错误提示:"Test1.java": incompatible types;found : int,required: ng.String at line 6, column 16错误解释:"Test1.java": 数据类型矛盾;发现:int,要求:String 6行16列处可能原因:1、声明类型与赋值类型不一致2、方法声明的返回类型与实际的返回类型不一致3、所调用方法的返回类型与方法调用处的接受变量类型不一致//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: variable a1 in class com.he.Test1 at line 7, column 24错误解释:"Test1.java": 不能识别的标志(变量):在类com.he.Test1中的变量a1 7行24列处可能原因:1、变量未声明2、变量名拼写错误3、在声明的范围之外使用变量,如{}之外//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: method parserInt (ng.String)in class ng.Integer at line 9, column 21错误解释:"Test1.java": 不能识别的标志(方法):在类ng.Integer中的方法parserInt(ng.String) 9行21列处可能原因:1、方法名拼写错误2、方法参数类型不匹配//////////////////////////////////////////错误提示:"Test1.java": '}' expected at line 13, column 2错误解释:"Test1.java": 期望'}' 13行2列处可能原因:1、大括号不匹配//////////////////////////////////////////错误提示:"Test1.java": unreported exception ng.ClassNotFoundException; must be caught or declared to be thrown at line 11, column 11错误解释:"Test1.java": 未报告的异常ng.ClassNotFoundException;必须被捕获或是被声明抛出11行11列处解决方案:1、用try{}catch(){}捕获异常2、在方法声明时用throws ...,... 声明该方法抛出异常特别提示:为便于程序调试时异常定位,强烈建议在进行异常捕获时打印堆栈信息( ex.printStactTrace() )//////////////////////////////////////////错误提示:"Test1.java": non-static variable info cannot be referenced from a static context at line 17, column 24错误解释:"Test1.java": 非静态的变量info不能在静态上下文(环境)中引用17行24列处解决方案:1、声明对象调用其静态变量2、修改方法为非静态方法//////////////////////////////////////////错误提示:"Test1.java": b is already defined in main(ng.String[]) at line 19, column 5错误解释:"Test1.java": (变量)b在(方法)main(ng.String[])中已经被定义*行*列处解决方案:1、修改(变量)名称//////////////////////////////////////////错误提示:"Test1.java": test() is already defined in com.he.Test1 at line 25, column 3错误解释:"Test1.java": (方法)test()在(类)com.he.Test1中已经被定义*行*列处解决方案:1、修改(方法)名称2、修改(方法)参数,即方法重载//////////////////////////////////////////错误提示:"Test.java": Duplicate definition of class com.he.Test1, defined in D:\JavaStudy\TempPro\src\com\he\Test.java and also defined in D:\JavaStudy\TempPro\src\com\he\Test1.java.错误解释:"Test.java":重复定义了类com.he.Test1,在D:\JavaStudy\TempPro\src\com\he\Test.java与D:\JavaStudy\TempPro\src\com\he\Test1.java中都定义了解决方案:1、修改类名特别提示:如果修改后仍然提示该错,可以通过删除对应class文件来解决//////////////////////////////////////////错误提示:"Test1.java": variable d might not have been initialized at line 22, column 22错误解释:"Test1.java":变量d可能还没有被初始化*行*列处可能原因:1、在某种情况下,有可能使用没有被初始化的变量特别提示:[代码]String a;int x=1;if(x>0) a="正数";System.out.println(a);[修改]String a=null;...//////////////////////////////////////////错误提示:"Test1.java": unreachable statement at line 25, column 5错误解释:"Test1.java": 无法到达的语句*行*列处可能原因:1、死循环导致其后的语句没有可能到达2、return 语句导致其后的语句没有可能到达特别提示:[代码]int a=1;if(a>0) {return "正数";}else {return "非正数";}//没有可能到达a=0;//////////////////////////////////////////错误提示:"Test1.java": missing return statement at line 29, column 23错误解释:"Test1.java": (方法)缺失return语句*行*列处解决方案:1、1、确保(方法)在所有可能下都有return语句,如果声明时不是void //////////////////////////////////////////错误提示:"Test1.java": Package D:\JavaStudy\TempPro\src\com\he\Test1.java stated in source com.he1 does not match directoryD:\JavaStudy\TempPro\src\com\he\Test1.java. at line 1, column 13错误解释:"Test1.java": 类的包声明(package ...)与类实际所处包路径不匹配*行*列处解决方案:1、修改包声明,确保与类实际所处包路径一致//////////////////////////////////////////错误提示:"Test1.java": <identifier> expected at line 3, column 14错误解释:"Test1.java": 期望标志符*行*列处可能原因:1、标志符不可法,如类名用数字开头//////////////////////////////////////////错误提示:"Test1.java": call to super must be first statement in constructor at line 6, column 10错误解释:"Test1.java": 在构造函数中调用父类构造函数super(...)必须位于第一句*行*列处解决方案:1、将语句super(...)位于第一句//////////////////////////////////////////错误提示:"Test1.java": 'try' without 'catch' or 'finally' at line 20, column 5错误解释:"Test1.java": 'try'缺失'catch' 或'finally' *行*列处解决方案:1、'try'必须与'catch'和'finally'两者中至少其一进行搭配使用//////////////////////////////////////////错误提示:"Test1.java": illegal character: \65307 at line 4, column 12错误解释:"Test1.java": 非法字符*行*列处可能原因:1、使用了中文的符号,如括号,逗号,分号,冒号等//////////////////////////////////////////错误提示:"Test1.java": reference to Date is ambiguous; both class java.sql.Date in java.sql and class java.util.Date in java.util match at line 6, column 9错误解释:"Test1.java": 对(类)Date的引用不明确;包java.sql中的类java.sql.Date与包java.util中的类java.util.Date都与之相配(即两个包中都有该类) *行*列处解决方案:1、声明或实例化时使用类全名(即包名+类名),如java.util.Date d = new java.util.Date();//////////////////////////////////////////错误提示:"Test1.java": cannot resolve symbol: constructor Integer ()in class ng.Integer at line 6, column 17错误解释:"Test1.java": 不能识别的标志(构造函数):类ng.Integer中的构造函数Integer() *行*列处可能原因:1、调用构造函数时的参数与其原始定义不一致//////////////////////////////////////////.apache.jasper.JasperException: Unable to compile class forJSPAn error occurred at line: -1 in the jsp file: null告诉你的已经很明显了,你不懂英语吗?都是你的jsp文件不存在了,看是不是路径错了Q: 运行javac HelloWorld.java 为何error:cannot read:HelloWorld.java 1 errorA: 首先检查文件名的的拼写,大小写是否正确,再看目录是否正确。
java校验sql语法
java校验sql语法Java校验SQL语法的重要性在开发过程中,SQL语句的正确性对于数据库操作至关重要。
一个错误的SQL语句可能导致严重的数据丢失或安全问题。
因此,我们需要使用Java来校验SQL语法的正确性,以确保数据的完整性和安全性。
我们需要了解SQL语法的基本规则。
SQL语句通常由多个关键字、表名、列名和操作符组成。
Java代码可以通过解析和分析输入的SQL语句,检查其中是否存在语法错误。
例如,我们可以使用Java中的正则表达式来检查SQL语句是否包含无效的关键字。
通过定义一个包含所有合法关键字的列表,我们可以遍历输入的SQL语句,检查每个关键字是否在列表中。
如果找不到匹配的关键字,那么该SQL语句可能存在错误。
我们还可以使用Java中的字符串处理函数来检查SQL语句中的表名和列名是否存在拼写错误。
通过查询数据库的元数据信息,我们可以获取所有有效的表名和列名,然后将其与输入的SQL语句进行比较。
如果找不到匹配的表名或列名,那么该SQL语句可能存在错误。
我们还需要检查SQL语句中的操作符是否使用正确。
例如,比较操作符(如等于、大于、小于等)只能用于比较数值类型的列,而不能用于比较字符串类型的列。
通过分析SQL语句中的操作符和列的数据类型,我们可以判断是否存在不匹配的情况。
除了语法检查,我们还可以使用Java来检查SQL语句是否存在安全隐患。
例如,通过检查SQL语句中是否包含用户输入的数据,我们可以判断是否存在SQL注入的风险。
通过使用参数化查询或预编译语句,我们可以防止恶意用户通过注入恶意代码来攻击数据库。
通过使用Java来校验SQL语法,我们可以确保SQL语句的正确性和安全性。
这不仅可以保护数据库的数据完整性,还可以防止潜在的安全风险。
因此,在开发过程中,务必要重视对SQL语句的校验工作,以提高系统的稳定性和安全性。
计算机软件开发中的错误处理和异常处理方法
计算机软件开发中的错误处理和异常处理方法第一章:引言计算机软件开发是一个复杂而庞大的过程,其中错误和异常是无法避免的。
错误和异常处理是开发人员必须具备的重要技能,它不仅能够提高程序的可靠性和稳定性,还能够增强用户体验和保护系统的安全性。
本文将探讨计算机软件开发中常见的错误处理和异常处理方法。
第二章:错误处理方法2.1 错误类型在错误处理之前,我们首先要了解错误的类型。
一般来说,错误可以分为编译错误和运行错误两种。
编译错误是在代码编译阶段出现的错误,例如语法错误和类型错误,通常会产生编译器报错。
而运行错误是在程序运行阶段出现的错误,例如空指针异常和数组下标越界等,它们需要在程序运行过程中进行检测和处理。
2.2 错误检测在软件开发中,错误检测是非常重要的一步。
开发人员可以通过各种方式来检测错误,例如使用调试工具和代码审查等。
其中,调试工具是一种常用的错误检测方法,它能够帮助开发人员定位错误的位置和原因,并提供相应的解决方案。
2.3 错误处理当错误被检测到后,开发人员需要及时采取相应的错误处理措施。
常用的错误处理方法包括错误提示、日志记录和错误恢复等。
错误提示是指向用户展示错误信息,帮助用户了解错误的原因和解决方法,以提高用户体验。
日志记录是将错误信息记录到日志文件中,方便后续分析和排查。
错误恢复是指在发生错误后,尽可能地恢复程序正常运行,避免因错误产生的连锁反应。
第三章:异常处理方法3.1 异常类型与错误处理相似,异常也有不同的类型。
在Java语言中,异常主要包括检查异常和非检查异常。
检查异常是指需要显式捕获或声明的异常,例如IOException和SQLException等。
而非检查异常是指不需要显式捕获或声明的异常,例如NullPointerException和ArrayIndexOutOfBoundsException等。
3.2 异常捕获异常捕获是一种常用的异常处理方法,它能够在程序出现异常时捕获异常,并执行相应的处理逻辑。
编写SQL语句时常见的10种错误
Java开发者编写SQL语句时常见的10种错误Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平:1.技巧(任何人都可以编写命令行形式的代码)2.教条(有的人使用“模式 - 模式”的方式,即模式无处不在,并以名字作为标识)3.情绪状况(在初期,真正面向对象形式的代码比起命令式代码会更加难懂。
)但是,当Java开发人员编写SQL语句时,一切都变得不同了。
SQL是一种说明式语言,与面向对象思想和命令式思想无关。
在SQL语言中,查询非常容易表达。
但它也不是那么容易以最佳或最正确地方式编写出来。
开发人员不仅需要重新思考自己的编程模式,还需要从集合论的角度进行深入思考。
以下是Java开发人员使JDBC或jOOQ编写SQL语句时,几种常见的错误(排名不分先后)1.忘记了NULL误解NULL的含义可能是Java开发人员编写SQL最常犯的错误。
这有可能是因为NULL也被称为UNKNOWN,但也有其他的原因。
当然如果它只被叫做UNKNOWN,会更容易理解一些。
另一个原因是,JDBC在获取数据,或绑定变量时,SQL中的NULL被映射到Java中的null。
这可能会导致人们认为类似Java中null==null的情况,SQL中也存在NULL= NULL。
一个更离奇的误解NULL的例子是,当NULL谓词用于行值表达式时。
另一个微妙的问题产生与对NOTIn 反连接中NULL含义的误解。
解决办法不断的训练自己。
要时刻明确NULL的含义,每次你写SQL时,都要考虑:∙对于NULL来说谓词是否正确?∙NULL是否影响该函数的结果?2.在Java内存中处理数据一些Java开发者十分了解SQL特性。
偶尔JOIN,零散的UNION,没什么问题。
但如果遇到视窗功能,结果集分组等情况又怎么样呢?很多Java开发人员会把SQL数据加载到内存,把数据转换成一些适合的集合类型,以十分冗长的循环结构在集合上执行恼人数学运算(至少在Java 8改进容器之前是这样的)。
常见的MyEclipse错误
一、Exception in thread "main" java.sql.SQLException: ORA-01017: invalid username/password; logon denied>>这个错误的意思就是:数据库的用户名或者密码错误检查你的数据库用户名和密码二、Exception in thread "main" ng.ClassNotFoundException: oracle.jdbc.driver.OracleDrive>>这个错误表示:没有导入数据库驱动包,检查是否导入了驱动包在工程名上右键---->选最后一项------332三、java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection>>这个错误表示:你的数据库服务没有打开.四、Exception in thread "main" java.sql.SQLException: ORA-00904: "STU": 标识符无效>>>标示符无效---这个错误的意思是:java程序中的sql语句出错了五、The method Sel(int) is undefined for the type HumanDao>>>表示这个方法没有定义,如果你确定你写了这个方法但是就是说没有定义原因是:重新部署项目。
六、ng.ClassNotFoundException: oracle.jdbc.driver.OracleDriver原因:没有导入驱动包------导入驱动包:重新部署项目七java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=16 原因一:数据库的服务没有打开-----打开数据库的服务原因二:jdbc:oracle.....有错误八、.BindException: Address already in use: JVM_Bind14:02 2013/5/13这个错误的意思就是:你已经开启了tomcat 但是不是由myeclipse启动方法一:进入机房的tomcat安装目录:bin----右键点击tomcat6w.exe点击stop按钮。
各种常见java.sql.SQLException归纳
最近使用Oracle时老是遇到java.sql.SQLException错误,害得我在网上查得累死累活的,所以一口气查了一下几个常见的,在此列了列.英文是来自官方的,用中文简单翻译了一下,有一些实在不知道怎么翻译,也没有尝试重现,所以将英文原文一并列出,供有需要的人查阅!ORA-01861: 文字与格式字符串不匹配-ORA-00904: invalid column name 无效列名ORA-00942: table or view does not exist 表或者视图不存在ORA-01400: cannot insert NULL into () 不能将空值插入ORA-00936:缺少表达式ORA-00933:SQL 命令未正确结束ORA-01722:无效数字:(一般可能是企图将字符串类型的值填入数字型而造成)ORA-06530: ACCESS_INTO_NULLYour program attempts to assign values to the attributes of an uninitialized (atomically null) object.企图将值写入未初化对象的属性ORA-06592: CASE_NOT_FOUNDNone of the choices in the WHEN clauses of a CASE statement is selected, and there is no ELSE clause.case语句格式有误,没有分支语句ORA-06531: COLLECTION_IS_NULLYour program attempts to apply collection methods other than EXISTS to an uninitialized (atomically null)nested table or varray, or the program attempts to assign values to the elements of an uninitialized nestedtable or varray.企图将集合填入未初始化的嵌套表中ORA-06511: CURSOR_ALREADY_OPENYour program attempts to open an already open cursor. A cursor must be closed before it can be reopened. Acursor FOR loop automatically opens the cursor to which it refers. So, your program cannot open that cursorinside the loop.企图打开已经打开的指针.指针已经打开,要再次打开必须先关闭.ORA-00001: DUP_V AL_ON_INDEXYour program attempts to store duplicate values in a database column that is constrained by a unique index.数据库字段存储重复,主键唯一值冲突ORA-01001: INV ALID_CURSOR无效指针Your program attempts an illegal cursor operation such as closing an unopened cursor.非法指针操作,例如关闭未打开的指针ORA-01722: INV ALID_NUMBER无效数字In a SQL statement, the conversion of a character string into a number fails because the string does notrepresent a valid number. (In procedural statements, V ALUE_ERROR is raised.) This exception is also raisedwhen the LIMIT-clause expression in a bulk FETCH statement does not evaluate to a positive number.在sql语句中,字符数字类型转换错误,无法将字符串转化成有效数字.此错误也可能因为在limit从句表达式中fetch语句无法对应指定数字ORA-01017: LOGIN_DENIED拒绝访问Your program attempts to log on to Oracle with an invalid username and/or password.企图用无效的用户名或密码登录oracleORA-01403: NO_DATA_FOUND 无数据发现A SELECT INTO statement returns no rows, or your program references a deleted element in a nested table oran uninitialized element in an index-by table. SQL aggregate functions such as A VG and SUM always return avalue or a null. So, a SELECT INTO statement that calls an aggregate function never raises NO_DA TA_FOUND.The FETCH statement is expected to return no rows eventually, so when that happens, no exception is raised.ORA-01012: NOT_LOGGED_ON 未登录Your program issues a database call without being connected to Oracle.程序发送数据库命令,但未与oracle建立连接ORA-06501: PROGRAM_ERROR 程序错误PL/SQL has an internal problem.pl/sql系统问题ORA-06504: ROWTYPE_MISMATCH 行类型不匹配The host cursor variable and PL/SQL cursor variable involved in an assignment have incompatible return types.For example, when an open host cursor variable is passed to a stored subprogram, the return types of theactual and formal parameters must be compatible.ORA-30625: SELF_IS_NULLYour program attempts to call a MEMBER method on a null instance. That is, the built-in parameter SELF(which is always the first parameter passed to a MEMBER method) is null.ORA-06500: STORAGE_ERROR 存储错误PL/SQL runs out of memory or memory has been corrupted.PL/SQL运行内存溢出或内存冲突ORA-06533: SUBSCRIPT_BEYOND_COUNT 子句超出数量Your program references a nested table or varray element using an index number larger than the number ofelements in the collection.ORA-06532: SUBSCRIPT_OUTSIDE_LIMIT 子句非法数量Your program references a nested table or varray element using an index number (-1 for example) that isoutside the legal range.ORA-01410: SYS_INV ALID_ROWID 无效的字段名The conversion of a character string into a universal rowid fails because the character string does notrepresent a valid rowid.ORA-00051: TIMEOUT_ON_RESOURCE 资源等待超时A time-out occurs while Oracle is waiting for a resource.ORA-01422: TOO_MANY_ROWS 返回超过一行A SELECT INTO statement returns more than one row.ORA-06502: VALUE_ERROR 值错误An arithmetic, conversion, truncation, or size-constraint error occurs. For example, when your program selectsa column value into a character variable, if the value is longer than the declared length of the variable,PL/SQL aborts the assignment and raises V ALUE_ERROR. In procedural statements, VALUE_ERROR is raised if theconversion of a character string into a number fails. (In SQL statements, INV ALID_NUMBER is raised.)ORA-01476: ZERO_DIVIDE 除0错误Your program attempts to divide a number by zero。
Java开发常见问题及解决方法有哪些
Java开发常见问题及解决方法有哪些在 Java 开发的过程中,开发者们常常会遇到各种各样的问题。
这些问题可能会影响开发进度,甚至导致项目出现严重的错误。
本文将探讨一些常见的 Java 开发问题,并提供相应的解决方法。
一、内存泄漏问题内存泄漏是 Java 开发中常见的问题之一。
当程序不再使用某些对象,但这些对象仍被引用而无法被垃圾回收器回收时,就会发生内存泄漏。
随着时间的推移,内存泄漏可能会导致程序占用大量内存,最终导致系统性能下降甚至崩溃。
解决内存泄漏问题的方法通常包括:1、及时释放不再使用的对象引用,例如将对象设置为`null` 。
2、避免在长生命周期的对象中引用短生命周期的对象。
3、使用合适的数据结构和算法,以减少不必要的对象创建和引用。
二、并发编程中的同步问题在多线程环境下,并发编程中的同步问题容易导致数据不一致和竞态条件。
例如,多个线程同时访问和修改共享数据时,如果没有正确的同步机制,可能会得到错误的结果。
解决同步问题的常见方法有:1、使用`synchronized` 关键字来同步代码块或方法,确保同一时刻只有一个线程能够访问共享资源。
2、使用`Lock` 接口提供的更灵活的锁机制。
3、采用线程安全的数据结构,如`ConcurrentHashMap` 、`ConcurrentLinkedQueue` 等。
三、空指针异常空指针异常是 Java 开发中最常见的运行时异常之一。
当程序尝试访问一个`null` 引用的对象成员或方法时,就会抛出空指针异常。
避免空指针异常的方法包括:1、在使用对象之前,始终进行非空检查。
2、初始化对象时,确保给予有效的初始值,而不是依赖默认的`null` 值。
四、异常处理不当不正确的异常处理可能会导致程序隐藏重要的错误信息,或者在异常发生时无法进行有效的恢复操作。
正确处理异常的要点:1、不要捕获过于宽泛的异常类型,应尽量捕获具体的异常类型。
2、在捕获异常后,应根据具体情况进行适当的处理,如记录错误日志、回滚事务或向用户提供有意义的错误提示。
常见的SQL错误和解决方法
常见的SQL错误和解决⽅法前⾔ 今天你会看到每个⼈——从新⼿到专家——在使⽤SQL时犯的各种常见错误。
你不能永远避免犯任何错误,但是熟悉⼴泛的错误将帮助你在尽可能短的时间内解决这些错误。
注:在我们的例⼦中我们使⽤的是Oracle7个⼈版。
你特定的执⾏可能和这个错误类型相似,但是错误号和名称可能不同。
我们使⽤SQL*PLUS来运⾏我们的SQL语句,并设置ECHO 和FEEDBACK为开的状态来查看声明。
记住,⼀些错误会产⽣错误信息,⽽另⼀些可能只是在逻辑上不充分,它们将不可避免的在接下来引起重⼤的错误。
如果你严格关注细节,你可以避免⼤多数错误,尽管你还总是会偶尔发现错误。
常见错误 本节描述了许多你在执⾏所有类型的SQL语句时会得到的常见错误。
⼤多数都很简单,简单到使你想踢⾃⼰⼀脚,⽽其它的看起来很明显的错误则是由于理解错误⽽产⽣的。
表或视图不存在 当你收到⼀个错误声明你要访问的表不存在时,这是很容易查证的;例如: 输⼊: SQL> @tables.sql 输出:SQL> spool tables.lstSQL> set echo onSQL> set feedback onSQL> set pagesize 1000SQL> select owner|| '.' || table_name2 from sys.dba_table3 where owner = 'SYSTEM'4 order by table_name5 /from sys.dba_table*ERROR at line 2:ORA-00942: table or view does not existSQL> spool offSQL> 分析: 注意在table 单词下⾯的星号。
正确的表名是sys.dba_tables 。
⽽之前的表名⾥缺少了s。
Java编程中常见的错误有哪些
Java编程中常见的错误有哪些?sql错误找不到列Unknown column …fillMen‟ in …field list‟2.列名在sql语句中写了2次Column …fillMan‟ specified twice3.下面2条数据库插入对应的列都是int类型的所插入的数据类型不符合要求时报错Data truncated for column …gatheringMoney‟ at row 1Data truncation: Out of range value adjusted for column …amount‟ at row 14.Mixing of GROUP columns (MIN(),MAX(),COUNT(),…) with no GROUP columns is illegal if there is no GROUP BY clause5.修改一个表时无法取得同一个表的数据ERROR 1093 (HY000): You can‟t specify target table …context‟ for update in FROMclause6.主键未自动增长ERROR 1062 :7.int 类型字符过长com.mysql.jdbc.exceptions.MySQLDataException: ‟2.5026744582E10′in column ‟1′is outside valid range for the datatype INTEGER.8.没找到错误没影响数据读取java.sql.SQLException: Operation not allowed after ResultSet closed9.类型错误最常见的是数字类型错误Data truncated for column …gatheringMoney‟ at row 110.换另一个项目时数据库连接池没换(未解)Name java: is not bound in this Context换了之后似乎还是不行=====java:/comp/env/jdbc/ConnSqlSer前面多了一个‟/‟应为java:comp/env/jdbc/ConnSqlSer=======11.\(未解)java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in12.executeQuery()方法改成execute()(未解)Can not issue data manipulation statements with executeQuery().Can not issue data manipulation statements with executeQuery().struts错误Failed to obtain specified collection 下拉框没值警告: No FormBeanConfig found under …yuanLiaoRuKuForm‟配置文件Form出错Cannot find bean: “org.apache.struts.taglib.html.BEAN” in any scope< html:text >标签外面没有嵌套<html:form >标签No getter method for property: “outDate”of bean: “com.System.storage.form.YuanliaoPandianForm”在form里面没有定义此字段的get方法Cannot get a connection, pool error Timeout waiting for idle object 数据库错误Operation not allowed after ResultSet closed 可能是结果集关闭了//在Action里面调用的DAO类没有进行重新实例化2008-5-12 20:02:09 org.apache.struts.action.RequestProcessor processException警告: Unhandled Exception thrown: class ng.NullPointerException2008-5-12 20:02:09 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet action threw exceptionng.NullPointerExceptionat com.System.storage.action.FinishedAction.finishedCheckAdd(FinishedAction.java:151)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)//在C标签里从一个对象里取值时,所请求的是对象里没有的属性An error occurred while evaluating custom action attribute “value”with value “${rows.storageAmount}”: Unable to find a value for “storageAmount”in object of class “com.System.storage.domain.Finished” using operator “.” (null)forward 转向连接到了一个还没开始写的action里面而那个action所对应的jsp页面还没改Resources cannot be null.找不到下面这个actionCannot retrieve mapping for action /finished/finishedChuKuSearchCannot retrieve mapping for action /purveyAdd 如果把jsp页面的action写错了就这样报/jspfinance/client/ShouKuanJiLu_Sel.jsp(172,0) The end tag “</html:form” is unbalanced类型转换错误一般是参数类型写错在公共方法或者配置文件里面找com.System.finance.client.form.GatheringForm cannot be cast to com.System.finance.client.form.InvoiceFormstruts标签里面写进了html标签内的属性/jspclient/KeHuDangAn_Ins.jsp(44,88) equal symbol expected/jspfinance/client/TuiHuanHuo_Ins.jsp(70,42) quote symbol expected/jspstorage/material/YuanLiaoChuKu_Ins.jsp(84,31) equal symbol expectedorg.apache.jasper.JasperException: /scDept/dingDanXinZeng.jsp(333,167) equal symbol expected jsp页面上action写错了Cannot retrieve mapping for action /finished/finishedCheckAdd配置文件出错The content of element type “action-mappings” must match “(action)*”.java常见错误以及可能原因集锦2008-07-08 15:550、需要标识符a) 不在函数内1、非法表达式开始b) 可能:丢失括号 .2. no data founda) 可能:setInt(1,100)中,没有100这个值3. 找不到符号a) 可能:没导入包4. 指定了无效URLa) 可能:数据库名或IP错误,即连接出错5. 类路径没有找到a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriverb) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来6. 空指针异常a) 可能: 数据源错误比如数据库名或IP错误7. 不能执行查询a) 可能: 数据库中表的问题,比如列名不存在8. invalid identitya) 可能: 列名出错9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突10. 表名或列名不存在a) 可能:表不存在或者没有插入数据到表中11. 不支持的类,类的版本错误a) 可能:没有导入jdk5.0,或者编译器仍为1.412. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not founda) Maybe1: hibernate.cfg.xml not in the root directoryb) Maybe2: Could not parse configuration .c) resolve: database not connect or use another database14. ConstraintViolationExceptiona) Maybe: used a not true database15. 驱动没有找到或者JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常,ng.NullPointerExceptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。