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的基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse工具连接mysql_ecl
- 下一篇: tomcat mysql 启动顺序_li