黑馬作業(d29)JDBCUTils工具類
阿新 • • 發佈:2019-01-06
必須能獨立寫出JDBCUtils工具類,保證用JDBCUtils工具類能完成功能,不用JDBCUtils工具類工具類也能夠完成功能
1.map中有如下資料(使用者名稱=密碼)
[liuyan=123456,wangbaoqiang=123321,fangbian=abcd,miejueshitai=123abc321]
在ip為127.0.0.1資料庫名為stdb,連線資料庫的使用者名稱和密碼為:admin和123456中有一個userinfo表相關欄位為(id,username,password)
(1)將map中的手機號碼取出來列印到控制檯上
* 直接使用map集合的keySet()方法獲取所有的key組成的Set集合,並遍歷
(2)判斷map中所有的使用者名稱在userinfo表中是否存在存在則輸出"該使用者已註冊",如果不存在將該使用者名稱及對應的密碼存入到userinfo表中
(map中的資料不需要修改)
* 連線到資料庫
* 建立表
drop database stdb;
create database stdb;
use stdb;
create table userinfo(
id int(10) primary key auto_increment,
username varchar(200),
password varchar(200)
1.map中有如下資料(使用者名稱=密碼)
[liuyan=123456,wangbaoqiang=123321,fangbian=abcd,miejueshitai=123abc321]
在ip為127.0.0.1資料庫名為stdb,連線資料庫的使用者名稱和密碼為:admin和123456中有一個userinfo表相關欄位為(id,username,password)
(1)將map中的手機號碼取出來列印到控制檯上
* 直接使用map集合的keySet()方法獲取所有的key組成的Set集合,並遍歷
(2)判斷map中所有的使用者名稱在userinfo表中是否存在存在則輸出"該使用者已註冊",如果不存在將該使用者名稱及對應的密碼存入到userinfo表中
(map中的資料不需要修改)
* 連線到資料庫
* 建立表
drop database stdb;
create database stdb;
use stdb;
create table userinfo(
id int(10) primary key auto_increment,
username varchar(200),
password varchar(200)
);
運用前面學到的知識採用配置檔案建立JDBCUtils
配置檔案 connection.properties
DriverClassName=com.mysql.jdbc.Driver
Url=jdbc:mysql://127.0.0.1:3306/stdb
UserName=admin
Password=123456
package com.homework; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class JDBCUtils { private static String driverclassname; private static String url; private static String username; private static String password; private static Connection con; private JDBCUtils() {} static { try { readConnection(); Class.forName(driverclassname); con=DriverManager.getConnection(url, username, password); }catch(Exception ex) { ex.printStackTrace(); throw new RuntimeException("資料庫連線失敗!!!!"); } } public static void readConnection() { try { Properties pro = new Properties(); pro.load(new FileReader("connection.properties")); driverclassname=pro.getProperty("DriverClassName"); url = pro.getProperty("Url"); username = pro.getProperty("UserName"); password = pro.getProperty("Password"); }catch(IOException io) { io.printStackTrace(); throw new RuntimeException("讀取配置檔案失敗!!!!"); } } public static Connection getConnection() { return con; } }
ackage com.homework; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; public class Text { public static Map<String, String>map=new HashMap<String ,String>(); public static Connection con =JDBCUtils.getConnection(); public static PreparedStatement pst; public static ResultSet rs; public static void main(String[] args) { storeMap(); readMap(); } // 遍歷集合、判斷、新增 public static void readMap() { for(String key:map.keySet()) { String password = map.get(key); System.out.println(key+"<<<<"+password); try { if(judge(key)) { System.out.println("該使用者已經註冊"); }else { insert(key, password); } }catch(SQLException sql) { sql.printStackTrace(); throw new RuntimeException("系統異常!!!請聯絡管理員"); } } } // 寫入使用者資訊 public static void insert(String username,String password) { try { String sql = "INSERT INTO userinfo (username,upassword)VALUES(?,?)"; pst =con.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); int i =pst.executeUpdate(); if(i>0) { System.out.println("註冊使用者成功!!!!"); } }catch(SQLException sql) { sql.printStackTrace(); throw new RuntimeException("註冊失敗!!!請聯絡管理員"); } } // 判斷 public static Boolean judge(String username)throws SQLException { String sql = "SELECT*FROM userinfo WHERE username=?"; pst =con.prepareStatement(sql); pst.setString(1, username); rs = pst.executeQuery(); if(rs.next()) { return true; }else { return false; } } // 儲存集合資料 public static void storeMap() { map.put("liuyuan","123456"); map.put("wangbaoqiang","123321"); map.put("fangbian","abcd"); map.put("miejueshitai","123abc321"); map.put("fasdf", "312435"); } }
總結:對於迴圈判斷使用者名稱是否存在,最開始想的是for與while的巢狀迴圈來實現,後面實驗後才發現rs.next只能迴圈5次,後面返回值都是false,無法實現想要的結果,故後面直接採用資料庫判斷這樣就解決了剛才出現的問題