一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - jdbc實(shí)現(xiàn)連接和增刪改查功能

jdbc實(shí)現(xiàn)連接和增刪改查功能

2021-07-16 16:05lxh5431 Java教程

這篇文章主要為大家詳細(xì)介紹了jdbc實(shí)現(xiàn)連接和基本的增刪改查功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

jdbc的定義

jdbc(java data base connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行sql語句的java api,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用java語言編寫的類和接口組成。jdbc提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。

jdbc的基本連接

簡單的說就是加載驅(qū)動,建立連接,然后進(jìn)行查詢和刪除等語句的操作,在java中提供了java.sql的jar包,不過我現(xiàn)在用的是mysql的連接和實(shí)例,在這里基本在本地的服務(wù)器都是用到下面這個語句。

?
1
2
3
4
5
class.forname("com.mysql.jdbc.driver");
 
  string url="jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user="root";
  string password="root";

加載和建立連接,這就是基本的一個語法結(jié)構(gòu),在連接數(shù)據(jù)庫當(dāng)然還有其他的屬性可以設(shè)置,比如說最大的連接數(shù)了,和如何建立連接池,都可以在配置中用到,這里我就簡單的介紹如何連接,后面跟的是這個連接的字符集,防止出現(xiàn)亂碼。

簡單的增刪改查

簡單的增刪改查是每個開發(fā)者都會遇到的,畢竟我們整個系統(tǒng)真正的業(yè)務(wù)所在也是這幾個簡單的邏輯,但是在關(guān)系的連接和耦合性下就會變成復(fù)雜百倍的系統(tǒng),所以要懂得基本的就可以窺見更大系統(tǒng)的構(gòu)建了,所以我現(xiàn)在要分析的只是基本的功能實(shí)現(xiàn)。

首先連接好數(shù)據(jù)庫之后,那就是創(chuàng)建查詢語句,這里用到的是statment這個關(guān)鍵詞,下面是代碼的基本實(shí)現(xiàn)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package dbtest;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;
import java.util.list;
 
 
public class dbtest {
 
 public static void main(string[] args) {
  employee employee1 =new employee();
  employee1.setempno(555);
  employee1.setename("hakly");
  employee1.setsal(5400);
  employee1.sethiredate(new date());
 
  addemployee(employee1);
  list<employee>employees=getemployees();
  for(employee employee:employees){
   system.out.println(employee);
 
  }
 
  employee employee =new employee();
  employee.setempno(999);
  employee.setename("jack");
  employee.setsal(5000);
  employee.sethiredate(new date());
 
  addemployee(employee);
 
 }
 
  public static list<employee> getemployees() {
  resultset rs=null;
  connection conn=null;
  statement stat=null;
  list<employee> employees=new arraylist<employee>();
  try{
   class.forname("com.mysql.jdbc.driver");
 
 
  string url="jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user="root";
  string password="root";
  conn= drivermanager.getconnection(url,user,password);
  stat=conn.createstatement();
  string sql="select * from emp";
   rs=stat.executequery(sql);
   employee employee=null;
  while(rs.next()){
   employee=new employee();
   employee.setempno(rs.getint("empno"));
   employee.setename(rs.getstring("ename"));
   employee.setsal(rs.getdouble("sal"));
  employee.sethiredate(rs.getdate("hiredate"));
  employees.add(employee);
  }
 
 
  }catch(exception e ){
   e.printstacktrace();
  }finally{
   try {
    if(conn!=null){
    conn.close();
   }
    }catch (sqlexception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   }
  }
  return employees;
 }
  public static void addemployee(employee employee) {
   connection conn = null;
   statement stat = null;
   // 1.注冊驅(qū)動程序
   try {
    class.forname("com.mysql.jdbc.driver");
 
    // 2.建立連接
    string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
    string user = "root";
    string password = "root";
    conn = drivermanager.getconnection(url, user, password);
 
    // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
    stat = conn.createstatement();
    simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
    string sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getempno() + ",'"
      + employee.getename() + "'," + employee.getsal() + ",'" + sdf.format(employee.gethiredate()) + "')";
 
    // 4.處理執(zhí)行結(jié)果
    int i = stat.executeupdate(sql);
   } catch (exception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   } finally {
    // 5.關(guān)閉資源
    try {
     if (conn != null) {
      conn.close();
     }
    } catch (sqlexception e) {
     // todo auto-generated catch block
     e.printstacktrace();
    }
   }
  }
  public static void updateemployee(employee employee) {
   connection conn = null;
   statement stat = null;
   // 1.注冊驅(qū)動程序
   try {
    class.forname("com.mysql.jdbc.driver");
 
    // 2.建立連接
    string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
    string user = "root";
    string password = "root";
    conn = drivermanager.getconnection(url, user, password);
 
    // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
    stat = conn.createstatement();
    simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
    string sql = "update emp set ename='"+employee.getename()+"empno"+employee.getempno()+"sal"+employee.getsal();
    // 4.處理執(zhí)行結(jié)果
    int i = stat.executeupdate(sql);
   } catch (exception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   } finally {
    // 5.關(guān)閉資源
    try {
     if (conn != null) {
      conn.close();
     }
    } catch (sqlexception e) {
     // todo auto-generated catch block
     e.printstacktrace();
    }
   }
  }
 
}

這里的代碼很繁瑣,但是沒辦法,為了更清新一點(diǎn)的去了解,這個過程是必須的,然后接下來就是進(jìn)行簡單的優(yōu)化,雖然代碼還是差不多,但是感覺上會更加簡潔了 ,這里就要建立一個工具類了代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package dbtest;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.sqlexception;
 
public class jdbcutil {
 static string url = "jdbc:mysql://localhost:3306/xxx?useunicode=true&characterencoding=utf-8";
 static string user = "root";
 static string password = "root";
 
 static{
  try {
   class.forname("com.mysql.jdbc.driver");
  } catch (classnotfoundexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
 }
 public static connection getconnection() throws sqlexception{
  string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user = "root";
  string password = "root";
  return drivermanager.getconnection(url, user, password);
 
 }
 public static void free(connection conn){
 
  try {
   if (conn != null) {
    conn.close();
   }
  } catch (sqlexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
 }
 }

在這里,把數(shù)據(jù)庫連接和異常處理,等工作都及合成一個工具類,然后再主函數(shù)調(diào)用就可以了,這就是面向?qū)ο蟮囊粋€體現(xiàn),當(dāng)然還是會分析下關(guān)于主類的代碼,要不然就太過于空洞了,下面要分析的主類代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.niit.jdbc;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;
import java.util.list;
 
public class employeedao1 {
 
 public static void main(string[] args) throws parseexception {
 
  list<employee> employees=getemployees();
  for(employee employee:employees){
   system.out.println(employee);
  }
 
  /*employee employee = new employee();
  employee.setempno(9999);
  employee.setename("tom");
  employee.setsal(6000);
 
  simpledateformat sdf=new simpledateformat("yyyy-mm-dd");
  employee.sethiredate(sdf.parse("2015-07-23"));
 
  //addemployee(employee);
  //updateemployee(employee);
  deleteemployee(9999);*/
 
 
 
 }
 
 public static list<employee> getemployees() {
  connection conn = null;
  statement stat = null;
  resultset rs = null;
  list<employee> employees = new arraylist<employee>();
  // 1.注冊驅(qū)動程序
  try {
   //2.獲取連接
   conn=jdbcutil.getconnection();
 
   // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
   stat = conn.createstatement();
   string sql = "select * from emp";
 
   // 4.處理執(zhí)行結(jié)果
   rs = stat.executequery(sql);
   employee employee = null;
   while (rs.next()) {
    employee = new employee();
    employee.setempno(rs.getint("empno"));
    employee.setename(rs.getstring("ename"));
    employee.setsal(rs.getdouble("sal"));
    employee.sethiredate(rs.getdate("hiredate"));
 
    employees.add(employee);
   }
 
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.關(guān)閉資源
   jdbcutil.free(conn);
  }
  return employees;
 }
 
 public static void addemployee(employee employee) {
  connection conn = null;
  statement stat = null;
  // 1.注冊驅(qū)動程序
  try {
   //2.獲取連接
   conn=jdbcutil.getconnection();
 
   // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
   stat = conn.createstatement();
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getempno() + ",'"
     + employee.getename() + "'," + employee.getsal() + ",'" + sdf.format(employee.gethiredate()) + "')";
 
   // 4.處理執(zhí)行結(jié)果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.關(guān)閉資源
   jdbcutil.free(conn);
  }
 }
 
 public static void updateemployee(employee employee) {
  connection conn = null;
  statement stat = null;
  // 1.注冊驅(qū)動程序
  try {
   //2.獲取連接
   conn=jdbcutil.getconnection();
 
   // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
   stat = conn.createstatement();
 
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "update emp set ename='" + employee.getename() + "',sal=" + employee.getsal() + ",hiredate='"
     + sdf.format(employee.gethiredate()) + "' where empno=" + employee.getempno();
 
   // 4.處理執(zhí)行結(jié)果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.關(guān)閉資源
   jdbcutil.free(conn);
  }
 }
 
 public static void deleteemployee(int empno) {
  connection conn = null;
  statement stat = null;
  // 1.注冊驅(qū)動程序
  try {
   //2.獲取連接
   conn=jdbcutil.getconnection();
 
   // 3.創(chuàng)建執(zhí)行語句,發(fā)送sql命令
   stat = conn.createstatement();
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "delete from emp where empno="+empno;
 
   // 4.處理執(zhí)行結(jié)果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.關(guān)閉資源
   jdbcutil.free(conn);
  }
 }
 
}

這樣看上去就比較清晰和明了,不用分割開來去看代碼,只要調(diào)用到那個累才去照這個類的方法,這樣就能夠更加有利于檢查和排錯,維護(hù)的間接性的一個軟件的奮斗的目標(biāo),雖然只是簡單的優(yōu)化,卻能夠減輕了我們寫代碼和維護(hù)的成本。

總結(jié)

通過本次編碼,對面向?qū)ο蟮木幊痰拈_發(fā)有更加清晰的了解,當(dāng)然對重構(gòu)和優(yōu)化的重要性有更深的了解,在這個軟件里我學(xué)會的不僅是代碼的書寫,還學(xué)會了代碼的重構(gòu)不僅需要不斷的提煉,還需要對代碼的細(xì)微的觀察。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/lxh5431/article/details/52443417

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人青草视频 | 日本xxxx18vr69 | 大又大又粗又爽女人毛片 | 人皮高跟鞋在线观看 | chinese男男gayxxx| 日韩高清一区 | 成年人视频免费在线观看 | 天堂中文在线观看 | 国产免费专区 | 欧美亚洲国产精品久久久 | 亚洲天堂2013 | 欧美特级特黄a大片免费 | 亚洲国产99 | 91一个人的在线观看www | 羞羞影院午夜男女爽爽影院网站 | 操老逼| 紧身裙女教师miad711在线 | 黑人性xxxⅹxxbbbbb| 明星ai智能人脸替换造梦在线播放 | 国产成人yy精品1024在线 | 99国产精品免费视频 | 亚洲高清在线天堂精品 | 男男gaygays18中国 | 日本在线视频播放 | 手机看片国产自拍 | 日本68xxxxxxxxx24 日本 片 成人 在线 | 色综色天天综合网 | 天堂在线观看中文字幕 | 吃胸膜奶视频456 | 二区免费视频 | 欧美添下面视频免费观看 | 舔穴吸奶 | 精品亚洲永久免费精品 | 美女扒开尿口让男生添 漫画 | 99视频有精品视频免费观看 | 99久久精品免费看国产一区 | 456亚洲老头视频 | 精品亚洲国产一区二区 | 91在线精品国产丝袜超清 | 亚洲高清无码在线 视频 | 亚洲社区在线观看 |