jdbc连接数据库基本步骤以及错误总结


连接数据库的基本步骤:
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 {
			/*
			 * 加载驱动
			 */
			//注册驱动Driver
			Class.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: 无效数字

      
      
      
      
      
      
    • 如果是根据列名取值,当取不到对应的数据时,最大的可能就是列名写错

      
      
             
             
        
        
        
        
               
               
          
          
          
          
          
          
                 
                 
            
            
            
            
            
            
        • 3
          点赞
        • 8
          收藏
          觉得还不错? 一键收藏
        • 0
          评论
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值