小菜一碟
1.鏈接mysql數據庫
package com.cnn;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* 鏈接數據庫
*
* */
public class Connect {
public static void main(String[] args) throws Exception {
//1.加載Driver驅動進入jvm
Class.forName("com.mysql.jdbc.Driver");
//數據庫鏈接地址 格式jdbc:mysql:數據庫url/數據庫名
String url = "jdbc:mysql://localhost:3306/jdbc_learn";
String user = "root";
String pwd = "123456";
Connection cnn=null;
Statement st=null;
try {
//2.獲取連接對象
cnn = (Connection) DriverManager.getConnection (url, user, pwd);
//3.創建sql語句
//創建一個數據表
String sql="create table student(id int,name varchar(50),age int)";
//創建一個“連接管道”
st =cnn.createStatement ();
//4.執行sql語句
st.executeUpdate (sql);
} catch (SQLException e) {
e.printStackTrace ();
} finally {
//5.釋放資源
try {
st.close();
} catch (SQLException e) {
e.printStackTrace ();
}
try {
cnn.close();
} catch (Exception e) {
e.printStackTrace ();
}
}
}
}
2.插入操作 插入修改等操作 在執行的時候用executeUpdate
package com.cnn;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 插入數據
*
* */
public class Insert {
public static void main(String[] args) throws Exception {
//1.加載Driver驅動進入jvm
Class.forName ("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jdbc_learn";
String user = "root";
String pwd = "123456";
Connection cnn = null;
Statement st= null;
try {
//2.獲取連接對象
cnn = (Connection) DriverManager.getConnection (url, user, pwd);
//3。創建sql語句
String sql="insert into student values (1,'zc',20)";
//4.創建連接管道
st = cnn.createStatement ();
//5.執行sql語句
//返回一個行數。插入成功一行 就返回1
int row= st.executeUpdate (sql);
System.out.println (row);
} catch (SQLException e) {
e.printStackTrace ();
} finally {
if(st!=null)
try {
//釋放資源 先關閉這個msqql 到msql.exe的這個通道
st.close();
} catch (SQLException e) {
e.printStackTrace ();
}
if(cnn!=null)
try {
//關閉java到mysql的通道
cnn.close();
} catch (SQLException e) {
e.printStackTrace ();
}
}
}
}
3.查詢數據 查詢語句執行的時候用executeQuery
package com.cnn;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 查詢獲得多條數據
* */
public class DQLDatasClass {
public static void main(String[] args) throws Exception {
//1.將Driver驅動加載進jvm
Class.forName ("com.mysql.jdbc.Driver");
//數據庫鏈接地址 格式 jdbc:mysql:數據庫網址/數據庫名
String url="jdbc:mysql://localhost:3306/jdbc_learn";
String user="root";
String pwd="123456";
Connection cnn=null;
Statement st = null;
try {
//2.創建鏈接對象
cnn= (Connection) DriverManager.getConnection (url,user,pwd);
//3。創建sql語句
String sql="select * from student";
//創建鏈接管道
st=cnn.createStatement ();
//4.執行sql語句
ResultSet res=st.executeQuery (sql);
//如果只想要查詢返回 滿足一條的數據,那麼去掉while 變爲if就可以
while(res.next ()){
int id=res.getInt ("id");
String name=res.getString ("name");
int age=res.getInt ("age");
System.out.println (" id= "+id+" name= "+name+" age= "+age);
}
} catch (SQLException e) {
e.printStackTrace ();
} finally {
if(st!=null){
try {
//5。釋放資源 釋放管道
st.close();
} catch (SQLException e) {
e.printStackTrace ();
}
}
if(cnn!=null){
try {
//5.釋放資源 釋放連接器
cnn.close();
} catch (Exception e) {
e.printStackTrace ();
}
}
}
}
}
主菜
jdbc數據庫開發例子:
一些概念與規範:
概念:
1.DAO思想 (DATA Access Object)數據存取對象 裏面封裝了一些操作數據庫的方法。比如插入數據,獲得查詢數據,修改數據等方法
2.對象ORM對象關係映射
面向對象概念 | 面向關係概念 |
---|---|
類 | 表 |
對象 | 一條記錄 |
屬性 | 字段 |
3.domain 類
作用:用戶於數據庫的中轉站
裏面放着一些數據的set和get方法
規範:總的來說要見名知意
1.包的命名規範
域名倒寫.模塊名稱.組件名稱
damain包 com.zc.jdbc.domain
dao接口包 com.zc.jdbc.dao
實現包:com.zc.jdbc.impl
測試包 com.zc.jdbc.test
2.類命名規範
以一個學生表爲例子
domain類 那麼取名Student
dao接口類 StudentDao
dao接口實現類 StudentDaoImpl
測試方法 StudentTest
4.jdbc 數據庫開發正確操作步驟:
- 數據庫中創建表
- 建立domain包domian類
- 建立Dao包和dao接口類
- 建立dao.impl包和dao接口實現類
- 創建測試類
- 實現類中編寫dao接口中聲明的方法
- 每次實現一個dao接口方法,就測試一次
jdbc整個代碼流程
- 加載驅動Driver進入jvm
- 創建連接對象
- 創建sql語句
- 執行sql語句
- 釋放資源 先釋放ResultSet結果資源 Statement資源 最後釋放Connection連接資源
java通過 jdbc連接mysql示意圖
[外鏈圖片轉存失敗(img-XcdkAhLj-1562594842681)(C:\Users\MI\Pictures\java\jdbc.png)]
實際演練
分爲幾個模塊 Dao接口模塊 dao Dao接口實現模塊impl 工具類模塊jdbcutil domain模塊 Test模塊。
因爲你每對一次數據庫進行操作 就會重複很多代碼,連接msql,登陸用戶密碼,釋放資源等都是重複的,因此將它們封裝成工具類,減小代碼耦合性,增加彈性。
注意:由於每對數據庫操作一次都重複了 驅動器加載的步驟 Class.forName(“com.jdbc.mysql.Driver”);因此將它放入了static靜態模塊裏,就可以只加載一次。
工程結構圖
代碼:
dao接口代碼
package databasedao.jdbc.dao;
import com.dao.Student;
import java.sql.SQLException;
import java.util.List;
/**
* Stduent 表的Dao操作接口
*
* */
public interface iStudentDao {
//1.保存數據
void save(Student stu) throws Exception;
//2.獲取指定學生
Student get(int id);
//3.刪除學生
void delete(int id);
List<Student> getAll() ;
//5.修改指定學生信息
void upDate(int id,Student stu);
}
domain模塊代碼
package databasedao.jdbc.domain;
public class Student {
private String name;
private Integer id;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
實現類impl模塊代碼
package databasedao.jdbc.impl;
import com.dao.Student;
import databasedao.jdbc.dao.iStudentDao;
import databasedao.jdbc.jdbcutil.JdbcUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class StudentDaoImpls implements iStudentDao {
Connection cnn = null;
Statement st = null;
ResultSet res = null;
@Override
public void save(Student stu) {
try {
//返回連接對象
JdbcUtil.getConnection ();
st = cnn.createStatement ();
Integer id = stu.getId ();
String name = stu.getName ();
Integer age = stu.getAge ();
String sql = "insert into student(id,name,age)values (" + id + ",'" + name + "'," + age + ")";
System.out.println (sql);
//4.執行sql語句
//insert插入操作用executeUpdate執行 獲得REsultSet對象
int res = st.executeUpdate (sql);
} catch (SQLException e) {
e.printStackTrace ();
} catch (Exception e) {
e.printStackTrace ();
} finally {
JdbcUtil.close (res, st, cnn);
}
}
@Override
public Student get ( int id){
try {
cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
//3。創建sql語句
//創建連接管道
st = cnn.createStatement ();
String sql = "select * from student where id =" + id + "";
System.out.println (sql);
//4.執行sql語句
//查詢操作用executeQuery執行 獲得REsultSet對象
res = st.executeQuery (sql);
while (res.next ()) {
Student stu = new Student ();
stu.setAge (res.getInt ("id"));
stu.setName (res.getString ("name"));
stu.setAge (res.getInt ("age"));
return stu;
}
} catch (Exception e) {
e.printStackTrace ();
} finally {
JdbcUtil.close (res,st,cnn);
}
return null;
}
@Override
public void delete(int id) {
try {
cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
//3。創建sql語句
//創建連接管道
st = cnn.createStatement ();
String sql = "delete from student where id=" + id + "";
System.out.println (sql);
//4.執行sql語句
//insert插入操作用executeUpdate執行 獲得ResultSet對象
int res = st.executeUpdate (sql);
} catch (SQLException e) {
e.printStackTrace ();
} catch (Exception e) {
e.printStackTrace ();
} finally {
JdbcUtil.close (res, st, cnn);
}
}
@Override
public List<Student>getAll(){
try {
//1,加載驅動
Class.forName (JdbcUtil.driverName);
cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
//3。創建sql語句
//創建連接管道
st = cnn.createStatement ();
String sql = "select * from student";
System.out.println (sql);
//4.執行sql語句
//查詢操作用executeQuery執行 獲得ResultSet對象
ResultSet res = st.executeQuery (sql);
Student s = new Student ();
List<Student> stu = new ArrayList<> ();
while (res.next ()) {
s.setId (res.getInt ("id"));
s.setName (res.getString ("name"));
s.setAge (res.getInt ("age"));
stu.add (s);
} return stu;
} catch (Exception e) {
e.printStackTrace ();
} finally {
JdbcUtil.close (res,st,cnn);
}
return null;
}
@Override
public void upDate ( int id, Student stu) {
try {
cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
//3.建sql語句
//創建連接管道
st = cnn.createStatement ();
String sql = "update student set name='" + stu.getName () + "',age=" + stu.getAge () + " where id=" + id + "";
System.out.println (sql);
//4.執行sql語句
//insert插入操作用executeUpdate執行 獲得REsultSet對象
int res = st.executeUpdate (sql);
} catch (Exception e) {
e.printStackTrace ();
} finally {
JdbcUtil.close (res, st, cnn);
}
}
}
工具類jdbcutil模塊
知識點 static關鍵字使用
package databasedao.jdbc.jdbcutil;
import com.cnn.Connect;
import java.sql.*;
import java.util.Collection;
public class JdbcUtil {
public static String url = "jdbc:mysql://localhost:3306/jdbc_learn";
public static String user = "root";
public static String pwd = "123456";
public static String driverName = "com.mysql.jdbc.Driver";
static{
//1,加載驅動
try {
Class.forName (JdbcUtil.driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace ();
}
}
//獲取連接對象
public static Connection getConnection() {
Connection cnn=null;
try {
cnn = DriverManager.getConnection (JdbcUtil.url, JdbcUtil.user, JdbcUtil.pwd);
} catch (Exception e) {
e.printStackTrace ();
}
return cnn;
}
/***
* 釋放資源
* 1.結果資源 2.Statement通道資源 3.Connection java與mysql數據庫之間得連接資源
*/
public static void close(ResultSet res, Statement st,Connection cnn){
if (res!= null) {
try {
res.close ();
} catch (SQLException e) {
e.printStackTrace ();
} finally {
if (st != null)
try {
st.close ();
} catch (SQLException e) {
e.printStackTrace ();
}if(cnn!=null){
try {
cnn.close();
} catch (SQLException e) {
e.printStackTrace ();
}
}
}
}
}
}
測試模塊
@Test 註解實現單元測試
package databasedao.jdbc.test;
import databasedao.jdbc.dao.iStudentDao;
import com.dao.Student;
import databasedao.jdbc.impl.StudentDaoImpls;
import org.junit.jupiter.api.Test;
import java.util.List;
public class StudentTest {
public static void main(String[] args) throws Exception {
Student stu=new Student ();
stu.setId (1);
stu.setName ("zc");
stu.setAge (20);
iStudentDao stuDao=new StudentDaoImpls ();
stuDao.save (stu);
}
//單元測試
@Test
public void save() throws Exception {
Student stu=new Student ();
stu.setId (1);
stu.setName ("zc");
stu.setAge (20);
iStudentDao stuDao=new StudentDaoImpls ();
stuDao.save (stu);
}
@Test
public void upDate() throws Exception {
Student stu=new Student();
stu.setName ("dasdsadasdasdsadsa");
stu.setAge (200);
iStudentDao dao=new StudentDaoImpls ();
dao.upDate (2,stu);
}
@Test
public void delete(){
iStudentDao dao=new StudentDaoImpls ();
dao.delete (1);
}
@Test
public void get(){
iStudentDao dao=new StudentDaoImpls ();
System.out.println (dao.get (2).toString ());
}
@Test
public void getAll() throws Exception {
iStudentDao dao=new StudentDaoImpls ();
List list=dao.getAll ();
for(int i=0;i<list.size ();i++){
Object obj=list.get (i);
System.out.println (obj);
}
}
}
注意: 拼接方法
當不是字符串時: “+ 拼接值+”
是字符串的時候 ‘ “ + 拼接值+” ’