java通過JDBC獲取MySQL的資料實現
阿新 • • 發佈:2019-01-27
由慕課網聽之,後簡單的捋了一下,記下來,備後用
要從eclipse中的java程式碼獲取到MySQL資料庫中的資訊,Java提供了JDBC作為橋樑來實現
首先需要在我們的專案中匯入JDBC相關的包
下載:mysql-connector-java-5.0.8-bin.jar檔案
需要將其匯入,可以直接右鍵專案進行匯入,但是當移動專案到其它地方時,該檔案不會隨之移動;另外一種方法是在專案下面新建lib檔案(new—> floder),再將檔案拖到lib裡面,選copy,然後右鍵檔案,Build Path 進行匯入
其次是Java程式碼
如下(我都做了詳細的註釋)
public class DBUtil { /* * URL中的127.0.0.1為本機地址,回送地址,因為MySQL服務是在本機上,java程式也在本機上, * imooc為MySQL中一個數據庫,指定後,後面便是對其中的表進行操作 * USER是MySQL使用者的使用者名稱,PASSWORD為密碼 */ private static final String URL="jdbc:mysql://127.0.0.1:3306/imooc"; private static final String USER="root"; private static final String PASSWORD="23232"; public static void main(String[] args) throws Exception { //1.載入驅動程式 /* * 在com.mysql.jdbc.Driver中有一個靜態的方法,new一個Driver,並將其載入到DriverManager中,程式碼如下 * static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException(“Can’t register driver!”); } } * Class.forName()方法初始化指定的類(會執行其中的static...),並返回該類的物件 */ Class.forName("com.mysql.jdbc.Driver"); /*2.獲得資料庫的連線 * 在這其中的將URL,USER,PASSWORD傳入DriverManager中的Driver物件(在JDBC中), * 通過JDBC返回一個連線給java的sql */ Connection con=DriverManager.getConnection(URL, USER, PASSWORD); //3.通過資料庫的連線操作資料庫,實現增刪改查 Statement statement=con.createStatement(); //查詢資料,其中輸入sql語句 ResultSet rSet=statement.executeQuery("SELECT name,age FROM tabletest"); //rSet.next()返回的是一個布林型別的值,而且將指標指向下一條記錄 while(rSet.next()){ /* * 將獲得的資料輸入到控制檯上,注意得到的方法,因為之前查詢時獲得的是兩個值,一個string,一個int, * 使用其中的引數為string的方法,將值得名稱傳進去 */ System.out.println(rSet.getString("name")+","+rSet.getInt("age")); } } }
這樣便實現了簡單的連線,獲取資料庫的資訊;
下面再附上操作資料庫的程式碼
import java.sql.Connection; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.test.Godess.Godes; import com.test.jdbcconnect.DBUtil; public class GoddessMod { public void addGoddess(Godes g) throws Exception { // 每次對資料庫操作的時候都要建立連線 Connection connection = DBUtil.getConnect(); // 下面的3塊是一個完整體系 // (1) sql語句字串,並沒有實際的賦值,這樣可以抽象化 // 這裡並沒有給id賦值,因為在表中id為主鍵,且設為自動遞增 String sql = "" + "INSERT INTO tabletest" + "(name,age,birthday) VALUES(" + "?,?,?)"; // (2)預處理,類似於sql中的儲存過程 PreparedStatement pres = connection.prepareStatement(sql); // (3)賦值 pres.setString(1, g.getName()); pres.setInt(2, g.getAge()); pres.setDate(3, new Date(g.getBirthday().getTime())); // 執行,增,刪,改 ,用下面的語句,查用executeQuery(); pres.execute(); } public void updateGoddess(Godes goddess) throws Exception { Connection connection = DBUtil.getConnect(); String sql = "UPDATE tabletest SET name=?,age=?,birthday=? WHERE id=?"; PreparedStatement prem = connection.prepareStatement(sql); prem.setString(1, goddess.getName()); prem.setInt(2, goddess.getAge()); prem.setDate(3, new Date(goddess.getBirthday().getTime())); prem.setInt(4, 1); prem.execute(); } public void delGoddess(Integer id) throws SQLException { Connection connection = DBUtil.getConnect(); String sql = "DELETE FROM tabletest WHERE id=?"; PreparedStatement prem = connection.prepareStatement(sql); prem.setInt(1, id); prem.execute(); } public List<Godes> query() throws Exception { Connection connection = DBUtil.getConnect(); // 3.通過資料庫的連線操作資料庫,實現增刪改查 Statement statement = connection.createStatement(); // 查詢資料,其中輸入sql語句 ResultSet rSet = statement.executeQuery("SELECT name,age FROM tabletest"); List<Godes> goddessList = new ArrayList<Godes>(); Godes goddess; // rSet.next()返回的是一個布林型別的值,而且將指標指向下一條記錄 while (rSet.next()) { /* * 將獲得的資料輸入到控制檯上,注意得到的方法,因為之前查詢時獲得的是兩個值,一個string,一個int, * 使用其中的引數為string的方法,將值得名稱傳進去 */ // System.out.println(rSet.getString("name")+","+rSet.getInt("age")); goddess = new Godes(); goddess.setName(rSet.getString("name")); goddess.setAge(rSet.getInt("age")); goddessList.add(goddess); } return goddessList; } public List<Godes> queryForContdition(List<Map<String, Object>> perm) throws Exception { Connection connection = DBUtil.getConnect(); // 使用stringBuilder不同於字串(每次修改都會建立開銷),對於多次修改的,用StringBuilder好 StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM tabletest WHERE 1=1 "); // sql.append(" AND "+"name"+"="+"'Tony'"); for (Map<String, Object> map : perm) { sql.append(" AND " + map.get("attr") + " " + map.get("relation") + " " + map.get("value")); } // 注意與上面查詢的寫法 // 由於沒有?,可以省略第三步 PreparedStatement statement = connection.prepareStatement(sql.toString()); // 這個為查詢,因此不同於其它三種 ResultSet rSet = statement.executeQuery(); Godes goddess; List<Godes> goddessList = new ArrayList<Godes>(); while (rSet.next()) { goddess = new Godes(); goddess.setId(rSet.getInt("id")); goddess.setName(rSet.getString("name")); goddess.setAge(rSet.getInt("age")); goddess.setBirthday(rSet.getDate("birthday")); goddessList.add(goddess); } return goddessList; } }
參考