idea上執行JDBC程式碼介紹及其配置(mysql版)
跟著慕課網上學著打了一段java的JDBC的程式碼,然後一執行就gg,然後查原因查了幾個小時終於得出瞭解決方案
首先檢查一下是不是缺少mysql connecter,這個百度一下,來到mysql官網,選擇JDBC Driver for MySQL (Connector/J),隨便選一個,下好解壓,提取出裡面jar檔案放進一個放進tomcat的lib目錄下(記住位置),我解壓出來的叫mysql-connector-java-5.1.45-bin
然後來到你寫好java程式碼的頁面,左上角點開有個project structure,點開,選擇modules,選擇dependencies下module source,點選最右邊的小綠色加號,選擇你剛剛解壓出來的jar檔案,這樣jar包就匯入到project裡面了,程式碼應該能執行無誤了,當然要驗證是否連線上了資料庫你先用dos或者navicat在資料庫裡寫張資料表
附上我執行成功的程式碼:
import java.sql.*; import java.util.*; public class mys { private static final String url="jdbc:mysql://localhost:3306/test";//test為我的資料庫的名字 private static final String user="root";//使用者名稱 private static final String password="root";//密碼 public static void main(String []args) throws Exception//記住要寫丟擲異常,否則就要用try catch語句 { Class.forName("com.mysql.jdbc.Driver");//載入驅動 Connection con=DriverManager.getConnection(url,user,password);//連線資料庫 Statement stm=con.createStatement(); ResultSet re=stm.executeQuery("select * from inf");//執行詢問語句,re中儲存結果的集合 while(re.next())//遍歷結果 { System.out.println(re.getString("name")+","+re.getInt("age")+","+re.getInt("tel"));//當然你的資料表要有這幾個屬性 } } }
然後介紹一些常用的jdbc連線sql語句:
Class.forName("com.mysql.jdbc.Driver");這句話的意思是載入mysql的驅動程式,不同的資料庫這句話不同
Connection con=DriverManager.getConnection(url,user,password)這句話是獲得連線資料庫後返回的物件
url裡面放的是jdbc:mysql://localhost:3306/+你要操作的資料庫名字,user和password顯而易見是你登入資料庫的賬號密碼
createStatement():返回向資料庫傳送sql的statement物件,該物件用於接收對資料庫加入增刪查改的操作語句。
prepareStatement(sql) :建立向資料庫傳送預編譯sql的PrepareSatement物件,該物件只是預編譯生成,用萬用字元?代替不確定的欄位,後面再用一系列的set函式將?替換掉,在呼叫execute函式之前是不會生成Satement物件的
重點介紹statement介面(常用):
Statement:由createStatement建立,用於傳送簡單的SQL語句(不帶引數)。
PreparedStatement :繼承自Statement介面,由preparedStatement建立,用於傳送含有一個或多個引數的SQL語句。PreparedStatement物件比Statement物件的效率更高
並且可以防止SQL注入,所以我們一般都使用PreparedStatement。
常用statement方法:
execute(String sql):執行語句,返回是否有結果集
executeQuery(String sql):執行select語句,返回ResultSet結果集。
executeUpdate(String sql):執行insert/update/delete操作,返回更新的行數。
addBatch(String sql) :把多條sql語句放到一個批處理中。
executeBatch():向資料庫傳送一批sql語句執行。
然後是接收上面方法返回的ResultSet介面:
getString(int index)、getString(String columnName):獲得在資料庫裡是varchar、char等型別的資料物件。
getFloat(int index)、getFloat(String columnName):獲得在資料庫裡是Float型別的資料物件。
getDate(int index)、getDate(String columnName):獲得在資料庫裡是Date型別的資料。
getBoolean(int index)、getBoolean(String columnName):獲得在資料庫裡是Boolean型別的資料。
getObject(int index)、getObject(String columnName):獲取在資料庫裡任意型別的資料。
ResultSet還提供了對結果集進行滾動的方法:
next():移動到下一行
Previous():移動到前一行
absolute(int row):移動到指定行
beforeFirst():移動resultSet的最前面。
afterLast() :移動到resultSet的最後面。
然後介紹一些sql語句的知識:
迷糊查詢:%可以代替0個或多個字元
比如:select * from students where name like '王%' 這個句子可以把表students裡面name符合的王或者王xx(任意數目)的記錄返回,如果是%王%就是查詢包含王的所有記錄
隨機查詢:用Math.random()函式返回一個0-1之間的小數,那麼直接對該數*listsize再用int取整可以獲得集合範圍的一個數字,配合absolute函式可以查詢隨機數字的記錄
預處理語句:上面已經敘述,舉個例子
sql=con.prepareStatement("select * from tb1 where id <?");後面呼叫setInt(1,5);這樣就相當於把第1個問號值修改為了5,然後再呼叫executeUpdate或者executeQuery之類的函式將該命令完成並執行,多個問號也是一樣的,第一個引數index是第index個問號的意思,然後根據對應問號應該填的值選擇set函式,第二個引數為?修改成的值