jdbc连接数据库基本步骤以及错误总结
来源:互联网 发布:流程优化的原则 编辑:程序博客网 时间:2024/05/21 17:55
连接数据库的基本步骤:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Scanner;/** * PreparedStatement预编译的 SQL 语句的对象 * 执行带参数的sql语句 * 防止sql注入攻击 * @author fiona * */public class TestJDBC1 {public static void main(String[] args) {Connection conn=null;//定义连接ResultSet rs=null;PreparedStatement pstmt=null;String url = "jdbc:oracle:thin:@localhost:1521:oracleylp";String userName = "scott";String password ="960715";try {/* * 加载驱动 *///注册驱动DriverClass.forName("oracle.jdbc.driver.OracleDriver");/* * 建立连接 *//* * url:要连接的数据库地址 jdbc:oracle:thin:@<localhost(127.0.0.1)(本机IP地址)>:<数据库服务器的端口号>:<数据库sid> * username:账号 * password:密码 */conn=DriverManager.getConnection(url, userName, password);/* * 创建执行语句块 *///预编译sql语句pstmt=conn.prepareStatement("select * from dept1 where deptno=?");//?为占位符,表示参数/* * 给预编译语句中的占位符赋值 */System.out.println("请输入要查询的部门编号:");Scanner sc=new Scanner(System.in);String no=sc.nextLine(); pstmt.setString(1, no);//给预编译sql语句中的第一个?赋值 //执行sql语句 /* * 处理结果 */rs=pstmt.executeQuery();while (rs.next()) {System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));}} catch (ClassNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}finally {//要按先 ResultSet 结果集,后 Statement,最后 Connection 的顺序关闭资源if (rs!=null) {try {rs.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}if (pstmt!=null) {try {pstmt.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}if (conn!=null) {try {conn.close();} catch (SQLException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}}}
常见错误总结:
如果没有导包或者包名写错,报错: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
url地址写错,报错:java.sql.SQLException: 指定了无效的 Oracle URL
连接的数据库名不存在,报错:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
连接的数据库服务未启动,报错:java.sql.SQLException: The Network Adapter could not establish the connection
账号或密码错误,报错:java.sql.SQLException: ORA-01017: invalid username/password; logon denied
如果sql语句关键字写错,报错:java.sql.SQLSyntaxErrorException: ORA-00900: 无效 SQL 语句
如果操作的表名写错,报错:java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在
如果占位符?的个数与给定的参数个数不匹配,报错:java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
多给了值,报错:java.sql.SQLException: 无效的列索引
如果给定的值和要求的值类型不一致,报错:java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
如果是根据列名取值,当取不到对应的数据时,最大的可能就是列名写错
1 0