jdbc連線資料庫基本步驟以及錯誤總結
阿新 • • 發佈:2019-02-02
連線資料庫的基本步驟:
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: 無效數字
如果是根據列名取值,當取不到對應的資料時,最大的可能就是列名寫錯