日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql了解jdbc_JDBC的连接mySql的基本知识

發布時間:2024/10/12 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql了解jdbc_JDBC的连接mySql的基本知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這只是我自己的隨筆博客~,用于偶爾回憶知識,可能存在一些錯誤,如有錯誤,歡迎指正~

首先對于JDBC連接MySQL,要了解基本的框架結構

畫的比較爛,大約就是這樣的結構

然后看一下具體實現的 代碼:;

public class DBUtil {

private String user = "root";

private String password = "root";

private String url = "jdbc:mysql://localhost:3306/mydb6";

private static DBUtil dbUtil;

Connection connection = null;

// 單例:構造方法私有化

private DBUtil() {

}

public synchronized static DBUtil getInstance() {

if (dbUtil == null) {

dbUtil = new DBUtil();

}

return dbUtil;

}

/**

* 創建數據庫連接

*/

public Connection getConnection() {

if (connection == null) {

try {

// 注冊驅動

Class.forName("com.mysql.jdbc.Driver");

// 獲取連接

connection = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return connection;

}

}

上面這個是通過單例模式? 建立了DBUtil這樣一個類。通過這個類可以干什么呢?可以實現----數據庫的連接!

沒錯,Connection接口的作用就是連接數據庫-

與特定數據庫的連接(會話)。在連接上下文中執行 SQL 語句并返回結果。

怎樣才能得到這個連接呢?--想要建立這個連接,你需要注冊一個驅動---嗯~就是這個代碼? ?Class.forName("com.mysql.jdbc.Driver");

它是通過反射的機制來獲得的,不了解反射?嗯~那你記住就完了 哈哈哈

connection = DriverManager.getConnection(url, user, password);這一句話的是用來獲取連接的 ,這三個參數分別是? ?數據的地址,jdbc:mysql://IP地址:端口號/數據庫的名稱

嗯~然年再將一下如何通過jdbc向數據庫寫入數據

public intinsertStuByStatement() {

String sql1= "insert into stu(sname,sage) values('aaa',1)";

String sql2= "insert into stu(sname,sage) values('bbb',1)";

String sql3= "insert into stu(sname,sage) values('ccc',1)";

Connection connection= getConnection();//獲得數據庫的連接

Statement stmt = null;try{

stmt=(Statement) connection.createStatement();

connection.setAutoCommit(false);

stmt.addBatch(sql1);//批量添加sql語句

stmt.addBatch(sql2);//批量添加sql語句

stmt.addBatch(sql3);//批量添加sql語句//一次性執行

stmt.executeBatch();

connection.commit();

System.out.println("批處理成功");

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (stmt != null) {

stmt.close();

}

}catch(Exception e2) {

}

}returni;

}

這里使用的statement 來實現的,寫出你要操作的 sql語句。(提一下,一般這些操作都是放在DBUtil類中的額 ,這個方法我也是放在DBUtil的)。

第二步:根據上面的定義的方法獲取數據庫。

下面就是獲取一個Statement 對象,然后通過這個對象的stmt.executeBatch();就可以在數據庫中執行剛才就的語句了,這樣就做到了靜態插入數據。

那動態插入數據是怎樣的呢 ?-----那就是用到了另一個能夠實現語句的對象PreparedStatement

直接上代碼吧

public int insertStu(String sname,intsage){

String sql= "insert into stu(sname,sage) values(?,?)";

Connection connection= getConnection();//獲得數據庫的連接

PreparedStatement ps = null;int i = 0;try{

ps=(PreparedStatement) connection.prepareStatement(sql);

ps.setString(1, sname);

ps.setInt(2, sage);

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (ps!=null) {

ps.close();

}

}catch(Exception e2) {

}

}returni;

}

定義的插入方法有了兩個參數的數值

與statement的區別在哪呢?--一個是sql字符串語句的區別,多了“?”,作用是---看下面這兩行代碼

ps.setString(1, sname);

ps.setInt(2, sage);

ps.set****(a,b)有兩個參數,sql語句中也有兩個?,所以參數a,代表的是sql語句的第幾個“?”,如果參數是1,則說明sql語句中第一個“?”的位置替換為參數b,

如果 同理如果參數是2,則說明sql語句中第一個“?”的位置替換為參數b.這樣就做到了動態的插入數據,我們只要在調用插入方法的時候傳入想要插入的數據就好了,不用每次都寫新的sql語句。

對于 i=ps.executeUpdate();語句,它返回的這次你的數據庫操作后有有幾條數據有影響.這種方法對于插入,當然是i=1了但是對于產出和修改的就不是一定了,刪除修改我直接貼代碼了就不再做講解

//修改

public int updateStu(intsage,String sname){

String sql= "updae stu set sage = ? where sname = ?";

Connection connection=getConnection();

PreparedStatement ps=null;int i = 0;try{

ps=(PreparedStatement) connection.prepareStatement(sql);

ps.setInt(1, sage);

ps.setString(2, sname);

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if (ps!=null) {

ps.close();

}

}catch(Exception e2) {

}

}returni;

}//刪除

public int deleteStu(String sname,intsage) {

String sql= "delete from stu where sname=? and sage = ?";

Connection conn= getConnection();//獲得數據庫連接

PreparedStatement ps = null;int i = 0;try{

ps=(PreparedStatement) conn.prepareStatement(sql);

ps.setString(1, sname);

ps.setInt(2,sage );

i=ps.executeUpdate();

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if(ps != null)

ps.close();

}catch(Exception e) {//TODO: handle exception

}

}returni;

}

數據庫最重要的是什么---查詢數據,相對于增刪改--查可能稍微繁瑣一點

代碼如下:

/*** 查詢所有學生

*@return

*/

public ArrayListqueryStu(){

String sql= "select * from stu ";//select * 或的字段的順序和數據庫中的是一致

Connection conn =getConnection();

PreparedStatement ps= null;

ResultSet rs= null;

ArrayList stus = new ArrayList();//此集合用于存儲每一個學生對象

try{

ps=(PreparedStatement) conn.prepareStatement(sql);

rs=ps.executeQuery();//遍歷rs

while(rs.next()) {//true表示有下一條數據

int id = rs.getInt("id");

String sname= rs.getString("sname");int sage = rs.getInt("sage");//創建stu對象

Stu stu = newStu(id, sname, sage);//收集對象

stus.add(stu);

}

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{try{if(rs != null)

rs.close();if(ps != null)

ps.close();

}catch(Exception e) {//TODO: handle exception

}

}returnstus;

}

講一下重點的地方? ??ResultSet rs=null;? 這個對象存儲的一個查詢的結果集合。select * from stu這個返回的 應該是查詢的學生表中每個學生的所有數據,

所以rs就可以儲存這樣的一個集合,然后通過遍歷得到其中的數據,將數據賦值給一個學生對對象,將對象加入到集合中,就得到可表中所有的數據~

這次講的主要是基礎部分,等下次繼續探討JDBC聯合其他的一些操作~

Class.forName("com.mysql.jdbc.Driver");

總結

以上是生活随笔為你收集整理的mysql了解jdbc_JDBC的连接mySql的基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。