1. 程式人生 > >jdbc連線資料庫基本步驟以及錯誤總結

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();
				}
			}
		}
	}
}


常見錯誤總結:
  1.  如果沒有導包或者包名寫錯,報錯: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    

  2. url地址寫錯,報錯:java.sql.SQLException: 指定了無效的 Oracle URL
  3. 連線的資料庫名不存在,報錯:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

  4. 連線的資料庫服務未啟動,報錯:java.sql.SQLException: The Network Adapter could not establish the connection
  5. 賬號或密碼錯誤,報錯:java.sql.SQLException: ORA-01017: invalid username/password; logon denied

  6. 如果sql語句關鍵字寫錯,報錯:java.sql.SQLSyntaxErrorException: ORA-00900: 無效 SQL 語句
  7. 如果操作的表名寫錯,報錯:java.sql.SQLSyntaxErrorException: ORA-00942: 表或檢視不存在

  8. 如果佔位符?的個數與給定的引數個數不匹配,報錯:java.sql.SQLException: 索引中丟失  IN 或 OUT 引數:: 1

  9. 多給了值,報錯:java.sql.SQLException: 無效的列索引

  10. 如果給定的值和要求的值型別不一致,報錯:java.sql.SQLSyntaxErrorException: ORA-01722: 無效數字

  11. 如果是根據列名取值,當取不到對應的資料時,最大的可能就是列名寫錯