JAVA之JDBC的簡單使用(Mysql)
阿新 • • 發佈:2017-05-31
nag cep 發現 jdb box 分享 .get 不知道 今天
JDBC增刪查改
昨天七七八八的關於Mysql的配置 和 基本使用也算是初步解決了,今天 抽空看了JAVA的JDBC(JAVA DATA BASE CONNECTION)我也不知道我全稱拼寫對對不對??,筆者英文水平太渣渣。
具體的關於解釋jdbc的東東在本文就不闡述了,網上百度一大堆,本文主要記錄 實現過程 中的關鍵點和小坑。
首先 就要把這個問題的解決方法給拋出來
PreparedStatement 的占位符使用 :
PreparedStatement是Statement的改良版,具有預編譯功能,方便使用,運行速度快。
可以通過?占位符把字段值替換,之後通過setXXX方法,註入字段值。
但是?占位符只能替換字段值,不能替換表名、字段名或者其他關鍵詞。
!!!!!!!!!這是個坑啊?? ,筆者以為占位符是 沒有限制的 使用 ,比如在查詢語句中使用 "select * from student where ?=?" 這裏筆者想著 pstatement.setString(1,"id");pstatement.setString(2,3);就可以實現id=3的查詢過濾,然後就沒有然後了,困擾了老紙半個多小時。。。。。。 下面,記錄實現過程,還是直接貼代碼記錄:
Jdbc_manage 負責 驅動的加載 數據庫的連接
1 import java.sql.*;2 3 import com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException; 4 5 public class Jdbc_manage { 6 7 private static Connection connection = null; 8 9 public static final String Driver = "com.mysql.jdbc.Driver"; 10 public static final String URL = "jdbc:mysql://47.93.250.19:3306/121sushe";11 public static final String USER = "root"; 12 public static final String PASSWORD = "zy1314521.."; 13 14 // 方便其他類獲取一個 connection 實例的引用 15 public static Connection get_connection(){ 16 17 try { 18 //使用反射機制 加載驅動 19 Class.forName(Driver); 20 21 try { 22 // 這裏不知道為什麽需要一個強制的類型轉換 23 connection = (Connection)DriverManager.getConnection(URL,USER,PASSWORD); 24 System.out.println("Mysql連接成功!"); 25 26 // 這裏的測試 證明 連接正常 獲取數據正常 27 // try { 28 // Statement statement = connection.createStatement(); 29 // ResultSet resultSet = statement.executeQuery("select * from chengyuan"); 30 // resultSet.next(); 31 // System.out.println("->" + resultSet.getString("name")); 32 // } catch (Exception e) { 33 // // TODO: handle exception 34 // System.out.println("初始查詢失敗"); 35 // } 36 37 } catch (MySQLSyntaxErrorException e) { 38 // TODO: handle exception 39 System.out.println("Mysql連接失敗"); 40 e.printStackTrace(); 41 } 42 43 } catch (Exception e) { 44 // TODO: handle exception 45 System.out.println("驅動加載失敗"); 46 } 47 return connection; 48 49 } 50 51 public static void close_connection(){ 52 53 try { 54 55 if(connection != null && !connection.isClosed()){ 56 connection.close(); 57 } 58 59 } catch (Exception e) { 60 // TODO: handle exception 61 System.out.println("關閉connection異常"); 62 } 63 64 } 65 66 67 }
然後是 Use_mysql類的 ,這個類負責 增刪查改 和 顯示表中數據
1 import java.sql.Connection; 2 import java.sql.PreparedStatement; 3 import java.sql.ResultSet; 4 5 public class Use_mysql { 6 7 //接收三個參數 分別對應表中的id name age 8 public boolean insert(int id,String name,int age){ 9 boolean flag=false; 10 Connection connection = null; 11 PreparedStatement pStatement = null; 12 13 try { 14 15 String sql = "insert into chengyuan value(?,?,?)"; 16 connection = Jdbc_manage.get_connection(); 17 pStatement = connection.prepareStatement(sql); 18 pStatement.setInt(1, id); 19 pStatement.setString(2, name); 20 pStatement.setInt(3,age); 21 int i = 0; 22 i = pStatement.executeUpdate(); // 執行該條更新 23 if(i!=0){ 24 flag = true; 25 } 26 27 try { 28 pStatement.close(); 29 connection.close(); 30 31 } catch (Exception e) { 32 // TODO: handle exception 33 System.out.println("關閉失敗"); 34 } 35 36 } catch (Exception e) { 37 // TODO: handle exception 38 System.out.println("添加行 異常"); 39 e.printStackTrace(); 40 } 41 return flag; 42 } 43 44 //接收1個 id 參數 45 public boolean delete(int id){ 46 boolean flag=false; 47 Connection connection = null; 48 PreparedStatement pStatement = null; 49 50 try { 51 String sql = "delete from chengyuan where id=?"; 52 connection = Jdbc_manage.get_connection(); 53 pStatement = connection.prepareStatement(sql); 54 pStatement.setInt(1, id); //刪除第 id 行 55 int i = 0; 56 i = pStatement.executeUpdate(); 57 if(i!=0){ 58 flag = true; 59 } 60 61 try { 62 pStatement.close(); 63 connection.close(); 64 65 } catch (Exception e) { 66 // TODO: handle exception 67 System.out.println("關閉失敗"); 68 } 69 70 } catch (Exception e) { 71 // TODO: handle exception 72 System.out.println("刪除行 異常"); 73 e.printStackTrace(); 74 } 75 return flag; 76 77 } 78 79 public boolean select(int id){ 80 boolean flag=false; 81 Connection connection = null; 82 PreparedStatement pStatement = null; 83 ResultSet rSet = null; //查詢操作不同於 其他操作 ,會返回一個結果集 84 85 try { 86 String sql = "select * from chengyuan where id=?"; 87 connection = Jdbc_manage.get_connection(); 88 pStatement = connection.prepareStatement(sql); 89 pStatement.setInt(1, id); //查詢 id 行 90 91 try { 92 93 rSet = pStatement.executeQuery(); 94 95 if(rSet.next()){ 96 flag = true; 97 rSet.previous(); 98 } 99 100 101 while(rSet.next()){ 102 System.out.println(rSet.getString("id") + "-----" + rSet.getString("name") 103 + "-----" + rSet.getString("age")); 104 } 105 106 try { 107 108 rSet.close(); 109 pStatement.close(); 110 connection.close(); 111 112 } catch (Exception e) { 113 // TODO: handle exception 114 System.out.println("關閉失敗"); 115 } 116 117 } catch (Exception e) { 118 // TODO: handle exception 119 System.out.println("結果集異常"); 120 e.printStackTrace(); 121 } 122 123 } catch (Exception e) { 124 // TODO: handle exception 125 System.out.println("查詢 異常"); 126 e.printStackTrace(); 127 } 128 return flag; 129 130 } 131 132 //接收3個參數 修改第 id 行的 name和age 133 public boolean update(int id,String name,int age){ 134 boolean flag=false; 135 Connection connection = null; 136 PreparedStatement pStatement = null; 137 138 try { 139 String sql = "update chengyuan set name=?,age=? where id=?"; 140 connection = Jdbc_manage.get_connection(); 141 pStatement = connection.prepareStatement(sql); 142 pStatement.setString(1, name); 143 pStatement.setInt(2, age); 144 pStatement.setInt(3, id); 145 146 int i = 0; 147 i = pStatement.executeUpdate(); 148 if(i!=0){ 149 flag = true; 150 } 151 152 try { 153 pStatement.close(); 154 connection.close(); 155 156 } catch (Exception e) { 157 // TODO: handle exception 158 System.out.println("關閉失敗"); 159 } 160 161 } catch (Exception e) { 162 // TODO: handle exception 163 System.out.println("修改異常"); 164 e.printStackTrace(); 165 } 166 return flag; 167 168 } 169 170 //顯示所有數據 171 public boolean show(){ 172 boolean flag=false; 173 Connection connection = null; 174 PreparedStatement pStatement = null; 175 ResultSet rSet = null; 176 177 try { 178 String sql = "select * from chengyuan"; 179 connection = Jdbc_manage.get_connection(); 180 pStatement = connection.prepareStatement(sql); 181 182 try { 183 184 rSet = pStatement.executeQuery(); 185 186 if(rSet.next()){ 187 flag = true; 188 rSet.previous(); 189 } 190 191 while(rSet.next()){ 192 System.out.println(rSet.getString("id") + "-----" + rSet.getString("name") 193 + "-----" + rSet.getString("age")); 194 } 195 196 } catch (Exception e) { 197 // TODO: handle exception 198 System.out.println("結果集異常"); 199 e.printStackTrace(); 200 } 201 202 } catch (Exception e) { 203 // TODO: handle exception 204 System.out.println("查詢 異常"); 205 e.printStackTrace(); 206 } 207 return flag; 208 } 209 210 211 }
然後是 Main:
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 8 Use_mysql test = new Use_mysql(); 9 Scanner keyboard = new Scanner(System.in); 10 while(true){ 11 Main.caidan(); 12 System.out.println("請輸入"); 13 int input = 0; 14 input = keyboard.nextInt(); 15 if(input!=0){ 16 Main.xuanze(test, input); 17 Jdbc_manage.close_connection(); 18 }else{ 19 System.exit(0); 20 } 21 } 22 23 24 } 25 26 public static void xuanze(Use_mysql test,int n){ 27 Scanner pppp = new Scanner(System.in); 28 switch(n){ 29 case 1: 30 int id1,age1; 31 String name1; 32 System.out.println("請以此輸入你要添加的行的 id"); 33 id1 = pppp.nextInt(); 34 pppp.nextLine(); 35 System.out.println("請以此輸入你要添加的行的 name"); 36 name1 = pppp.next(); 37 pppp.nextLine(); 38 System.out.println("請以此輸入你要添加的行的 age"); 39 age1 = pppp.nextInt(); 40 pppp.nextLine(); 41 if(test.insert(id1, name1, age1)){ 42 System.out.println("添加成功"); 43 } 44 break; 45 case 2: 46 int id2; 47 System.out.println("請輸入你要刪除的行對應的id"); 48 id2 = pppp.nextInt(); 49 if(test.delete(id2)){ 50 System.out.println("刪除成功"); 51 } 52 break; 53 case 3: 54 int id3; 55 System.out.println("請輸入你要查詢的行對應的id"); 56 id3 = pppp.nextInt(); 57 if(test.select(id3)){ 58 System.out.println("查詢成功"); 59 } 60 break; 61 case 4: 62 int id4,age4; 63 String name4; 64 System.out.println("請輸入你要修改的行對應的id"); 65 id4 = pppp.nextInt(); 66 pppp.nextLine(); 67 System.out.println("輸入修改此行的name age"); 68 name4 = pppp.next(); 69 pppp.nextLine(); 70 age4 = pppp.nextInt(); 71 if(test.update(id4, name4, age4)){ 72 System.out.println("修改成功"); 73 } 74 break; 75 case 5: 76 System.out.println("當前表中數據為:"); 77 if(test.show()){ 78 System.out.println("顯示完畢"); 79 } 80 break; 81 default :System.out.println("輸入指令有誤");break; 82 83 } 84 } 85 86 public static void caidan(){ 87 System.out.println("******輸入0結束*******"); 88 System.out.println("*****1.插入一條數據*****"); 89 System.out.println("*****2.刪除一條數據*****"); 90 System.out.println("*****3.查詢一條數據*****"); 91 System.out.println("*****4.修改一條數據*****"); 92 System.out.println("*****5.顯示所有數據*****"); 93 } 94 95 }
OK 成功。
當然,可能還有很多 沒有發現的問題,如果你發現了 希望你可以在評論區留言,共同進步??
JAVA之JDBC的簡單使用(Mysql)