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

xiaoxiao2021-02-28  64

连接数据库的基本步骤: 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: 无效数字 如果是根据列名取值,当取不到对应的数据时,最大的可能就是列名写错
转载请注明原文地址: https://www.6miu.com/read-47670.html

最新回复(0)