閱讀35 返回首頁    go 阿裏雲 go 技術社區[雲棲]


eclipse,myeclipse中java連接數據庫的問題

首先,如果沒有msbase.jar,mssqlserver,msutil.jar這三個包連接sql需要的包,編寫好代碼運行會出現異常:

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver(也有可能是因為SQL1433端口沒開)

解決辦法:在工程目錄右擊屬性->構建路徑->選擇庫標簽,添加外部jars包,把三個jar包導入即可。放到lib下 Eclipse會自動幫你 build path 放其他地方的話 就需要你手動build path

(如果是myeclipse中的servlet,jsp的。加載路徑就好:


)

接下來開始編寫代碼:


   String sql = "use spdb select * from users";
    //指定好驅動
   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();


    // 連接字符串,格式:( "jdbc:公司名稱:數據庫驅動名稱://數據庫服務器ip:端口號;DatabaseName=數據庫名稱","數據庫賬號","密碼")

   Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName = spdb", "sa","sa"); 


   Statement  stmt = conn.createStatement();


     //返回記錄
   ResultSet  rs   = stmt.executeQuery(sql);


   while(rs.next()){   
   String s = rs.getString(2);
   System.out.println(s);


這時有可能出現問題:

問題1:異常[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]用戶 'sa' 登錄失敗

解決辦法:

第一步:在打開SQL的服務器(用本地登陸SQL後,對象資源管理器裏的綠色圖標),屬性裏麵->安全性,設置為windows和sql混合身份驗證模式。

第二步:回到對象資源管理器,展開安全性選項,右擊sa屬性,在狀態裏麵改為啟用。(如果不用sa,也可以重新創建一個賬戶)

這兩步都好了,必須要在配置管理中關掉SQL的服務,重啟。否則任然出現登陸失敗。



問題2:異常[Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.

解決辦法:如果原本數據庫中就沒有值,那麼會出現該警告。但是我的數據庫中有值。百度後得到的結果是:問題很簡單,默認打開時的遊標不是在第一行上(而是在第一行之前),所以你根本不能取數據,當然需要使用rs.next()來移動遊標才行. 

解決之後還是會出現該警告,後來發現是要在查詢語句中加入use spdb,即sql = "use spdb select 

* from users"












以下為一些小問題:

關鍵字 'from' 附近有語法錯誤:

在調用這個pr=ct.prepareStatement("select top "+pageSize+" * from users");的時候,top後麵空格,*號前麵空格要加



這裏有個statement和prestatement的差別
第一:


prepareStatement會先初始化SQL,先把這個SQL提交到數據庫中進行預處理,多次使用可提高效率。  
createStatement不會初始化,沒有預處理,沒次都是從0開始執行SQL


第二:


prepareStatement可以替換變量  
在SQL語句中可以包含?,可以用ps=conn.prepareStatement("select * from Cust where ID=?");  
int sid=1001;  
ps.setInt(1, sid);  
rs = ps.executeQuery();  
可以把?替換成變量。  
而Statement隻能用  
int sid=1001;  
Statement stmt = conn.createStatement();  
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);  
來實現。


第三:


prepareStatement會先初始化SQL,先把這個SQL提交到數據庫中進行預處理,多次使用可提高效率。  
createStatement不會初始化,沒有預處理,沒次都是從0開始執行SQL



 今天出現編碼出現了No suitable driver found for jdbc,又是找遍了網上的資料,基本上都說是三個問題:
    一是:連接URL格式出現了問題(Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/XX","root","XXXX")
    二是:驅動字符串出錯(com.mysql.jdbc.Driver)
    三是Classpath中沒有加入合適的mysql_jdbc驅動
    經過我的仔細檢查,這三種錯誤我都沒有犯,為什麼呢?
    嚐試著將mysql-connector-java-3.1.14-bin.jar的jar包加入C:\Program Files\Java\jre1.6.0_02\lib\ext文件夾下,問題解決了!!
    原來是不僅僅要求將驅動加入classpath中,而且需要將該jar包加入到java運行環境的外部jar包中,唉,下次這種低級錯誤還是少犯為妙

最後更新:2017-04-02 22:16:35

  上一篇:go Tomcat修改密碼問題
  下一篇:go (android實戰)ListView樣式實現總結